参考连接:css
https://segmentfault.com/a/1190000012156828?utm_source=tag-newesthtml
这里说的很详细了,因此我就直接搬过来了,仅作笔记使用。css3
css选择器常见包括id(#id)、标签(tag)、class(.class)、属性[attr=attrval]等,还包括伪元素和伪类选择器。正确的利用伪元素和伪类可以让咱们的html结构更清晰合理,也能在必定程度上减小js对dom的操做!web
伪类包含两种:状态伪类和结构性伪类。segmentfault
状态伪类是基于元素当前状态进行选择的。在与用户的交互过程当中元素的状态是动态变化的,所以该元素会根据其状态呈现不一样的样式。当元素处于某状态时会呈现该样式,而进入另外一状态后,该样式也会失去。常见的状态伪类主要包括:浏览器
结构性伪类是css3新增选择器,利用dom树进行元素过滤,经过文档结构的互相关系来匹配元素,可以减小class和id属性的定义,使文档结构更简洁。常见的包括:安全
伪元素是对元素中的特定内容进行操做,而不是描述状态。它的操做层次比伪类更深一层,所以动态性比伪类低不少。实际上,伪元素就是选取某些元素前面或后面这种普通选择器没法完成的工做。控制的内容和元素是相同的,但它自己是基于元素的抽象,并不存在于文档结构中!常见的伪元素选择器包括:dom
有时你会发现伪类元素使用了两个冒号 (::) 而不是一个冒号 (:),这是 CSS3 规范中的一部分要求,目的是为了区分伪类和伪元素,大多数浏览器都支持这两种表示方式。单冒号(:)用于 CSS3 伪类,双冒号(::)用于 CSS3 伪元素。对于 CSS2 中已经有的伪元素,例如 :before,单冒号和双冒号的写法 ::before 做用是同样的。网站
因此,若是你的网站只须要兼容 webkit、firefox、opera 等浏览器,建议对于伪元素采用双冒号的写法,若是不得不兼容 IE 浏览器,仍是用 CSS2 的单冒号写法比较安全。firefox