前端開發面試題之 CSS

“每18至24個月,前端都會難一倍”

——赫門 “2015深JS大會《前端服務化之路》主題演講”

知識點

布局盒子模型選擇器優先級CSS3Flexbox浮動元素SassLess......

題目&答案

  • 介紹一下CSS的盒子模型。
(1)有兩種, IE 盒子模型、標準 W3C 盒子模型;IE的content部分包含了 border 和 pading;
(2)盒模型: 內容(content)、填充(padding)、邊界(margin)、 邊框(border)。
  • CSS選擇符有哪些?哪些屬性可以繼承?
(1)id選擇器(#classId)
(2)類選擇器(.className)
(3)標簽選擇器(div,h1,p,span,table)
(4)相鄰選擇器(h1 + p)
(5)子選擇器(ul > li)
(6)后代選擇器(li a)
(7)通配符選擇器(*)
(8)屬性選擇器(a[rel = "external"])
(9)偽類選擇器(a:hover,li:nth-child)
//
可繼承的樣式:font-size,font-family,color,UL,LI,DL,DD,DT
//
不可繼承的樣式:border,padding,margin,width,height
  • CSS 如何計算優先級?
就近原則,同權重情況下以樣式定義最近者為準;
載入樣式以最后載入的定位為準;
優先級:
    !important > id > class > tag
    important 比 內聯優先級高
  • CSS3 新增的偽類有哪些?
CSS3新增偽類舉例:
    p:first-of-type 選擇屬于其父元素的首個 <p> 元素的每個 <p> 元素。
    p:last-of-type  選擇屬于其父元素的最后 <p> 元素的每個 <p> 元素。
    p:only-of-type  選擇屬于其父元素唯一的 <p> 元素的每個 <p> 元素。
    p:only-child    選擇屬于其父元素的唯一子元素的每個 <p> 元素。
    p:nth-child(2)  選擇屬于其父元素的第二個子元素的每個 <p> 元素。
    :enabled        :disabled 控制表單控件的禁用狀態。
    :checked        單選框或復選框被選中。
  • 如何居中div?如何居中一個浮動元素?如何讓絕對定位的div居中?
    給 div 設置一個寬度,然后添加 margin: 0 auto 屬性
    div{
      width: 200px;
      margin: 0 auto;
    }
    
    居中一個浮動元素
    確定容器的寬高(500*300)
    設置層的外邊距
    .element{
      width: 500px;
      height: 300px;               //高度可以不設
      margin: -150px 0 0 -250px;
      position: relative;          //相對定位
      background-color: red;       //顯示效果
      left: 50%;
      top: 50%;
    }
    
    讓絕對定位的 div 居中
    .element{
      position: absolute;
      width: 1200px;
      background: none;
      margin: 0 auto;
      top: 0;
      left: 0;
      bottom: 0;
      right: 0;
    }
    
  • display 有哪些值?各有何作用?
block 象塊類型元素一樣顯示。
none 缺省值。象行內元素類型一樣顯示。
inline-block 象行內元素一樣顯示,但其內容象塊類型元素一樣顯示。
list-item 象塊類型元素一樣顯示,并添加樣式列表標記。
  • position 中的 relative 和 absolute 的定位原點是什么?
absolute
    生成絕對定位的元素,相對于 static 定位以外的第一個父元素進行定位。
//
fixed (老IE不支持)
    生成絕對定位的元素,相對于瀏覽器窗口進行定位。
//
relative
    生成相對定位的元素,相對于其正常位置進行定位。
//
static
    默認值。沒有定位,元素出現在正常的流中
   (忽略 top, bottom, left, right z-index 聲明)。
//
inherit
    規定從父元素繼承 position 屬性的值。
  • CSS3 有哪些新特性?
圓角-半徑(border-radius:8px),
陰影(box-shadow:10px),
文字特效(text-shadow、),
線性漸變(gradient),
旋轉(transform)
transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋轉,縮放,定位,傾斜
增加了更多的CSS選擇器
多背景 rgba
  • 解釋一下 CSS3 的 Flexbox (彈性盒布局模型),以及適用場景?
  • 用純 CSS 創建一個三角形的原理是什么?
把上、左、右三條邊隱藏掉(顏色設為 transparent)
#demo {
    width:0;
    height: 0;
    border-width: 20px;
    border-style: solid;
    border-color: transparent transparent red transparent;
}
  • 如何設計一個滿屏“品”字布局?
簡單的方式:
    上面的div寬100%,
    下面的兩個div分別寬50%,
    用float或inline使其不換行。
  • 常見兼容性問題有哪些?
(1)png24位的圖片在iE6瀏覽器上出現背景,解決方案是做成PNG8。
(2)瀏覽器默認的margin和padding不同。解決方案是加一個全局的*{margin:0;padding:0;}來統一。
(3)IE6雙邊距bug:塊屬性標簽float后,又有橫行的margin情況下,在ie6顯示margin比設置的大。
(4)IE下,可以使用獲取常規屬性的方法來獲取自定義屬性,也可以使用getAttribute()獲取自定義屬性;
Firefox下,只能使用getAttribute()獲取自定義屬性;
解決方法:統一通過getAttribute()獲取自定義屬性。
(5)
IE下,even對象有x,y屬性,但是沒有pageX,pageY屬性;
Firefox下,event對象有pageX,pageY屬性,但是沒有x,y屬性;
解決方法:(條件注釋)缺點是在IE瀏覽器下可能會增加額外的HTTP請求數。
(6)Chrome 中文界面下默認會將小于 12px 的文本強制按照 12px 顯示,可通過加入 CSS 屬性 -webkit-text-size-adjust: none; 解決。
  • li與li之間有看不見的空白間隔是什么原因引起的?有什么解決辦法?
  • 經常遇到的瀏覽器的兼容性有哪些?原因,解決方法是什么,常用hack的技巧?
  • 為什么要初始化CSS樣式?
因為瀏覽器的兼容問題,不同瀏覽器對有些標簽的默認值是不同的,如果沒對CSS初始化往往會出現瀏覽器之間的頁面顯示差異。
當然,初始化樣式會對SEO有一定的影響,但魚和熊掌不可兼得,但力求影響最小的情況下初始化。
//
最簡單的初始化方法: * {padding: 0; margin: 0;} (強烈不建議)
//
淘寶的樣式初始化代碼:
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }
h1, h2, h3, h4, h5, h6{ font-size:100%; }
address, cite, dfn, em, var { font-style:normal; }
code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
small{ font-size:12px; }
ul, ol { list-style:none; }
a { text-decoration:none; }
a:hover { text-decoration:underline; }
sup { vertical-align:text-top; }
sub{ vertical-align:text-bottom; }
legend { color:#000; }
fieldset, img { border:0; }
button, input, select, textarea { font-size:100%; }
table { border-collapse:collapse; border-spacing:0; }
  • absolute 的 containing block(容器塊)計算方式跟正常流有什么不同?
無論屬于哪種,都要先找到其祖先元素中最近的 position 值不為 static 的元素,然后再判斷:
(1)若此元素為 inline 元素,則 containing block 為能夠包含這個元素生成的第一個和最后一個 inline box 的 padding box (除 margin, border 外的區域) 的最小矩形;
(2)否則,則由這個祖先元素的 padding box 構成。
如果都找不到,則為 initial containing block。
//
補充:
(1)static(默認的)/relative:簡單說就是它的父元素的內容框(即去掉padding的部分)
(2)absolute: 向上找最近的定位為absolute/relative的元素
(3)fixed: 它的containing block一律為根元素(html/body),根元素也是initial containing block
  • CSS 里的 visibility 屬性有個 collapse 屬性值是干嘛用的?在不同瀏覽器下有什么區別?
  • position 跟display、margin collapse、overflow、float這些特性相互疊加后會怎么樣?
  • 談談你對 BFC 規范(塊級格式化上下文:block formatting context)的理解?
(W3C CSS 2.1 規范中的一個概念,它是一個獨立容器,決定了元素如何對其內容進行定位,以及與其他元素的關系和相互作用。)
 一個頁面是由很多個 Box 組成的,元素的類型和 display 屬性,決定了這個 Box 的類型。
 不同類型的 Box,會參與不同的 Formatting Context(決定如何渲染文檔的容器),因此Box內的元素會以不同的方式渲染,也就是說BFC內部的元素和外部的元素不會互相影響。
  • CSS 定義的權重
以下是權重的規則:標簽的權重為1,class的權重為10,id的權重為100,以下例子是演示各種定義的權重值:
/*權重為1*/
div{
}
/*權重為10*/
.class1{
}
/*權重為100*/
#id1{
}
/*權重為100+1=101*/
#id1 div{
}
/*權重為10+1=11*/
.class1 div{
}
/*權重為10+10+1=21*/
.class1 .class2 div{
}
//
如果權重相同,則最后定義的樣式會起作用,但是應該避免這種情況出現
  • 請解釋一下為什么會出現浮動?什么時候需要清除浮動?以及清除浮動的方式是什么?
  • 移動端的布局用過媒體查詢嗎?
  • CSS 優化、提高性能的方法有哪些?
  • 瀏覽器是怎樣解析 CSS 選擇器的?
  • 在網頁中應該使用奇數還是偶數的字體?為什么?
  • margin 和 padding 分別適合什么場景使用?
  • 抽離樣式模塊怎么寫?說出思路,有無實踐經驗?(阿里)
  • 元素豎向的百分比設定是相對于容器的高度嗎?
  • 全屏滾動的原理是什么?用到了 CSS 的哪些屬性?
  • 什么是響應式設計?響應式設計的基本原理是什么?如何兼容低版本的IE?
  • 視差滾動效果,如何給每頁做不同的動畫?(回到頂部,向下滑動要再次出現,和只出現一次分別怎么做?)
  • ::before 和 :after 中雙冒號和單冒號有什么區別?解釋一下這2個偽元素的作用。
  • 如何修改 Chrome 記住密碼后自動填充表單的黃色背景?
  • 你對 line-height 是如何理解的?
  • 設置元素浮動后,該元素的 display 值是多少?(自動變成display:block)
  • 怎么讓 Chrome 支持小于12px的字符?
  • 讓頁面里的字體變清晰、變細用 CSS 怎么做?(-webkit-font-smoothing: antialiased;)
  • font-style 屬性可以讓它賦值為“oblique”,oblique 是什么意思?
  • position: fixed; 在 Android 下無效怎么處理?
  • 如果需要手動寫動畫,你認為最小時間間隔是多久?為什么?(阿里)
