CSS 属性选择器

在HTML中,可以通过元素各种各样的属性,来给元素增加很多附加信息。如通过 width 属性,可以指定元素的宽度;通过 id 属性,可以区分不同的元素,并通过Javascript来控制这些元素的内容和状态。

以往的CSS中,大量使用类选择器来定义样式。由于类选择器并不能说明什么样式服务于什么元素。因此,对于一个大型网站,CSS代码比较庞大,若要修改某个样式,就成为非常头疼的事情。

CSS的属性选择器使上述问题迎刃而解,因为它是语义化的选择器,可以根据元素是否拥有某个属性或属性的值来选择元素。

表 2‑3 属性选择器
选择器功能描述版本
E[attribute]选择拥有属性 attribute 的E元素,不考虑属性的值2
E[attribute = val]选择属性 attribute 的值等于val的E元素2
E[attribute ~= val]选择属性 attribute 的值是用空格分隔的多个单词,其中一个单词的值等于 val的E元素2
E[attribute |= val]选择属性 attribute 的值是用连字符"-"分隔的单词,并以 val 开头的E元素,主要用于 lang 属性,比如 "en"、"en-us"、"en-gb" 等2
E[attribute *= val]选择属性 attribute 的值包含 val 子字符串的E元素3
E[attribute ^= val]选择属性 attribute 的值以 val 开头的E元素,val 为完整的单词或单词的一部分3
E[attribute $= val]选择属性 attribute 的值以 val 结尾的E元素,val 为完整的单词或单词的一部分3

(1)E[attribute] 选择器

该选择器表示,选择拥有attribute属性的E元素,不管属性的值是什么。如果省略E,则表示选择任何类型的元素,只要它拥有attribute属性(下同)。

如,为所有包含 rel 属性的超链接应用样式,让其文本为绿色:

 
  1. a[rel] {
  2. color: green;
  3. }

还可以根据多个属性进行选择,只需将多个属性链接在一起即可。如,将同时带有href和 title 属性的所有超链接设置为红色:

 
  1. a[href][title] {
  2. color: red;
  3. }

(2)E[attribute = val] 选择器

该选择器表示,选择设置了属性 attribute,且属性的值为val的E元素。如,将指向首页的的所有超链接设置为红色:

 
  1. a[href = "http://www.waibo.wang/"] {
  2. color: red;
  3. }

在处理表单时,许多元素都使用相同的标签,如复选框、文本输入框、提交按钮等,都使用 input 标签,而实际上它们的功能却完全不同,其功能由 type 属性的值来决定。如果仅仅想为文本输入框添加边框,就可以使用这个选择器。如:

 
  1. input[type = "text"] {
  2. border: 1px solid #ccc;
  3. }

该选择器也支持根据多个属性进行选择,只需将多个属性-值链接在一起即可。如,将 href 属性值为 http://www.waibo.wang/,且 title 属性值为“歪脖网首页”的所有超链接加粗显示:

 
  1. a[href = "http://www.waibo.wang/"][title = "歪脖网首页"] {
  2. font-weight: bold;
  3. }

需要注意的是,该选择器的指定的属性值,必须与HTML标签中的属性值完全匹配才行,否则就会选择失败。如,在HTML中的class属性中,如果包含多个类名,类名之间用一个空格分隔:

 
  1. <p class="urgent warning"> urgent warning</p>

如果要根据 class 属性的值来选择这个元素,必须写成:

 
  1. p[class = "urgent warning"] {
  2. font-weight: bold;
  3. }

要求选择器的属性值必须与HTML标签中的属性值完全相同,urgent在前,warning在后,就连空格的个数也要完全相同,否则就会匹配失败。

(3)E[attribute ~= val] 选择器

该属性选择器表示,选择拥有属性 attribute,且属性的值是用空格分隔的列表,其中一个列表值为 val的E元素。

在HTML中,这方面最经典的例子就是 class 属性,它能接受一个或多个词作为其属性值。还是前面的示例:

 
  1. <p class="urgent warning"> urgent warning</p>

如果要选择 class 属性值中包含 warning 的元素,写成下面这个样子就可以了:

 
  1. p[class ~= "warning"] {
  2. font-weight: bold;
  3. }

其实,该选择器只要求属性中包含指定的值即可,属性的值是否是词的列表也无关紧要,因此,上述选择器也会匹配 class = "warning" 的段落。也就是说,p[class ~= "warning"] 和 p.warning 的作用是等价的。

(4)E[attribute |= val] 选择器

该属性选择器表示,选择拥有属性 attribute,且属性的值是用连字符"-"分隔的单词,并以 val 开头的E元素,主要用于 lang 属性,比如 "en"、"en-us"、"en-gb" 等等。

如,通过使用通用选择器,这个选择器选择任何带有 lang 属性且属性值以 en 开头的元素:

 
  1. *[lang |= "en"] {
  2. color: green;
  3. }

上述规则就会选择 lang属性值等于 en,或以 en- 开头的所有元素。因此,以下示例中的前两个会被选中,而后两个不会被选中:

 
  1. <h1 lang = "en">Hello!</h1>
  2. <p lang = "en-us">Greetings!</p>
  3. <h2 lang = "fr">Bonjour!</h2>
  4. <div lang = "cy-en">Jrooana!</div>

当然,该选择器可以用于任何属性和值。假如一个文档中有一系列图像,每个图像的文件名都形如 figuer-1.gif 和figuer-2.jpg,就可以使用以下选择器匹配所有这些图像:

 
  1. img[src |= "figuer"] {
  2. border: 1px solid gray;
  3. }

(5)E[attribute *= val] 选择器

该属性选择器表示,选择拥有属性 attribute,且属性的值包含 val 子字符串的E元素。

假如网站在链接类名中添加 nav 子串,来区分导航链接,主导航的类名为 mainnav,页码导航的类名为 pagenav:

 
  1. <div class = "mainnav">
  2. <a href = "#"></a>
  3. </div>
  4. <div class = "pagenav">
  5. <a href = "#" ></a>
  6. </div>

如果想去掉所有导航链接的下划线,就可以使用该选择器:

 
  1. div[class *= "nav"] a {
  2. text-decoration: none;
  3. }

(6)E[attribute ^= val] 选择器

该属性选择器表示,选择拥有属性 attribute,且属性的值以 val 开头的E元素,val 为完整的单词或单词的一部分。

如,为了突显指向网站外部的链接,就可以使用 E[ attribute ^= val ] 属性选择器,来寻找所有以 http: 开头的链接,在右侧添加外部链接的小图标。

 
  1. a[href ^= "http://"] {
  2. padding-right: 20px;
  3. background: url(img/external.gif) no-repeat right top;
  4. }

(7)E[attribute $= val] 选择器

该属性选择器表示,选择拥有属性 attribute,且属性的值以 val 结尾的E元素,val 为完整的单词或单词的一部分。

对于一些下载站,用户可以下载各种不同类型的文件,而文件类型是根据超链接中 href 属性值的最后几个字符来确定:

 
  1. <a href = "a.doc">DOC文件</a>
  2. <a href = "a.xls">XLS文件</a>
  3. <a href = "a.ppt">PPT文件</a>
  4. <a href = "a.pdf">PDF文件</a>
  5. <a href = "a.rar">RAR文件</a>
  6. <a href = "a.wmv">WMV文件</a>

这种情况,就可以使用该属性选择器,检测文件的扩展名,并为不同类型的文件添加不同的图标,以提高用户体验:

 
  1. a {
  2. display: block;
  3. padding: 4px 24px;
  4. font-size: 14px;
  5. color: #000;
  6. }
  7. a[href $= "doc"],
  8. a[href $= "docx"] {
  9. background: url('img/doc.gif') no-repeat left center;
  10. }
  11. a[href $= "xls"],
  12. a[href $= "xlsx"] {
  13. background: url('img/xls.gif') no-repeat left center;
  14. }
  15. a[href $= "ppt"] {
  16. background: url('img/ppt.gif') no-repeat left center;
  17. }
  18. a[href $= "pdf"] {
  19. background: url('img/pdf.gif') no-repeat left center;
  20. }
  21. a[href $= "zip"],
  22. a[href $= "rar"] {
  23. background: url('img/rar.gif') no-repeat left center;
  24. }
  25. a[href $= "wmv"] {
  26. background: url('img/wmv.gif') no-repeat left center;
  27. }

运行结果如图 2‑7 所示:

CSS属性选择器图2-7 CSS属性选择器

关于作者

歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、《Bootstrap2用户指南》、《Bootstrap3实用教程》,并全部在 GitHub 上开源。

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值