【面试 · 回看】
16. CSS动画
- @keyframes规则用于创建动画
为兼容有的浏览器,需要加上前缀:
@keyframes myfirst { from {background: red;} to {background: yellow;} } @-moz-keyframes myfirst /* Firefox */ { from {background: red;} to {background: yellow;} } @-webkit-keyframes myfirst /* Safari 和 Chrome */ { from {background: red;} to {background: yellow;} } @-o-keyframes myfirst /* Opera */ { from {background: red;} to {background: yellow;} }
- 使用animation定义动画必须定义名称和时长。如果忽略时长动画会不被允许,因为默认值是0。
- CSS动画用百分比来规定变化发生的时间,或用关键词"from"和"to",等同于0%和100%。
- animation-iteration-count规定动画被播放的次数,默认是1。
animation和transition的区别:
- transition通常与hover等事件配合使用,由事件触发。而animation则是立即播放的动画。
- animation可以设定循环次数。
- translation只能设置头尾,而animation可以设置每一帧的样式和时间。transition所有样式属性都要一起变化,而animation可以设置每一帧需要单独变化的样式属性。
- animation与JS交互不紧密,transition与JS结合更强大。
17. CSS实现三角形
<style> .triangle{ width: 0; border-top: 30px solid blue; border-right: 30px solid yellow; border-bottom: 30px solid green; border-left: 30px solid red; } </style> <body> <div class="triangle"></div> </body>
这样的效果是:
只要把不需要的三个置为颜色透明即可。
=>如果需要锐角/钝角三角形,只需要设置上下宽高与左右宽高不同即可:
border-width: 100px 50px; //上下>左右 锐角三角形
18. CSS精灵图
CSS Sprites,又称为CSS精灵图、CSS雪碧图,或意译为CSS图片整合或CSS贴图定位,就是将很多张图片利用PS合称为一张背景图,再利用background-position进行背景定位的一种技术。
CSS Sprites的优点:
- 减少浏览器向服务器请求的次数,减少http请求的次数,提高了网页的加载速度。
- 整合在一张图片上后图片的字节数减少。
- 改变网页的风格只需改变一张图,便于后期的维护和修改。
使用方法:使用CSS的background-image、 background-position、background-repeat属性。
19. px rem em
- px像素,相对长度单位。像素是相对于显示器屏幕分辨率而言的。
- em,相对长度单位。相对于当前对象内文本的字体尺寸。如果当前行内文本的字体未被设置,则相对于浏览器的默认字体尺寸。
em的特点:
- em的值不是固定的;
- em会继承父级元素的字体大小(会引起逐层复合的连锁反应)。
=> 由于任何浏览器的默认字体高都是16px,所以在CSS的body选择器中声明Font-size = 62.5%,可以使得px与em之间刚好是10倍的关系。
*尤其注意计算子元素的字体大小,可能会出现em的继承问题。
- rem,CSS3新增,相对的只是HTML根元素。只修改根元素就可以成比例的调整所有的字体大小,又可以避免字体大小逐层复合的连锁反应。
20. 伪类 伪元素
CSS引入伪类和伪元素是为了格式化文档树以外的信息。
伪类和伪元素的区别:
- 伪类:操作对象是文档树中已有的元素。如:first-child,相当于给已有的元素加了一个类名class;
- 伪元素:创建了一个文档树外的元素。如:first-letter,相当于加了一个标签(创建了文档树外的元素)。
伪类使用单冒号,伪元素使用双冒号,加以区别。