多數顯示器默認頻率是60Hz,即1秒刷新60次,所以理論上最小時間間隔為 1/6*1000ms = 16.7ms
  • overflow: scroll 時不能平滑滾動的問題怎么處理?
  • png、jpg、gif 這些圖片格式解釋一下,分別什么時候用。有沒有了解過webp、jpg-large?
  • 什么是 Cookie 隔離?(或者說:請求資源的時候不要讓它帶cookie怎么做)
如果靜態文件都放在主域名下,那靜態文件請求的時候都帶有的cookie的數據提交給server的,非常浪費流量,所以不如隔離開。
因為cookie有域的限制,因此不能跨域提交請求,故使用非主要域名的時候,請求頭中就不會帶有cookie數據,這樣可以降低請求頭的大小,降低請求時間,從而達到降低整體請求延時的目的。
同時這種方式不會將cookie傳入Web Server,也減少了Web Server對cookie的處理分析環節,提高了webserver的http請求的解析速度。
  • 介紹一下 Sass 和 Less 是什么?它們有何區別?
Sass (Syntactically Awesome Stylesheets)是一種動態樣式語言,語法跟css一樣(但多了些功能),比css好寫,而且更容易閱讀。Sass語法類似與Haml,屬于縮排語法(makeup),用意就是為了快速寫Html和Css。
Less一種動態樣式語言. 將CSS賦予了動態語言的特性,如變量,繼承,運算, 函數. LESS 既可以在客戶端上運行 (支持IE 6+, Webkit, Firefox),也可一在服務端運行 (借助 Node.js)。
區別:
(1))Sass是基于Ruby的,是在服務端處理的,而Less是需要引入less.js來處理Less代碼輸出Css到瀏覽器,也可以在開發環節使用Less,然后編譯成Css文件,直接放到項目中,也有Less.app、SimpleLess、CodeKit.app這樣的工具,也有在線編譯地址。
(2)變量符不一樣,less是@,而Scss是$,而且變量的作用域也不一樣,后面會講到。
(3)輸出設置,Less沒有輸出設置,Sass提供4中輸出選項:nested, compact, compressed 和 expanded。
(4)Sass支持條件語句,可以使用if{}else{},for{}循環等等。而Less不支持。

系列:
前端開發面試題之HTML
前端開發面試題之綜合篇
前端開發面試題之JavaScript


資料搜集整理自 網絡
同時發布在 GitHub-前端開發面試題之CSSGitBook-《WEB-DE》前端開發面試題之CSS

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,776評論 1 92
  • <a name='html'>HTML</a> Doctype作用?標準模式與兼容模式各有什么區別? (1)、<...
    clark124閱讀 3,529評論 1 19
  • 題目&答案 如何理解CSS的盒子模型? link和@import的區別? CSS 選擇符有哪些?哪些屬性可以繼承?...
    heyunqiang99閱讀 370評論 0 12
  • 請參看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon閱讀 7,157評論 2 19
  • 從來都是讀過的書就忘,從來也不認為讀書對自己有多少用處。除了可能用到的專業書,應用書,歷史小說都很少看。 書根據不...
    可冉閱讀 161評論 0 0