awesome-frontend-interviews是一個用於整理、收集前端基礎知識的開源項目,放在Github上,內容會一直更新,歡迎提交好的內容共同進步,歡迎star。css
同權重下,優先級就近原則(離被設置元素越近優先級別越高),載入樣式以最後載入的爲準:html
不一樣權重下,優先級關係:前端
!important
> 內聯樣式 > ID 選擇器 > 類選擇器 = 屬性選擇器 = 僞類選擇器 > 標籤選擇器 = 僞元素選擇器 > 通配符選擇器參考:CSS 樣式優先級css3
Flash Of Unstyled Content:用戶定義樣式表加載以前瀏覽器使用默認樣式顯示文檔,用戶樣式加載渲染以後再重新顯示文檔,形成頁面閃爍。解決方法:把樣式表放到文檔的headgit
<h1>
和<p>
元素的margin-bottom
的值分別應該是多少px?(假設<h1>
和<p>
是同級元素)html { font-size: 100%; } h1 { font-size: 2em; margin-bottom: 1em; } p { font-size: 1em; margin-bottom: 1em; }
<h1>
的margin-bottom
是32px,<p>
的margin-bottom
是16pxgithub
這種現象的發生在於1em
等同於它當前的font-size
。由於<h1>
中的font-size
被設置爲了2em
,其用在<h1>
內的em來計算的屬性,就爲1em = 32px
。(對於大多數的用戶(和瀏覽器),font-size
的值爲100%
,就會默認爲16px
,除非用戶經過瀏覽器設置來改變font-size
的默認值)
引伸部分:web
面試題中,通常em會跟rem、px、vh、vw等單位進行比較使用場景和區別,px、em和rem應該是被比較的比較多的,簡單介紹一下:面試
推薦閱讀:express
題外:segmentfault
上次在掘金上看到有人在爭關於em的話題,一方說em是相對於父元素的大小,這也是網上被引用的比較多的解釋,另外一方說em是相對於本身自己的字體大小。爭議的根源是font-size
具備繼承性,它的對錯請本身分辨,不過有爭議是好事,爭議讓咱們更深刻的瞭解問題。(既然說到繼承了,面試官會不會說:假設咱們認爲em是繼承的,請用ES6面向對象簡單還原一下咱們的問題,而後又是其餘一堆東西...)
clear:both
overflow
(hidden和auto能夠清除浮動,visible不行)clearfix方法一:
利用:after和:before來在元素內部插入兩個元素塊,其實現原理相似於clear:both方法(只使用clearfix:after時在跨瀏覽器兼容問題會存在一個垂直邊距疊加的bug)
.clearfix:before, .clearfix:after { content: "."; display: block; height: 0; visibility: hidden; } .clearfix:after {clear: both;} .clearfix {zoom: 1;} /* IE < 8 */
clearfix方法二:
Nicolsa在《Better float containment in IE using CSS expressions》中介紹的方法
.clearfix:before, .clearfix:after { content:""; display:table; } .clearfix:after { clear:both; overflow:hidden; } .clearfix { zoom:1; /* IE < 8 */ }
參考:Clear Float
BFC 即 Block Formatting Contexts (塊級格式化上下文),是 W3C CSS2.1 規範中的一個概念。它是頁面中的一塊渲染區域,而且有一套渲染規則,它決定了其子元素將如何定位,以及和其餘元素的關係和相互做用。
只要元素知足下面任一條件便可觸發 BFC 特性:
BFC做用:
推薦閱讀:
重繪(Repaint)不必定會引發迴流(Reflow重排),但迴流必將引發重繪(Repaint)
致使Reflow(迴流)的狀況:
減小回流、重繪其實就是須要減小對render tree的操做(合併屢次多DOM和樣式的修改),並減小對一些style信息的請求,儘可能利用好瀏覽器的優化策略。具體方法有:
參考:頁面重繪和迴流以及優化
rgba()和opacity都能實現透明效果,但最大的不一樣是opacity做用於元素,以及元素內的全部內容的透明度,而rgba()只做用於元素的顏色或其背景色。(設置rgba透明的元素的子元素不會繼承透明效果!)
多數顯示器默認頻率是60Hz,即1秒刷新60次,因此理論上最小間隔爲1/60*1000ms = 16.7ms
推薦閱讀:
因爲不一樣的瀏覽器和瀏覽器各版本對CSS的支持及解析結果不同,以及CSS優先級對瀏覽器展示效果的影響,咱們能夠據此針對不一樣的瀏覽器情景來應用不一樣的CSS。
CSS Hack大體有3種表現形式,CSS屬性前綴法、選擇器前綴法以及IE條件註釋法(即HTML頭部引用if IE)Hack,實際項目中CSS Hack大部分是針對IE瀏覽器不一樣版本之間的表現差別而引入的。
通常佈局相關的整理:
佈局相關的文章: