前端面試題整理—HTML/CSS篇


1、簡述一下你對HTML語義化的理解

 1)用正確的標簽做正確的事情

 2)html語義化讓頁面的內容結構化,結構更清晰,便於對瀏覽器、搜索引擎解析

 3)即使在沒有樣式CSS情況下也以一種文檔格式顯示,並且是容易閱讀的

 4)搜索引擎的爬蟲也依賴於HTML標記來確定上下文和各個關鍵字的權重,利於SEO

 5)使閱讀源代碼的人對網站更容易將網站分塊,便於閱讀維護理解

 

2、Doctype作用?標准模式與兼容模式之間區別?

  <!DOCTYPE>聲明位於位於HTML文檔中的第一行,處於 <html>標簽之前,告知瀏覽器的解析器用什么文檔標准解析這個文檔

  DOCTYPE不存在或格式不正確會導致文檔以兼容模式呈現

  標准模式的排版 和JS運作模式都是以該瀏覽器支持的最高標准運行

  在兼容模式中,頁面以寬松的向后兼容的方式顯示,模擬老式瀏覽器以防止站點無法工作

 

3、什么是盒模型?你是怎么理解的

  簡單的說頁面是由若干個盒模型(BOX)堆砌起來的,可以說每個HTML元素就是一個盒模型

  盒模型由外到內包括邊距(margin)、邊框(border)、填充(padding)、內容(content)

  盒子模型有兩種分別是W3C標准模型和IE模型

  不同之處:

  標准模型寬高是指content,不包括padding和border

  IE模型的寬高是指content+padding+border的總寬高

 

4、談談對BFC的理解

  BFC:塊格式化上下文(Block Formatting Context)

  BFC 是一個獨立的布局環境,可以理解為一個容器,在這個容器中按照一定規則進行物品擺放,並且不會影響其它環境中的物品

  BFC的特性:

  1)bfc 是一個獨立的容器,容器內子元素不會影響容器外的元素

  2)bfc的區域不會與float的元素區域重疊

  3)計算bfc的高度時,浮動元素也參與計算

  4)垂直方向上的距離由margin決定

  5)內部的Box會在垂直方向上一個接一個的放置

  以下條件會形成BFC:

  1)浮動元素 float:left | right | inherit(none除外)

  2)position:absolute 或 fixed 定位

     3)display:inline-block | inline-flex | table-cell

  4)overflow:hidden | auto | scroll (visible除外)

 

5、CSS選擇符有哪些?哪些屬性可以繼承?

  id選擇器( # myid)
  類選擇器(.myclassname)
  標簽選擇器(div, h1, p)
  相鄰選擇器(h1 + p)
  子選擇器(ul > li)
  后代選擇器(li a)
  通配符選擇器( * )
  屬性選擇器(a[rel = "external"])
  偽類選擇器(a:hover, li:nth-child)

  可繼承的樣式: font-size font-family color, ul li dl dt dd

  不可繼承的樣式:border padding margin width height

 

6、CSS優先級算法如何計算?

  優先級就近原則,同權重情況下樣式定義最近者為准

  載入樣式以最后載入的定位為准

  優先級為: !important > id > class > tag important 比 內聯優先級高

 

7、你理解的偽類與偽元素 

  偽類:用於向某些選擇器添加特殊的效果。比如span:first-child{}
  偽元素:用於將特殊的效果添加到某些選擇器。比如span:before{}

  偽類只要不是互斥可以疊加使用

  偽元素在一個選擇器中只能出現一次,並且只能出現在末尾
  偽類與偽元素優先級分別與類、標簽優先級相同
  它們的本質區別:是否抽象創造了新元素

 

8、display有哪些值?box-sizing 常用的屬性有哪些?說明他們的作用

  block 像塊類型元素一樣顯示。
  none 缺省值。像行內元素類型一樣顯示。
  inline-block 像行內元素一樣顯示,但其內容像塊類型元素一樣顯示。
  list-item 像塊類型元素一樣顯示,並添加樣式列表標記。
  table 此元素會作為塊級表格來顯示
  inherit 規定應該從父元素繼承 display 屬性的值 

  box-sizing: content-box; // 默認的標准(W3C)盒模型元素效果
  box-sizing: border-box; // 觸發怪異(IE)盒模型元素的效果
  box-sizing: inherit; // 繼承父元素 box-sizing 屬性的值

 

9、什么是外邊距重疊? 重疊的結果是什么?

  外邊距重疊就是 margin-collapse

  相鄰的兩個盒子(可能是兄弟關系也可能是祖先關系)的外邊距可以結合成一個單獨的外邊距。 這種合並外邊距的方式被稱為折疊  

  折疊結果遵循下列計算規則:
  1)兩個相鄰的外邊距都是正數時,折疊結果是它們兩者之間較大的值
  2)兩個相鄰的外邊距都是負數時,折疊結果是兩者絕對值的較大值
  3)兩個外邊距一正一負時,折疊結果是兩者的相加的和

 

