CSS基础

清除浮动的原理

清除浮动使用clear: left/right/both。业界常用的.clearfix也是这么做的,只不过是把该样式写进了父元素的:after伪元素中,并加了opacity: 0; display: block; height: 0; visibile: hidden;等使伪元素不可见。

不清楚浮动但包围浮动元素的方法有 为浮动元素的父元素添加overflow: hidden、或将父元素也浮动起来等使父元素形成**BFC(Block Formatting Context)**的方式,但这些方式在应用上没有.clearfix这种方式理想。

简述position属性各个值的区别

fixed:类似absolute,但是是相对浏览器窗口而非网页页面进行定位。

absolute:相对最近的position值非normal的外层元素进行定位。

relative:相对自身在文档流中的原始位置进行定位。

static:position默认值,即元素本身在文档流中的默认位置(忽略top、bottom、left、right和z-index声明)。

inherit:继承父元素position属性的值。

边距塌陷及其修复

竖直方向上相接触的margin-top/bottom会塌陷,若二者均为正/负值,取其绝对值大者;若二者中一负一正,取二者之和。

高性能动画

CSS动画会比JS动画的性能更好,JS动画的优势主要在于

  • 更具定制性(毕竟JS比CSS更可编程);
  • 更易实现对低端浏览器的兼容。

当然,大部分业务中,主要还是使用CSS动画的,对低端浏览器进行降级就可以了(保证页面可读可操作就可以了,增加老旧设备的性能负担不是好事情)。

几个注意点:

  • 利用transform: translate3d(x, y, z);可借助3D变形开启GPU加速(这会消耗更多内存与功耗,确有性能问题时再考虑);
  • 若动画开始时有闪烁,可尝试:backface-visibility: hidden; perspective: 1000;
  • 尽可能少用box-shadows和gradients这两页面性能杀手;
  • CSS动画属性可能会触发整个页面的重排(reflow/relayout)、重绘(repaint)和重组(recomposite)。其中paint通常是最花费性能的,进可能避免使用触发paint的CSS动画属性。所以要尽可能通过修改translate代替修改top/left/bottom/right来实现动画效果,可以减少页面重绘(repaint),前者只触发页面的重组,而后者会额外触发页面的重排和重绘;
  • 尽量让动画元素脱离文档流(document flow)中,以减少重排(reflow);
  • 操作DOM的js语句能连着写尽量连着写,这样可借助浏览器的优化策略,将可触发重排的操作放于一个队列中,然后一次性进行一次重排;如果操作DOM的语句中间被其他诸如赋值语句之类的间断了,页面可能就会发生多次重排了。