【前端面試】CSS常見面試題匯總



1、談談你對CSS布局的理解

常見的布局方式:固定布局、流式布局、彈性布局、浮動布局、定位布局、margin和padding


2、請列舉幾個清除浮動的方法

(1)使用clear屬性

<div style="clear:both"></div>

(2)使用br標簽和其自身的HTML屬性

<br clear="all" />

(3)通過設置父元素的樣式,實現清除浮動,例如:

  • 父元素設置 overflow:hidden
  • 父元素設置 overflow:auto
  • 父元素設置 display:table
  • 父元素也設置浮動樣式

(4)使用 :after 偽元素


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

visibility:hidden,這個屬性只是簡單的隱藏某個元素,但是元素占用的空間任然存在;

opacity:0,是CSS3的屬性,設置元素為完全透明,和 visibility 的效果類似,但是該屬性修飾的元素可以使用 transition 和 animate 設置動畫效果;

display:none,設置元素為不可見,不會占用文檔的空間;

hidden屬性,該屬性是HTML5中新增的屬性,效果和 display 相同;


4、如何讓一段文本中的所有英文單詞的首字母大寫

text-transform: none | capitalize(將每個單詞的第一個字母轉為大寫) | uppercase(將每個單詞都轉為大寫)| lowercase(將每個單詞都轉為小寫)


5、請簡述CSS樣式表的繼承

CSS樣式表繼承指的是,特定的CSS屬性向下傳遞到子孫元素。會被繼承下去的屬性如下:

文本相關:font-family,font-size, font-style,font-variant,font-weight, font,letter-spacing,line-height,color;

列表相關:list-style-image,list-style-position,list-style-type, list-style;


6、請簡述CSS的選擇器

元素選擇器:* 、E、 E#id、 E.class

關系選擇器:E、F、E>F、E+F、E~F

屬性選擇器:E[att]、E[att="val"]、E[att~="val"]、E[att^="val"]、E[att$="val"]、E[att*="val"]、E[att|="val"]

偽類選擇器:E:link、E:visited、E:hover、E:active、E:focus、E:lang(fr)、E:not(s)、E:root、E:first-child、E:last-chil等

偽對象選擇器:E:first-letter/E::first-letter、E:first-line/E::first-line、E:before/E::before、E:after/E::after、E::selection


7、CSS偽類與CSS偽對象的區別

CSS引入偽類和偽元素的概念是為了描述一些現有CSS無法描述的東西,根本區別在於:它們是否創造了新的抽象元素;

偽類:描述了所有邏輯上存在但在文檔樹中無須標識的分類;

偽對象:代表了某個元素的子元素,這個子元素雖然在邏輯上存在,但卻並不實際存在於文檔樹中;


8、請簡述CSS的權重規則

行內樣式 > ID > 屬性選擇器/class類/偽類選擇器 > 元素名/偽對象選擇器;

關系選擇器將拆分為兩個選擇器再計算權重。


9、請寫出多種等高布局

  • 假等高布局:使用背景圖片,在列的父元素上使用這個背景圖進行Y軸的鋪放,從而實現一種等高列的假象
  • 給容器div使用單獨的背景色(固定布局、流體布局):用元素中的最大高度撐大其他的容器高度
  • 創建帶邊框的兩列等高布局:用border-left來做,只能使用兩列
  • 使用正padding和負margin對沖實現多列布局方法:在所有列中使用正的上下padding和負的上下margin,並在所有列外面加上一個容器,設置overflow:hidden把溢出背景切掉
  • 使用邊框和定位模擬列等高:但不能使用在多列
  • 模擬表格布局等高效果:兼容性不好,在IE6/7無法正常運行

10、在CSS樣式中使用px、em,各有什么優勢,在表現上有什么區別?

px是相對長度單位,相對於顯示器屏幕分辨率而言的;

em是相對長度單位,相對於當前對象內文本的字體尺寸;

px定義的字體,無法用瀏覽器字體放大功能;em的值並不是固定,會繼承父級元素的字體大小,

1 ÷ 父元素的font-size × 需要轉換的像素值 = em值

11、CSS中link和@import 的區別是什么?

  • link屬於HTML標簽,而 @import 是CSS提供的,只能加載CSS;
  • 頁面被加載時,link會同時被加載,而@import引用的CSS會等到頁面被加載完再加載;
  • @import只能在IE5以上才能識別,而link是HTML標簽,無兼容問題;
  • link方式的樣式權重高於@import的權重;
  • 當使用javascript控制DOM去改變樣式的時候,只能使用link方式,因為@import只有CSS才能識別,DOM無法控制;

12、position的absolute與fixed共同點與不同點?

相同:

  • 改變行內元素的呈現方式,display被置為block

  • 讓元素脫離普通流,不占據空間

  • 默認會覆蓋到非定位元素上

區別

  • absolute的”根元素“是可以設置的,而fixed的”根元素“固定為瀏覽器窗口。

  • 當你滾動網頁,fixed元素與瀏覽器窗口之間的距離是不變的。


13、position的值,relative 和 absolute 分別是相對於誰進行定位的?

absolute:生成絕對定位的元素,相對於 static 定位以外的第一個祖先元素進行定位

