CSS伪元素和伪类
1. 常见的伪元素和伪类
- 常见的伪类 :focus :hover :active :visited :link :first-child :lang
- 常见的伪元素(伪对象) :before :after :first-letter :first-line ::placeholder
2. 伪类
CSS3中对伪类的定义:
- 伪类存在的意义是为了通过选择器找到那些不存在与DOM树中的信息以及不能被常规CSS选择器获取到的信息
- 伪类由一个冒号:开头,冒号后面是伪类的名称和包含在圆括号中的可选参数
- 任何常规选择器可以再任何位置使用伪类。伪类语法不区别大小写。一些伪类的作用会互斥,另外一些伪类可以同时被同一个元素使用。并且,为了满足用户在操作DOM时产生的DOM结构改变,伪类也可以是动态的
CSS3 新添加了一些伪类
3. 伪元素
CSS3中对伪元素的定义:
- 伪元素在DOM树中创建了一些抽象元素,这些抽象元素是不存在于文档语言里的(可以理解为html源码)。比如:document接口不提供访问元素内容的第一个字或者第一行的机制,而伪元素可以使开发者可以提取到这些信息。并且,一些伪元素可以使开发者获取到不存在于源文档中的内容(比如常见的::before, ::after)
- 伪元素的由两个冒号::开头,然后是伪元素的名称
- 使用两个冒号::是为了区别伪类和伪元素(CSS2中并没有区别)。考虑到兼容性,CSS2中已存的伪元素仍然可以使用一个冒号:的语法,但是CSS3中新增的伪元素必须使用两个冒号::
- 一个选择器只能使用一个伪元素,并且伪元素必须处于选择器语句的最后
4. 伪类和伪元素的区别
伪类和伪元素是CSS1和CSS2提出的概念,前两个阶段区分模糊,在CSS3中对这两个概念做了相对较清晰地概念,并且在语法上也很明显的将二者区别开。
- 伪类本质上是为了弥补常规CSS选择器的不足,以便获取到更多信息;
- 伪元素本质上是创建了一个有内容的虚拟容器;
- CSS3中伪类和伪元素的语法不同;
- 可以同时使用多个伪类,而只能同时使用一个伪元素 , 并且只能出现在末尾
- 伪类与类优先级相同
- 伪元素与标签优先级相同
为什么0.1 + 0.2 !== 0.3,如何保证这种判等是对的
因为JavaScript 使用IEEE754 (64位双精度)二进制浮点数计算标准;JavaScript中Number 都是按照这个标准存储的。
IEEE754 (32位双精度)存储数字时,从左到右,1位符号,8位指数位(阶码),23位有效数位(尾数)
IEEE754 (64位双精度)是 1位符号,11位指数位(阶码),52位有效数位(尾数)
0.1 转为二进制数时 是0.00011(0011),0011 部分无限循环,所以0.1的二进制在存储时,最后就会涉及到进位;0.2在转换时也是无限循环的。
所以 0.1 + 0.2 = 0.30000000000000004 而不是 0.3
解决方法:
- 不考虑精度
- 使用ES6提供的Number.EPSILON (机器精度)
列举字符串转数字的方法
1 | Number构造函数 |