给父级div定义height
属性
最后一个浮动元素之后添加一个空的div标签,并添加clear:both
样式
包含浮动元素的父级标签添加overflow:hidden
或者overflow:auto
使用 :after 伪元素。由于IE6-7不支持 :after,使用 zoom:1 触发 hasLayout**
对于选择器的优先级
注意事项
两者都是外部引用CSS的方式,它们的区别如下:
link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事物;@import属于CSS范畴,只能加载CSS
link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载
link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持
link支持使用Javascript控制DOM去改变样式;而@import不支持
transiton是过度属性,强调过度,它的实现需要触发一个事件(比如鼠标移动上去,焦点,点击等)才执行动画。它类似于flash的补间动画,设置一个开始关键帧 一个结束关键帧
Animation 是动画属性 它的实现不需要触发时间,设定很高时间之后可以自己执行, 且可以循环一个动画。它也类似于flash的补间动画,但是它可以设置多个关键帧(用@keyframe定义)完成动画。
这两个属性都是让元素隐藏,不可见。两者区别如下
在渲染树种
display:none 会让元素完全从渲染树中小时,渲染时不会占据任何空间
Visibility:hidden 不会让元素从渲染树中消失,渲染的元素还会占据相应的空间,只是内容不可见
是否是继承属性
display:none 是非继承属性,子孙加点会随着父节点从渲染树消失,通过修改子孙节点的属性也无法显示
Visibility: hidden 是继承属性,子孙节点消失是由于继承了hidden 通过设置visibility: visible 可以让子孙节点显示
修改常规文档流中元素的display通过会造成文档的重排,但是修改visibility属性只会造成本元素的重绘;
如果使用读屏器,设置为display:none 的内容不会被读取,设置为visibility:hidden的内容会被读取。
伪元素:在内容元素的前后插入额外的元素或者样式,但是这些元素实际上并不在文档中生成,它们只在外部显示可见,但是不会在文档的源代码中找到它们,因此,称为“伪”元素。例如
伪类:将特殊的效果添加到特定选择器上。它是已有元素上添加类别的,不会产生新的元素
window.requestAnimationFrame告诉浏览器--你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行。
该方法属于宏任务;使用cancelAnimationFrame来取消执行动画
优势:
CPU节能:
函数节流
减少DOM操作
Box-sizing: content-box标准盒模型
box-sizing:border-box IE盒模型(怪异盒模型)
trannslate是transform属性的一个值。改变transform或opacity不会触发浏览器重新布局(reflow)或重绘,只会触发复合。而改变绝对定会触发重新布局,进而触发重绘和复合。transform使浏览器为元素创建一个GPU图层,但改变绝对定位会使用CPU。因此translate更高效,可以缩短平滑动画的绘制时间。而translate改变位置时,元素依然会占据其原始空间,绝对定位就不会发生这种情况。
浏览器会把inline内联元素键的空白字符(空格、换行、Tab)渲染成一个空格。为了美观,通常是一个li放在一行,这导致li换行后产生换行字符,它变成一个空格,占用了一个字符的宽度。
1 为li设置float:left 不足:有些容器不能设置浮动
2 将所有li写在同一行 不足 代码不美观
3 将ul内的字符尺寸直接设置为0 即font-size 0 不足:ul中的其他字符尺寸也被设置为0
4消除 ul的字符间隔letter-spacing:-8px 不足:这也设置了 li内的字符间隔,因此需要将li内的字符间隔设置为默认letter-spacing:normal
新增各种CSS选择器(:not(.input)): 所有从class不是input的节点
圆角 border-radius
多列布局 multi-column layout
阴影和反射 Shadow reflect
文字特性 text-shadow
线性渐变 gradient
旋转 transform
增加了旋转 缩放 定位 倾斜 动画 多背景