fixed:生成絕對定位的元素,相對於瀏覽器窗口進行定位。 (IE6不支持)

relative:生成相對定位的元素,相對於其在普通流中的位置進行定位

static:默認值。沒有定位,元素出現在正常的流中


14、CSS3有哪些新特性?

新增特性有:圓角(border-radius)、陰影(box-shadow)、對文字加特效(text-shadow)、線性漸變(gradient)、變形(transform);

增加了更多的CSS選擇器,媒體查詢,多欄布局,多背景rgba,引入偽元素::selection。


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

因為瀏覽器的兼容問題,不同瀏覽器對有些標簽的默認值是不同的,如果沒有初始化CSS,往往會出現瀏覽器之間的頁面顯示差異;

CSS樣式初始化之后會對SEO有一定的影響。


16、解釋下 CSS sprites 原理,及優缺點?

CSS sprites 其實就是把網頁中的一些背景圖片整合到一張圖片文件中,在利用CSS的 background-image,background-repeat,background-position的組合進行背景定位,background-position可以用數字精確的定位出背景圖片的位置。

優點:

  • 減少網頁的http請求
  • 減少圖片的字節
  • 解決網頁設計師在圖片命名上的困擾,只需要對一張集合的圖片上命名就可以了,不需要對每一個小元素進行命名
  • 更換風格方便,只需要在一張或少張圖片上修改圖片的顏色或樣式,整個網頁的風格就可以改變了

缺點:

  • 在寬屏,高分辨率的屏幕下的自適應頁面,如果背景圖不夠寬,很容易出現背景斷裂
  • CSS sprites 在開發的時候,需要通過Photoshop或其他工具測量計算每一個背景單元的精確位置
  • 在維護的時候比較麻煩,如果頁面背景有少許改動,一般就要修改這張合並的圖片

17、解釋一下浮動及其工作原理?

浮動元素脫離文檔流,不占據空間(引起“高度塌陷”現象);

浮動元素碰到包含它的邊框或者浮動元素的邊框停留。


18、浮動元素引起的問題

  • 父元素的高度無法被撐開,影響與父元素同級的元素

  • 與浮動元素同級的非浮動元素會跟隨其后

  • 若非第一個元素浮動,則該元素之前的元素也需要浮動,否則會影響頁面顯示的結構


19、什么是FOUC(無樣式內容閃爍)?你如何來避免FOUC?

如果使用@import方式對CSS進行導入,會導致某些頁面在windows下的IE出現一些奇怪的現象:
以無樣式顯示頁面內容的瞬間閃爍,這種現象被稱為文檔樣式短暫失效,簡稱FOUC

原理:當樣式表晚於結構性html加載,當加載到此樣式表時,頁面將停止之前的渲染。此樣式表被下載和解析后,將重新渲染頁面,也就出現了短暫的花屏現象。

解決方法:使用LINK標簽將樣式表放在文檔HEAD中。


20、line-height 三種賦值方式有何區別?(帶單位、純數字、百分比)

帶單位:px不用計算,em則會使元素以其父元素font-size值為參考來計算自己的行高;

純數字:把比例傳遞給后代,例如父級行高為1.5,子元素字體為18px,則子元素行高為1.5*18=27px;

百分比:將計算后的值傳遞給后代;


21、:link、:visited、:hover、:active 的執行順序是怎么樣的?

:link > :visited > :hover > :active

22、經常遇到的瀏覽器兼容性有哪些?如何解決?

  • 瀏覽器默認的 margin 和 padding 不同
  • IE6雙邊距bug
  • 在IE6、IE7中元素高度超出自己設置高度,原因是IE8以前的瀏覽器中會給元素設置默認的行高的高度導致的
  • min-height 在IE6下不起作用
  • 透明性IE用filter.Alpha(opcity=60),而其他主瀏覽器用opacity:0.6
  • input邊框問題,去掉input邊框一般用 border:none 就可以了,由於IE6在解析input樣式時的bug(優先級問題),在IE6下無效

23、有哪些方式可以對一個DOM設置它的CSS樣式?

  • 外部樣式表,使用 <link>標簽引入一個外部CSS樣式
  • 內部樣式表,將CSS代碼放在 <style> 標簽內部
  • 內聯樣式,將CSS樣式直接定義在HTML元素內部

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

外邊距重疊就是margin-collapse;

在CSS當中,相鄰的兩個盒子(可能是兄弟關系也可能是祖先關系)的外邊距可以結合成一個單獨的外邊距。這種合並外邊距的方式稱為折疊,並且因而所結合成的外邊距稱為折疊外邊距;

折疊結果計算規則:

  • 兩個相鄰的外邊距都是正數時,折疊結果是他們兩者之間較大的值;
  • 兩個相鄰的外邊距都是負數時,折疊結果是兩者絕對值的較大值;
  • 兩個外邊距一正一負時,折疊結果是兩者的相加的和

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

  • opacity 作用於元素,以及元素內的所有內容的透明度,rgba()只作用於元素的顏色或其背景色
  • 設置rgba透明的元素的子元素不會繼承透明效果

26、CSS屬性content有什么作用?有什么應用?

css的content屬性專門應用在 after/before 偽元素上,用於插入生成內容,可以配合自定義字體顯示特殊符號。


免責聲明!

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



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