CSS每每是咱們前端開發者不太看重的一環,並且如今重構崗也愈來愈少,不像前幾年前端領域還分爲js崗和重構崗。注重基礎的面試官,在CSS基礎回答不上時,印象分就會有所降低。下面整理一些常問到的CSS的知識點,歡迎指正,整理不易,點個贊再走吧。。。
首先咱們以一道面試題爲考察點css
三列布局,其中一列寬度自適應,其餘兩列固定
首先咱們來看最終實現效果,對於下方几種實現方式,能夠先本身試試,再往下看html
<style> * { margin: 0; padding: 0; } div { min-height: 100px; } h2, h4 { text-align: center; } .left, .right { width: 300px; background: rgba(0, 0, 0, 0.3); } .center { background: rgba(0, 0, 0, 0.2); } .layout { margin: 10px 0; } </style>
<div class="layout float"> <style media="screen"> .float .left { float: left; } .float .right { float: right; } </style> <section class="float-layout"> <div class="left"></div> <div class="right"></div> <div class="center"> <h4>浮動三欄佈局</h4> 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; </div> </section> </div>
<div class="layout absolute"> <style> .absolute div { position: absolute; } .absolute .left { left: 0; width: 300px; } .absolute .center { left: 300px; right: 300px; } .absolute .right { right: 0; width: 300px; } </style> <section class="absolute-layout"> <div class="left"></div> <div class="center"> <h4>絕對定位解決方案</h4> 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; </div> <div class="right"></div> </section> </div>
<div class="layout flexbox"> <style> .flexbox .flex-layout { display: flex; } .flexbox .left { width: 300px; } .flexbox .center { flex: 1; } .flexbox .right { width: 300px; } </style> <section class="flex-layout"> <div class="left"></div> <div class="center"> <h4>flexbox解決方案</h4> 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; </div> <div class="right"></div> </section> </div>
<div class="layout table"> <style> .layout.table .table-layout { width: 100%; height: 100px; display: table; } .layout.table .table-layout>div { display: table-cell; } </style> <section class="table-layout"> <div class="left"></div> <div class="center"> <h4>表格佈局解決方案</h4> 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; </div> <div class="right"></div> </section> </div>
<div class="layout grid"> <style> .grid .grid-layout { width: 100%; display: grid; grid-template-rows: 100px; grid-template-columns: 300px auto 300px; } .grid .left { width: 300px; } </style> <section class="grid-layout"> <div class="left"></div> <div class="center"> <h4>網格佈局解決方案</h4> 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; 這是三欄佈局的浮動解決方案; </div> <div class="right"></div> </section> </div>
還有許多類似的問題,好比水平垂直居中、品字佈局的實現方式等,都是同一個原理,主要的考察點:前端
一、爲何要進行reset?git
二、對於float、postion的理解github
三、對於flex伸縮盒的掌握web
四、對於不經常使用的table佈局有沒有掌握面試
五、對於兼容性很差的grid新型佈局是有所瞭解,我以爲這是一個加分項瀏覽器
各個瀏覽器的默認展現樣式不一致,CSS reset的做用是讓各個瀏覽器的CSS樣式有一個統一的基準。
例如暴力的dom
* { margin: 0; padding: 0; }
後來咱們也出現了reset.css
和Normalize.css比較官方的解決方式,固然我比較推薦Normalize.css。ide
通常咱們會有兩種解決方法:
BFC是Web頁面的可視化CSS渲染的一部分,是塊盒子的佈局過程發生的區域,也是浮動元素與其餘元素交互的區域,也就是說它是一個 獨立渲染的區域,它規定了內部的Block-level Box去如何進行佈局,與外部無關。好比 清除浮動,外邊距塌陷等都是能夠經過BFC來進行解決。
關於定義MDN說的比較清楚了。 BFC連接
下列方式會建立塊格式化上下文:
column-span 爲 all 的元素始終會建立一個新的BFC,即便該元素沒有包裹在一個多列容器中(標準變動,Chrome bug)。
position的面試點應該就是在absolute的理解吧,position的定位是相對於最近的非static定位祖先元素的便宜,強調一下是非static,而不是隻有relative
該關鍵字指定元素使用正常的佈局行爲,即元素在文檔常規流中當前的佈局位置。此時 top, right, bottom, left 和 z-index 屬性無效。
該關鍵字下,元素先放置在未添加定位時的位置,再在不改變頁面佈局的前提下調整元素位置(所以會在此元素未添加定位時所在位置留下空白)。position:relative 對 table-*-group, table-row, table-column, table-cell, table-caption 元素無效。
元素會被移出正常文檔流,並不爲元素預留空間,經過指定元素相對於最近的非 static 定位祖先元素的偏移,來肯定元素位置。絕對定位的元素能夠設置外邊距(margins),且不會與其餘邊距合併。
元素會被移出正常文檔流,並不爲元素預留空間,而是經過指定元素相對於屏幕視口(viewport)的位置來指定元素位置。元素的位置在屏幕滾動時不會改變。打印時,元素會出如今的每頁的固定位置。fixed 屬性會建立新的層疊上下文。當元素祖先的 transform, perspective 或 filter 屬性非 none 時,容器由視口改成該祖先。
元素根據正常文檔流進行定位,而後相對它的最近滾動祖先(nearest scrolling ancestor)和 containing block (最近塊級祖先 nearest block-level ancestor),包括table-related元素,基於top, right, bottom, 和 left的值進行偏移。偏移值不會影響任何其餘元素的位置。
盒子模型包括content、padding、border、margin這幾塊內容
<div class="box"> <style> .box div { width: 200px; margin: 10px auto; } .content-box { box-sizing: content-box; width: 100%; border: solid rgba(0, 0, 0, 0.2) 10px; padding: 5px; } .border-box { box-sizing: border-box; width: 100%; border: solid rgba(0, 0, 0, 0.3) 10px; padding: 5px; } </style> <h4>盒子模型</h4> <div class="border-box"></div> <div class="content-box"></div> </div>
伸縮盒可讓響應式設計,表單的對齊,固定佈局等能夠很簡單的實現
用法:
{ display:flex; flex-direction: row | row-reverse | column | column-reverse; 排列方向 flex-wrap: nowrap | wrap | wrap-reverse; align-content: flex-start | flex-end | center | space-between | space-around | stretch; 多根軸線的對齊方式。若是項目只有一根軸線,該屬性不起做用 align-item: center; 垂直方向對齊方式 justify-content: center; 水平方向對齊方式 }
想深刻了解的同窗能夠看看
flex佈局對性能的影響主要體如今哪方面?
以上是我我的理解這個題目的考察點,下面還有部分常問的CSS知識
瀏覽器經過優先級來判斷哪些屬性值與一個元素最爲相關,從而在該元素上應用這些屬性值。優先級是基於不一樣種類選擇器組成的匹配規則。優先級就是分配給指定的 CSS 聲明的一個權重,它由 匹配的選擇器中的 每一種選擇器類型的 數值 決定。
優先級規則
<div style="color: red"> <div style="color: blue"> <div class="son"></div> // blue </div> </div>
<div style="color: red"> <div class="son" style="color: blue"></div> // blue </div>
<div class="content-class" id="content-id" style="color: black"></div> // black #content-id { color: red; } .content-class { color: blue; } div { color: grey; }
<div id="con-id"> <span class="con-span"></span> // red </div> // CSS #con-id span { color: red; // 值爲100 + 1 } div .con-span { color: blue; // 值爲 1 + 10 }
由於習慣於父子dom的編寫會換行,並且換行符會佔用必定的寬度,因此致使元素之間會有間隙
解決:
<div class="box parent"> <div class="children"></div><!-- --><div class="children"></div><!-- --><div class="children"></div> </div>
三角形的原理是由於border並非和咱們盒模型同樣是一個矩形,當設置一個div的border都是5px時,每條border都是一個梯形。
<div class="border"></div> <style> .border{ width:100px; height: 100px; border: 40px solid; border-color: #ff0000 #0000ff #ff0000 #0000ff; margin: 0 auto; } </style>
當咱們把height和width都設置爲0
最終咱們就能夠設置一些border-color: transparent;達到這個效果
<div class="border"></div> <style> .border{ width: 0; height: 0; border: 40px solid transparent; border-bottom: 80px solid #ff0000; } </style>
最後,但願你們都可以找到本身滿意的工做。關注個人公衆號:前端30K,後續會持續更新。。。