10、請列舉幾種隱藏元素的方法  

  1)display: none; 元素會變得不可見,並且不會再占用文檔的空間
  2)visibility: hidden; 只是簡單的隱藏某個元素,但是元素占用的空間還存在
  3)opacity: 0; 設置0可以使一個元素完全透明
  4)position: absolute; 設置一個很大的 left 負值定位,使元素定位在可見區域之外
  5)transform: scale(0); 將一個元素設置為縮放無限小,元素不可見 原來位置將被保留

 

11、你對line-height是如何理解的?

  line-height 指一行字的高度,包含了字間距,實際上是下一行基線到上一行基線距離

  一個容器沒有設置高度,那么撐開容器高度的是 line-height 而不是容器內的文字內容

  把 line-height 值設置為 height 一樣大小的值可以實現單行文字的垂直居中

  line-height和height都能撐開一個高度,height會觸發 haslayout,而line-height不會

 

12、行內元素有哪些?塊級元素有哪些? 空(void)元素有那些?

  行內元素有:a b span img input select strong

  塊級元素有:div ul ol li dl dt dd h1-h6 p

  常見的空元素: <br> <hr> <img> <input> <link> <meta>

 

13、position有哪些值,他們各自的區別

  absolute:生成絕對定位的元素,相對於值不為 static的第一個父元素進行定位

  relative:生成相對定位的元素,相對於其正常位置進行定位

  fixed:生成絕對定位的元素,相對於瀏覽器窗口進行定位(固定定位)

  static:默認值,無定位,元素出現在正常的流中(忽略top,bottom,left,right z-index)

 

14、HTML5有哪些新特性,新技術,如何區分HTML和HTML5?

   語意化更好的內容元素。比如header、footer、nav、section、article

  用於媒介回放的 video 和 audio 元素

  繪畫 canvas

  拖放Drag

  表單控件,calendar、date、time、email、url、search

  存儲功能localStorage和sessionStorage

  localStorage 長期存儲數據,瀏覽器關閉后數據不丟失
  sessionStorage的數據在瀏覽器關閉后自動刪除

  新的技術webworker, websocket(通訊協議), Geolocation(地理定位)

  區分HTML和HTML5:

  DOCTYPE聲明上不同

  結構語義上不同

  添加了新的功能媒體標記標簽,如audio、video

 

15、SVG 與 Canvas兩者間的區別

  SVG 是一種使用 XML 描述 2D 圖形的語言

  Canvas 通過 JavaScript 來繪制 2D 圖形

  SVG 基於 XML,這意味着 SVG DOM 中的每個元素都是可用的,在SVG 中,每個被繪制的圖形均被視為對象

  如果 SVG 對象的屬性發生變化,那么瀏覽器能夠自動重現圖形

  Canvas 是逐像素進行渲染的

  在 canvas 中,一旦圖形被繪制完成,它就不會繼續得到瀏覽器的關注

  如果其位置發生變化,那么整個場景也需要重新繪制,包括任何或許已被圖形覆蓋的對象

 

16、為什么要初始化CSS樣式

  因為瀏覽器的兼容問題,不同瀏覽器對有些標簽的默認值是不同的

  如果沒對CSS初始化往往會出現瀏覽器之間的頁面顯示差異

  可以使用 reset.css 或 Normalize.css 做 CSS 初始化

 

17、rgba() 和 opacity 的透明效果有什么不同?

  opacity 作用於元素以及元素內的所有內容(包括文字)的透明度

  rgba() 只作用於元素自身的顏色或其背景色,子元素不會繼承透明效果

 

18、請描述一下 cookies,sessionStorage 和 localStorage 的區別

  cookie是網站為了標示用戶身份而儲存在用戶本地終端上的數據(一般加密)

  sessionStorage和localStorage不會自動把數據發給服務器,僅在本地保存

  存儲大小:

  cookie數據大小不能超過4k

  sessionStorage和localStorage雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大

  有效時間:

  localStorage 存儲持久數據,瀏覽器關閉后數據不丟失除非主動刪除數據

  sessionStorage 數據在當前瀏覽器窗口關閉后自動刪除

  cookie 設置的cookie過期時間之前一直有效,即使窗口或瀏覽器關閉

 

19、瀏覽器是怎么對HTML5的離線儲存資源進行管理和加載的?

  1)在線的情況下,瀏覽器發現 html 標簽有 manifest 屬性,它會請求 manifest 文件

  2)如果是第一次訪問app,那么瀏覽器就會根據 manifest 文件的內容下載相應的資源並且進行離線存儲

  3)如果已經訪問過app且資源已經離線存儲了,瀏覽器會對比新的 manifest 文件與舊的 manifest 文件,如果文件沒有發生改變,就不做任何操作。如果文件改變了,那么就會重新下載文件中的資源並進行離線存儲

  4)離線的情況下,瀏覽器就直接使用離線存儲的資源

 

20、頁面導入樣式時,使用 link 和 @import 有什么區別?

  link 屬於HTML標簽,除了加載CSS外,還能用於定 RSS等;@import 只能用於加載CSS

  頁面加載的時,link 會同時被加載,而 @import 引用的 CSS 會等到頁面被加載完再加載

  @import 只在 IE5 以上才能被識別,而 link 是HTML標簽,無兼容問題

 

21、列舉幾種清除浮動的方法

  1)給父級使用:after 偽元素

  2)末尾處添加空div標簽clear:both

  3)父元素設置 overflow:hidden; (必須定義width或zoom:1)

  4)父元素也設置浮動

  5)結尾處加br標簽clear:both

 

22、什么是響應式設計?響應式設計的基本原理是什么?如何兼容低版本的IE?

  響應式設計就是網站能夠兼容多個終端(包括PC端,手機平板終端),而不是為每個終端做一個特定的版本

  基本原理是利用CSS3媒體查詢,為不同尺寸的設備適配不同樣式

  對於低版本的IE,可采用JS獲取屏幕寬度,然后通過resize方法來實現兼容

 

23、水平居中、垂直居中的方法有哪些?

  水平居中:

  1)inline-block實現水平居中(text-align:center;)

  2)margin和width實現水平居中

  3)絕對定位實現水平居中

  4)使用flex實現水平居中

  5)使用柵格布局grid實現水平居中

  垂直居中:

  1)新增 inline-block 兄弟元素,設置 vertical-align

  2)絕對定位配合 transform 位移

  3)使用flex彈性盒子display:flex

  4)未知高度的塊級子元素,采用table-cell配合vertical-align

  5)已知高度的塊級子元素,采用絕對定位和負邊距

  6)通過css3的translate變形實現

 

24、你理解的flex彈性盒子布局

  Flexbox用於不同尺寸屏幕中創建可自動擴展和收縮布局

  任何一個容器都可以指定為Flex布局

  使用彈性布局可以有效的分配一個容器的空間

  即使我們的容器元素尺寸改變,它內部的元素也可以調整它的尺寸來適應空間

  設置了flex布局后,子元素的float、clear和vertical-align屬性就會失效

 

25、闡述px與em、rem的區別,以及你知道的其他css單位

  px就是pixel像素的縮寫,相對長度單位。常用於PC端的字體單位

  em相對於當前父元素的font-size(並不是固定的)

  rem相對於HTML根元素的font

  其他css單位:

  %百分比,一般來說就是相對於父元素

  vw是相對視口(viewport)的寬度而定的,長度等於視口寬度的1/100

  vh是相對視口(viewport)的高度而定的,長度等於視口高度的1/100

  vm css3新單位,相對於視口的寬度或高度中較小的那個

 

