參考:https://github.com/zwwill/blog/issues/2css
參考:https://www.jianshu.com/p/ebb86a086a87 html
當渲染樹中的一部分(或所有)由於元素的規模尺寸,佈局,隱藏等改變而發生改變時,瀏覽器會使渲染樹中受到影響的部分失效,並從新構造這部分渲染樹,這就是重排。完成重排後,瀏覽器會從新繪製受影響的部分到屏幕中,該過程被稱爲重繪。git
重排一定會引起重繪,但重繪不必定會引起重排。github
參考:https://www.cnblogs.com/zichi/p/4720000.html、http://www.javashuo.com/article/p-hiifunrc-kp.htmlweb
參考:https://blog.csdn.net/qinlulucsdn/article/details/80664183、https://www.cnblogs.com/simba-lkj/p/6139066.html編程
!important > 行內樣式 > ID選擇器 > 類 = 僞類 = 屬性選擇器 > 標籤 = 僞元素 > 通配符 > 繼承瀏覽器
爲何CSS是從右到左解析的,參考:http://www.cnblogs.com/zhaodongyu/p/3341080.htmlsass
塊格式化上下文(Block Formatting Context,簡稱BFC),能夠理解爲塊級元素中的塊級子元素的佈局規則。只有塊級子元素參與。性能優化
屬於同一個BFC內的塊級元素的佈局符合 BFC 佈局規則,BFC 元素內的塊級子元素也能夠是一個 BFC,該子元素仍是會符合BFC父元素的佈局規則,但該子元素裏面的子元素即子子元素就和外面的BFC的子元素不屬於同一個BFC了。less
下面的第一個P元素和第二個P元素不屬於同一個 BFC 內:
<body> <p>Haha</p> <div class="wrap"> <p>Hehe</p> </div> </body>
.wrap { overflow: hidden; }
利用BFC
佈局規則第四條:BFC
的區域不會與float box
重疊。能夠實現自適應兩欄佈局
根據BFC
佈局規則第六條:計算BFC
的高度時,浮動元素也參與計算
根據BFC佈局規則第二條:Box
垂直方向的距離由margin決定。屬於同一個BFC
的兩個相鄰Box
的margin會發生重疊。經過使兩個塊級元素在不一樣的 BFC 內能夠解決margin 重疊的問題。
詳情參考:https://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html
參考:https://blog.csdn.net/jlj_cs/article/details/44204863
高消耗屬性在繪製前須要瀏覽器進行大量計算,好比:box-shadows、border-radius、transparency、transforms、CSS filters(性能殺手)
當發生重排的時候,瀏覽器須要從新計算佈局位置與大小,常見的重排元素:width、height、padding、margin、display、border-width、position、top、left、right、bottom、
Float在渲染時計算量比較大,儘可能減小使用。
CSS選擇器的匹配是從右向左進行的,因此有些看似很高效的選擇器實際對性能消耗很高,好比:
#header>a {font-size: bold} 子選擇器,瀏覽器必須遍歷頁面中全部的 a 元素而且肯定其父元素的 id 是否爲 header 。 #header a {font-size: bold} 後代選擇器開銷更大,在遍歷頁面中全部 a 元素後還需向其上級遍歷直到根節點。
因此應該合理使用選擇器:
常見的能夠繼承的屬性好比:color,字體font系列,visibility,文本系列text-indent、text-align等等。
不可繼承的好比:position,display,float,background等
使用@import引入CSS會影響瀏覽器對樣式表的並行下載。使用@import引用的CSS文件只有在引用它的那個css文件被下載、解析以後,瀏覽器纔會知道還有另一個css須要下載,這時纔去下載,而後下載後開始解析、構建render tree等一系列操做。這就致使瀏覽器沒法並行下載所需的樣式文件。
參考:http://baijiahao.baidu.com/s?id=1603253323416106525&wfr=spider&for=pc
@nice-blue: #5B83AD; #header { color: @light-blue; }
.bordered { border-top: dotted 1px black; border-bottom: solid 2px black; } #menu a { color: #111; .bordered; }
.border-radius (@radius) { border-radius: @radius; -moz-border-radius: @radius; -webkit-border-radius: @radius; } #header { .border-radius(4px); }
#header { color: black; .navigation { font-size: 12px; } .logo { width: 300px; &:hover { text-decoration: none } } }
任何數字、顏色或者變量均可以參與運算
@base: 5%; @filler: @base * 2; @other: @base + @filler; color: #888 / 4; background-color: @base-color + #111; height: 100% / 2 + @filler;
將一些變量或者混合模塊打包封裝,更好的組織CSS和屬性集的重複使用
#bundle { .button () { display: block; border: 1px solid black; } .tab { ... } } #header a { #bundle > .button; }
LESS 中的做用域跟其餘編程語言很是相似,首先會從本地查找變量或者混合模塊,若是沒找到的話會去父級做用域中查找,直到找到爲止.
@var: red; #page { @var: white; #header { color: @var; // white } } #footer { color: @var; // red }