参考: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 }