26、實現左邊固定寬度,右邊自適應(不限於一種方法)

  1)浮動布局(左側固定寬度並且左浮動,右側使用margin-left)

  2)使用定位(左側固定寬度並且絕對定位,右側使用margin-left)

  3)overflow(左側固定寬並且左浮動,右側加overflow:hidden)

  4)flex布局(父級元素設置display:flex,左側設置固定寬,右側flex:1)

 

27、使用css實現一個持續的動畫

  

.animat{
     width:20px;
     height:20px;
     background:red;
     position:relative;
     animation:mymove 3s infinite;        
}
@keyframes mymove{
     from{left:0px;}
     to{left:200px;}
}

 

28、css實現三角形

.triangle{ 
     width:0;
     height:0;
     border-width:20px;
     border-style:solid;
     border-color:transparent transparent red transparent;
}

 

29、移動端開發中有哪些常用的布局?

  百分比流式布局

  flex布局

  媒體查詢+rem布局

  固定寬度做法

 

30、什么是聖杯布局和雙飛翼布局,並說下實現原理

  聖杯布局:

  三列布局;中間主體內容前置,且寬度自適應;兩邊內容定寬

  好處:重要的內容放在文檔流前面可以優先渲染

  原理:利用相對定位、浮動、負邊距布局,而不添加額外標簽

  雙飛翼布局:

  雙飛翼布局:對聖杯布局(使用相對定位對以后布局有局限性)的改進,消除相對定位

  原理:主體元素上設置左右邊距,預留兩翼位置。左右兩欄使用浮動和負邊距歸位,消除相對定位

 

31、align-content與align-items的區別?

  align-content:center對單行是沒有效果的

  而align-items:center不管是對單行還是多行都有效果

  我們日常開發中用的比較多的就是align-items

 

32、列舉去除inline-block出現間距的幾種方法

  1)給父級font-size:0

  2)使用margin負值

  3)使用letter-spacing

  4)使用word-spacing

  5)移除空格

 

33、title與h1的區別、b與strong的區別、i與em的區別?

  title屬性沒有明確意義只表示是個標題,H1則表示層次明確的標題,對頁面信息的抓取有很大的影響

  b是一個實體標簽,展示強調內容。strong是標明重點內容,有語氣加強的含義

  i內容展示為斜體,em表示強調的文本

 

34、<script>、<script defer>、<script async>三者之間區別

  沒有defer或async屬性,瀏覽器會立即加載並執行相應的腳本

  有了async屬性,表示后續文檔的加載和渲染與js腳本的加載和執行是並行進行的,即異步執行

  有了defer屬性,加載后續文檔的過程和js腳本的加載是並行進行的
  (此時僅加載不執行)

  defer和async在網絡加載過程是一致的,都是異步執行

  兩者的區別在於腳本加載完成之后何時執行

  如果存在多個有defer屬性的腳本,那么它們是按照加載順序執行腳本的

  對於async,它的加載和執行是緊挨的,無論聲明順序如何,只要加載完成立刻執行

 

35、data-的用法,以及他的優勢

  data-代表自定義屬性,可以在所有的 HTML 元素中嵌入數據

  自定義的數據可以讓頁面擁有更好的交互體驗

  屬性名不要包含大寫字母,在 data- 后必須至少有一個字符

  該屬性可以是任何字符串

  自定義屬性前綴 "data-" 會被客戶端忽略

 

36、如何實現瀏覽器內多個標簽頁之間的通信?

  WebSocket、SharedWorker

  也可以調用localstorge、cookies等本地存儲方式

 

37、實現不使用border畫出1px高的線

注:在不同瀏覽器的標准模式與怪異模式下都能保持一致的效果

<div style="height:1px;overflow:hidden;background:red"></div>

 

38、怎么讓Chrome支持小於12px 的文字

.shrink{
      -webkit-transform:scale(0.8);
       -o-transform:scale(1);
       display:inline-block;
}

 

