W3C 标准盒模型:width = content
IE 怪异盒模型:width = content + padding-left + padding-right + border-left + border-right
因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对 CSS 初始化往往会出现浏览器之间的页面显示差异。
最简单的初始化方法就是: * { padding: 0; margin: 0; } (不建议)
同权重下,优先级就近原则(离被设置元素越近优先级别越高),载入样式以最后载入的为准:
不同权重下,优先级关系:
Flash Of Unstyled Content:用户定义样式表加载之前浏览器使用默认样式显示文档,用户样式加载渲染之后再从新显示文档,造成页面闪烁。解决方法:把样式表放到文档的head
考虑下面的代码,<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是 16px
这种现象的发生在于1em等同于它当前的font-size。因为<h1>中的font-size被设置为了2em,其用在<h1>内的em来计算的属性,就为1em = 32px。(对于大多数的用户(和浏览器),font-size的值为100%,就会默认为16px,除非用户通过浏览器设置来改变font-size的默认值)
引申部分:
面试题中,一般 em 会跟 rem、px、vh、vw 等单位进行比较使用场景和区别,px、em 和 rem 应该是被比较的比较多的,简单介绍一下:
题外:
上次在掘金上看到有人在争关于 em 的话题,一方说em是相对于父元素的大小,这也是网上被引用的比较多的解释,另一方说em是相对于自己本身的字体大小。争议的根源是font-size具有继承性,它的对错请自己分辨,不过有争议是好事,争议让我们更深入的了解问题。(既然说到继承了,面试官会不会说:假设我们认为em是继承的,请用ES6面向对象简单还原一下我们的问题,然后又是其他一堆东西...)
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( nicolasgallagher 商业网/better-float-containment-in-ie/)》中介绍的方法
.clearfix:before,
.clearfix:after {
content:"";
display:table;
}
.clearfix:after {
clear:both;
overflow:hidden;
}
.clearfix {
zoom:1; /* IE < 8 */
}
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浏览器不同版本之间的表现差异而引入的。
一般布局相关的整理:

