CSS3 - 选择器

一、 前言


CSS3的理念就是模块化,其中最重要的模块有:

  • 选择器
  • 框模型
  • 背景和边框
  • 文本效果
  • 2D/3D转换
  • 动画
  • 多列布局
  • 用户界面

今天,我们要讨论的就是其中的选择器这个模块。

用好选择器可以大幅度提升WEB开发人员在书写和修改样式表时的工作效率。大多数情况下我们要对样式表进行修改时都会使用class或者id属性,而这些属性是没有任何语义的,仅仅只是用来为css样式服务,属于多余属性。当这些没有语义的属性充斥在整个html结构中时,是非常混乱的,对于我们自身修改也很不方便。

在CSS3中,提倡使用选择器将样式和元素直接绑定起来,这样在样式表中什么样式与什么元素相匹配变的一目了然,修改起来也方便。

不仅如此,通过选择器还可以实现各种复杂的指定,同时也能大量减少样式表代码的书写量,最终书写出来的样式表也会变得简洁明了。

下面,让我们进入CSS3选择器的世界。

二、 选择器分类


CSS3的选择器总体上可以分为4类:

  • 属性选择器
  • 结构伪类选择器
  • UI伪类选择器
  • 其他选择器

每一类选择器所承担的主要职责都是不一样的,在正文中我会对它们做详细的介绍。

三、 正文


1、 属性选择器
  • markdown表格中 ‘ | ’ 用 ‘ / ’ 代替,否则会引起表格混乱,如果大家有解决办法,请留言告知
  • 正确的举例用 ' Y ' 表示
  • 错误的举例用 ‘ N ’ 表示

注意,当省略E选择符的时候,代表匹配任意元素。

属性选择器 作用 举例
E[foo] 选择匹配E的元素,且该元素定义了foo属性 <div foo="xx">
E[foo="bar"] 选择匹配E的元素,且该元素定义了foo属性值为"bar" <div foo="bar"> Y
<div foo="ba"> N
E[foo~="bar"] 选择匹配E的元素,且该元素定义了foo属性,foo属性值是一个以空格符分隔的列表 <div foo="bar"> Y
<div foo="me bar"> Y
<div foo="bar-me"> N
E[foo/="en"] 选择匹配E的元素,且该元素定义了foo属性,foo属性值是一个以连字符( - )分隔的列表 <div foo="en"> Y
<div foo="en-cn"> Y
<div foo="en cn"> N
E[foo^="bar"] 选择匹配E的元素,且该元素定义了foo属性,foo属性值必须以"bar"作为开头 <div foo="bar"> Y
<div foo="barq"> Y
<div foo="bar q"> Y
<div foo="bar-q"> Y
<div foo="qbar"> N
E[foo$="jpg"] 选择匹配E的元素,且该元素定义了foo属性,foo属性值必须以"jpg"作为结尾 <div foo="jpg"> Y
<div foo="ajpg"> Y
<div foo="a-jpg"> Y
<div foo="jpe"> N
E[foo*="bar"] 选择匹配E的元素,且该元素定义了foo属性,foo属性值在任意位置包含"bar"字符串即可 <div foo="bar"> Y
<div foo="aabar"> Y
<div foo="abarz"> Y
<div foo="aa-bar"> Y
<div foo="barqq"> Y
<div foo="bar aa"> Y
<div foo="zbaar"> N
2、 结构伪类选择器
结构伪类选择器 作用 举例
E:root 匹配E所在文档的根元素,在html文档中,根元素就是html元素 <html></html>
E:nth-child(n) 选择所有在其父元素中第n个位置的匹配E的子元素,
参数n可以是数字(1、2、 3)、关键字(odd、even)和公式(2n、2n+3),
公式n的起始值是0,数字n的起始值是1
…………
E:nth-last-child(n) 选择所有在其父元素中倒数第n个位置的匹配E的子元素,
该选择器与E:nth-child(n) 是计算相反顺序额选择器,语法和用法相同
…………
E:nth-of-type(n) 选择所有在其父元素中同类型第n个位置的匹配E的子元素,
注意,所有匹配E的子元素被分离出来单独排序,非E子元素不参与排序,
参数n可以是数字(1、2、 3)、关键字(odd、even)和公式(2n、2n+3),
公式n的起始值是0,数字n的起始值是1
…………
E:nth-last-of-type(n) 选择所有在其父元素中同类型倒数第n个位置的匹配E的子元素,
该选择器与E:nth-of-type(n)是计算顺序相反的选择器,语法和用法相同
…………
E:first-child 选择位于其父元素中第一个位置,且匹配E的子元素 …………
E:last-child 选择位于其父元素中最后一个位置,且匹配E的子元素 …………
E:only-child 选择其父元素只包含一个子元素,且该子元素匹配E …………
E:first-of-type 选择在其父元素中匹配E的第一个同类型的子元素 …………
E:last-of-type 选择在其父元素中匹配E的最后一个同类型的子元素 …………
E:only-of-type 选择在其父元素只包含一个同类型子元素,且该子元素匹配E …………
E:first-letter 选择每个E元素的首字母 …………
E:first-line 选择每个E元素的第一行 …………
E:before 在每个E元素的内容之前插入内容 …………
E:after 在每个E元素内容之后插入内容 …………
E:empty 选择匹配E的元素,且该元素不包含节点,
注意,文本也属于节点
…………
3、 UI伪类选择器
UI伪类选择器 作用 举例
a:link 选择所有未被访问的a链接 …………
a:visited 选择所有已经被访问的a链接 …………
a:active 选择活动链接(即鼠标点下去没有松开的时候) …………
a:hover 选择鼠标指针位于其上的a链接 …………
E:focus 选择获得焦点的E元素(所有用户可以输入的元素都有焦点) …………
E:enabled 选择可以输入的E元素(所有用户可以输入的元素都有enable属性) …………
E:disabled 选择禁止输入的E元素(所有用户可以输入的元素都有disabled属性) …………
input:checked 选择radio和checkbox中被选中的input元素(只有rhttp://www.w3school.com.cn/cssref/css_selectors.aspadio和checkbox有该选择器) ……………
4、 其他伪类选择器
其他伪类选择器 作用 举例
E:not(s) 否定伪类选择器类型,选择匹配E的所有元素,并且过滤掉匹配s选择符的所有元素 …………
E::selection 匹配用户选择的E元素 …………
E:target 目标伪类选择器类型,选择匹配E的所有元素,且匹配元素被相关URL指向 …………

四、 结束语

本文对CSS3选择器模块进行了分类梳理,因为比较简单,所以并没有写例子来验证,大家只要多多练习,一定可以熟练的掌握好这些选择器,提升我们的编写CSS样式的水平,真正做到结构、样式以及行为三者分离。

最后,附上W3C选择器模块详细介绍,大家可以去上面多多练习。
http://www.w3school.com.cn/cssref/css_selectors.asp

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,680评论 1 92
  • 第2章 CSS3选择器 W3C在CSS3的工作草案中把选择器独立出来成为一个模块。实际上,选择器是CSS只是中的重...
    白小虫阅读 2,823评论 0 2
  • 基础 属性选择器(CSS2) [attr=val] attr代表属性值,val代表变量值 属性选择器的扩展(CSS...
    秋枫残红阅读 2,563评论 0 1
  • 第6章 征服CSS3选择器 属性选择器 在HTML中,通过各种各样的属性可以给元素增加很多附加的信息。例如,通过i...
    阿振_sc阅读 3,142评论 0 1
  • 想有一颗透彻的心, 静夜候着花开, 犹如一树的海棠花, 我看见满脸的笑, 是星空下的光芒印迹, 只能许下一个愿望,...
    男爵蔡阅读 3,658评论 0 0