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浏览器不一样版本之间的表现差别而引入的。
通常布局相关的整理:
布局相关的文章: