伪类与伪元素的出现是为了描述一些现有CSS无法描述的东西,比如“段落的第一行”、“文章首字母”
伪类:用于操作一些已经在文档树中存在的元素
伪元素:用于创建一些不在文档树中的元素
常见的伪类:
(1)表示状态:
:link 选择未访问的链接,
:visited 选择已访问的链接,
:hover 选择鼠标指针移入的链接,
:active 被激活的链接,即按下单击鼠标左键后的链接,
:focus 选择获取焦点的输入字段
前四个是链接状态的伪类,在设置的时候必须按照上面的顺序来设置,记忆技巧是:
L(:link)OV(:visited)E H(:hover)A(:active)TE ——爱恨法则
(2)结构化伪类:(理解:first-child以及:first-of-type的区别就能很好的理解其他结构化伪类)
:not(selector) 用于选择所有selector之外的元素
:first-child 用于匹配所有或指定父元素的第一个规定类型子元素,要注意,匹配成功的条件必须是第一个子元素,以及是规定类型,否则匹配失败
:last-child 略
:first-of-type 匹配body或指定父元素的所有规定类型元素中出现的第一个元素
:last-of-type 略
:nth-child(num) :nth-child(1)跟:first-child的作用是一致的。括号内还可以引入公式或是关键字,比如odd,even以及an+b等类似的公式
:nth-last-child(num) 和:nth-child(num)作用类似,但是数字是倒数的
:nth-of-type :nth-of-type(1)跟:first-of-type的作用是一致的。括号内还可以引入公式或是关键字,比如odd,even以及an+b等类似的公式
:only-of-type 当元素是其父元素特定类型的子元素中唯一一个时,:only-child匹配该元素;
:only-child 当元素是其父元素中唯一一个子元素时,:only-child匹配该元素;
:target 当URL带有锚名称,指向文档内某个具体的元素时,:target匹配该元素;
(3)表单相关伪类:
:checked 匹配被选中的input元素,这个input元素包括radio和checkbox
:default 匹配默认选中的元素
:disabled 匹配禁用的表单元素
:empty 匹配没有子元素的元素。如果元素中含有文本节点、html元素或者一个空格,匹配失败
:enabled 匹配没有禁用属性的表单元素
:indeterminate 匹配某组未被选中的单选框或复选框
:valid 匹配条件验证正确的表单元素
:invalid 略
::optional 匹配是具有optional属性的表单元素。当表单元素没有设置为required时,即为optional属性;
:required 匹配设置了required属性的表单元素;
:read-write 匹配处于编辑状态的元素。input,textarea和设置了contenteditable的HTML元素获取焦点时即处于编辑状态;
:lang 匹配设置了特定语言的元素,设置特定语言可以通过为了HTML元素设置lang=””属性,设置meta元素的charset=””属性,或者是在http头部上设置语言属性;
常见的伪元素:
:before 在元素前加入一个新元素,新元素内容由content属性决定,可以是纯文本,也可以用content:url()方式引入图片,所有在该选择器中的规则都是用来描述这个新元素的
:after 略
:first-letter 选择每个
元素的第一个字母
:first-line 选择每个
元素的第一行
伪类与伪元素在W3C中的定义其实意思是一样的,一个是给选择器添加效果,一个是将效果添加给选择器,换言之,其实他们就是为了让选择器有了更强大的描述能力。