39、一個滿屏 品 字布局 如何設計?

  上面的div寬100%

  下面的兩個div分別寬50%

  然后用float或者inline使其不換行即可

 

40、經常遇到的瀏覽器的兼容性有哪些?解決方法是什么?

  1)PNG24位的圖片在ie6瀏覽器上出現背景,解決方案是做成PNG8

  2)瀏覽器默認的margin和padding不同。解決方案:*{margin:0;padding:0;}

  3)Chrome中文界面下默認會將小於12px的文本強制按照12px顯示,可通過加入CSS屬性-webkit-text-size-adjust:none解決

  4)IE下,可以使用獲取常規屬性的方法來獲取自定義屬性,也可以使用getAttribute()獲取自定義的屬性

  在FireFox下,只能使用getAttribute()獲取自定義屬性;解決方法:統一通過getAttribute()獲取自定義屬性

  5)IE下,even對象有x,y屬性,但是沒有pageX,pageY屬性

  在Firefox下,even對象有pageX,pageY屬性,但是沒有x,y屬性

   解決方法:(條件注釋)缺點是在IE瀏覽器下可能會增加額外的HTTP請求數

 

41、less如何定義一個函數,比如圓角

//定義圓角
   @radius 
       .round(@radius:5px){
        border-radius:@radius;
            -webkit-border-radius: @radius;
            -moz-border-radius: @radius;
        }
        .round7{
           .round(7px);
        }

 

42、如何平移放大一個元素

transform:translateX(100px)
transform:scale(2)

 

43、CSS中動畫實現的方式有幾種

  transition、keyframes(animation)

 

44、你知道的CSS預處理器,以及預處理器作用

  less、sass、Stylus

  作用:
  幫助更好地組織CSS代碼
  提高代碼復用率
  提升可維護性

 

45、如何解決CSS模塊化

  less sass 等CSS預處理器

  webpack處理CSS(css-loader+style-loader)

  PostCSS插件(postCSS-import/precss等)

 

46、li與li之間有看不見的空白間隔是什么原因引起的?有什么解決辦法?

  瀏覽器的默認行為會把inline元素間的空白字符渲染成一個空格,空格會占用一個字符的寬度

  解決方案:給父級font-sieze設置為0。或者采用letter-spacing方式

 

47、描述一下你對漸進增強和優雅降級的理解

  漸進增強:針對低版本瀏覽器進行構建頁面,保證最基本的功能,然后再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗

.transition{
    -webkit-transition: all .5s;
       -moz-transition: all .5s;
         -o-transition: all .5s;
           transition: all .5s;  
 }

  優雅降級:一開始就構建完整的功能,然后再針對低版本瀏覽器進行兼容

        .transition{ 
               transition: all .5s;
            -o-transition: all .5s;
           -moz-transition: all .5s;
         -webkit-transition: all .5s;
        }    

 

48、解釋css sprites,如何使用

  css精靈又稱雪碧圖

  將多個小圖片整個到一張大的背景圖上,再利用repeat、position進行精准操作

  雪碧圖減輕了服務器的請求次數,提高了頁面性能

 

49、針對移動瀏覽器端開發頁面,不期望用戶放大屏幕,且要求“視口(viewport)”寬度等於屏幕寬度,視口高度等於設備高度,如何設置?

<meta name = "viewport" content = "width=device-width,initial-scale = 1.0,maximum-scale = 1.0">

 

50、簡述幾個css hack

  (1) 圖片間隙
  在div中插入圖片,圖片會將div下方撐大3px。hack1:將<div>與<img>寫在同一行。hack2:給<img>添加display:block;
  dt li 中的圖片間隙。hack:給<img>添加display:block;
  (2) 默認高度,IE6以下版本中,部分塊元素,擁有默認高度(低於18px)
  hack1:給元素添加:font-size:0;
  hack2:聲明:overflow:hidden;
  表單行高不一致
  hack1:給表單添加聲明:float:left;height: ;border: 0;
  鼠標指針
  hack:若統一某一元素鼠標指針為手型:cursor:pointer;
  當li內的a轉化塊元素時,給a設置float,IE里面會出現階梯狀
  hack1:給a加display:inline-block;
  hack2:給li加float:left;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM