图解css3:核心技术与案例实战. 2.11 属性选择器

简介:

2.11 属性选择器

在HTML中,通过各种各样的属性可以给元素增加很多附加的信息。例如,通过id属性可以将不同DIV元素进行区分。CSS2中引入了一些属性选择器,这些选择器可基于元素的属性来匹配元素,而CSS3在CSS2的基础上扩展了这些属性选择器,支持基于模式匹配来定位元素。

2.11.1 属性选择器语法

CSS3在CSS2的基础上新增了3个属性选择器,可以帮助大家对标签进行过滤,也能非常容易帮助大家在众多标签中定位自己需要的HTML标签,下面通过表2-18详细介绍CSS3的属性选择器的使用。

表2-18 CSS3属性选择器列表

选择器     功能描述

选择器     功能描述

E[attr]      选择匹配具有属性attr的E元素。其中E可以省略,表示选择定义了attr属性的任意类型元素

E[attr=val]        选择匹配具有属性attr的E元素,并且attr的属性值为val(其中val区分大小写),同样E元素省略时表示选择定义了attr属性值为val的任意类型元素

E[attr|=val]      选择匹配E元素,且E元素定义了属性attr,attr属性值是一个具有val或者以val-开始的属性值。常用于lang属性(例如lang=”en-us”)。例如p[lang=en]将匹配定义为英语的任何段落,无论是英式英语还是美式英语

E[attr~=val]      选择匹配E元素,且E元素定义了属性attr,attr属性值具有多个空格分隔的值,其中一个值等于val。例如,.info[title~=more]将匹配元素具有类名info,而且这个元素设置了一个属性title,同时title属性值以包含了“more”的任何元素,例如<a class=”info” title=”click here for more information”>click me</a>

E[attr*=val]      选择匹配元素E,且E元素定义了属性attr,其属性值任意位置包含了“val”。换句话说,字符串val与属性值中的任意位置相匹配

E[attr^=val]      选择匹配元素E,且E元素定义了属性attr,其属性值以val开头的任何字符串

E[attr$=val]      选择匹配元素E,且E元素定义了属性attr,其属性值以val结尾的任何字符串。刚好与E[attr^=val]相反

 

CSS3遵循了惯用的编码规则,通配符的使用提高了样式表的书写效率,也使CSS3的属性选择器更符合编码习惯。CSS3中常见的通配符如表2-19所示。

表2-19 CSS3中常见的通配符

通配符     功能描述         示例

^       匹配起始符     span[class^=span]

表示选择以类名以“span”开头的所有span元素

$       匹配终止符     a[href$=pdf]

表示选择以”pdf”结尾的href属性的所有a元素

*       匹配任意字符         a[title*=site]

匹配a元素,而且a元素的title属性值中任意位置有“site”字符的任何字符串

 

2.11.2 浏览器兼容性

属性选择器在浏览器兼容性方面表现还是可以的,如表2-20所示。

表2-20 属性选择器的浏览器兼容性

选择器                                         

E[attr]      7 +√        √     √     √     √

E[attr=val]        7 +√        √     √     √     √

E[attr|=val]      7 +√        √     √     √     √

E[attr~=val]      7 +√        √     √     √     √

E[attr*=val]      7 +√        √     √     √     √

E[attr^=val]      7 +√        √     √     √     √

E[attr$=val]      7 +√        √     √     √     √

 

2.11.3 属性选择器的使用方法详解

前面了解了CSS3属性选择器的使用规则以及浏览器兼容性,接下来通过一些简单的示例来体验一下CSS3属性选择器的强大功能。

先创建一个简单的HTML结构,并付上一些默认样式。

<!DOCTYPE HTML>

<html lang="en-US">

<head>

  <meta charset="UTF-8">

  <title>CSS3属性选择器的使用</title>

  <style type="text/css">

    .demo {

      width: 300px;

  border: 1px solid #ccc;

  padding: 10px; 

      overflow: hidden;

      margin: 20px auto;

  }

  .demo a {

  float: left;

  display: block;

  height: 50px;

  width: 50px;

  border-radius: 10px;

  text-align: center;

  background: #aac;

  color: blue;

     font: bold 20px/50px Arial;

  margin-right: 5px;

  text-decoration: none;

     margin: 5px;

  }

  </style>

</head>

<body>

  <div class="demo">

  <a href="http://www.w3cplus.com" target="_blank"

           class="links item first" id="first" title="w3cplus">1</a>

  <a href="" class="links active item" title="test

           website" target="_blank" lang="zh">2</a>

  <a href="sites/file/test.html" class="links item"

           title="this is a link" lang="zh-cn">3</a>

  <a href="sites/file/test.png" class="links item"

           target="_balnk" lang="zh-tw">4</a>

  <a href="sites/file/image.jpg" class="links item"

           title="zh-cn">5</a>

  <a href="mailto:w3cplus@hotmail" class="links item"

           title="website link" lang="zh">6</a>

  <a href="/a.pdf" class="links item"

           title="open the website" lang="cn">7</a>

  <a href="/abc.pdf" class="links item"

           title="close the website" lang="en-zh">8</a>

  <a href="abcdef.doc" class="links item"

           title="http://www.sina.com">9</a>

  <a href="abd.doc" class="linksitem last" id="last">10</a>

  </div>

</body>

</html>

基本样式的效果如图2-53所示。

接下来使用CSS3属性选择器进行个性化修改。

1.E[attr]属性选择器

这个属性选择器是最简单的一种。用来选择有某个属性的元素,而不论这个属性值是什么。例如,选择所有带有ID属性的a元素,并且改变了匹配元素的背景色,如下所示。

a[id]{background-color:yellow;}

对照上面的HTML结构不难发现,只有第一个和最后一个链接元素a使用了ID属性,所以上面的代码选择了两个a元素,效果如图2-54所示。

 

图2-54 E[attr]属性选择器的效果

也可以使用多属性进行选择元素。例如:

a[id][title]{background-color: red;}

上面代码表示元素a只要同时定义了id和title属性,都将匹配,其背景将变成红色,效果如图2-55所示。

2.E[attr=val]属性选择器

E[attr=val]是指元素E设置了属性attr,并且其属性值为“val”,而E[attr]属性选择器只选择了属性为attr的元素E,并没有明确的设置attr的属性值,这也是这两种选择器的最大区别之处。在众多元素之中缩小选择范围,能进一步精确选择自己需要的元素。在前面的实例基础上进行一下简单的修改。

 

图2-55 E[attr1][attr2]多属性选择器使用效果

a[id=first]{background-color:red;}

此处在id属性的基础上指定了相应的val值为first,选中所有a元素中设置“id=first”的链接,并将其背景色设置为red,效果如图2-56所示。

 

图2-56 E[attr=val]属性选择器的使用效果

意     E[attr=val]选择器中,属性和属性值必须完全匹配,特别对于属性值是词列表的形式,例如,

<a href="#" class="links  item"></a>

其中a[class="links"]{...}是找不到匹配元素,只有a[class="links  item"]{...}才匹配。

 

3.E[attr|=val]属性选择器

首先提醒大家,attr后面的是一条竖线,而不是字母。E[attr|=val]为特定属性选择器,选择attr属性值等于“val”,或以“val-”开头的所有字符串属性的元素,一起来看看这个属性选择器的使用。

a[lang|=zh]{background-color: yellow;}

上面的代码会选中所有设置了lang属性,并且其属性值是以“zh”或“zh-”开头的所有a链接元素,其效果如图2-57所示。

 

图2-57 E[attr|=val]选择器的使用效果

例如Web页面中有很多图片,图片文件名都以“figure-1”、“figure-2”的方式来命名,使用E[attr|=val]选择器来选择这些图片就很方便了。

4.E[attr?~=val]属性选择器

如果想根据元素属性值中的词列表的某个词来匹配需要的元素,就可以使用这个属性选择器。这种属性选择器匹配的元素某个属性具有一个或多个属性值,多个属性值之间使用空格隔开,当元素属性值中有一个属性值与选择器的val相匹配,就可以选中该元素。而前面介绍的E[attr=val]属性选择器是属性值要完全匹配才会被选中,它们两者区别就是“~”符号。一起来看一个简单的示例。

a[title~=website]{background-color:yellow;}

效果如图2-58所示。

图2-58很清楚地告诉我们,只要a链接元素设置有title属性,并且这个title属性的值包含了website属性值,都将匹配。如果不小心将“~”省略,结果将找不到匹配的元素。

5.E[attr*=val]属性选择器

这个属性选择器使用了通配符,将匹配元素设置了attr属性,而且attr属性值中包含“val”字符串。也就是说,只要所选择的属性中有val字符串,都将被匹配。例如:

 

图2-58 E[attr~=val]选择器的使用效果

a[class*=links]{background-color:yellow;}

这个示例将选中所有的a元素,因为示例中的a元素“class”的属性值都含有字符串“links”,不管是“links”还是“linksitem”,其效果如图2-59所示。

 

图2-59 E[attr*=val]属性选择器的使用效果

E[attr*=val]与E[attr~=val]很容易混淆,它们的区别是:E[attr*=val]匹配的是元素属性值中只要包含“val”字符串就可以,而E[attr~=val]匹配的是元素属性值中要包含“val”,并不仅是字符串。例如,a[title~=links]属性值中的links是一个单词,而a[title*=links]中的links不一定是一个单词,就如上面的示例中,可以是“linksitem”。换句话来说,“<a  title='linksitem'></a>”元素只有a[title*=links]匹配,但是“<a  title='links  item'></a>”元素,a[title~=links]和a[title*=links]都匹配。

6.E[attr^=val]属性选择器

指选择attr属性值以“val”开头的所有元素。换句话说,选择的属性,其对应的属性值是以“val”开始的,一起来看一个简单的示例。

a[href^=http]{background-color:yellow;}

这个选择器表示选择href属性,以“http”开头的所有a元素,即只要a元素中的href属性值是以“http”开头的元素都会选中,如图2-60所示。

 

图2-60 E[attr^=val]属性选择器的使用效果

前面有一个属性选择器E[attr|=val]匹配的是以“val”或者“val-”开头的元素,而E[attr^=val]匹配的是以“val”开头的元素,这两个选择器有时使用的效果非常相似,仅仅区别在于E[attr|val]还匹配以“val-”开头的元素,其中“-”是不可或缺的。

7.E[attr$=val]属性选择器

这个属性选择器刚好与E[attr^=val]相反,表示选择attr属性值以“val”结尾的所有元素。运用在一些特殊的链接加背景图很方便,例如给PDF、PNG、DOC等不同文件加上不同的ICON图标就可以使用这个属性。下面通过给“png”值结尾的a元素改变背景色。

a[href$=png]{background-color:yellow;}

运用上面代码的效果如图2-61所示。

通过一些简单的示例,向大家详细介绍了CSS3属性选择器的使用方法,以及效果,接下来通过实战来学习CSS3属性选择器在Web中是如何发挥作用。

 

图2-61 E[attr$=val]属性选择器的使用效果

2.11.4 实战体验:创建个性化链接样式

对于Web设计人员来说碰到的链接有很多种,例如文字、图片等。

例如新浪爱问共享资料库,下载文档列表的链接前面会显示一个文档类型图标(如图2-62所示),这样的设计给用户带来一种超好的体验。另外,有些Web网站对于本地链接和外部链接也会使用不同的图标来区分(如图2-63所示)。CSS3的属性选择器此时就显得特别的有用,通过它们可以很容易实现这些效果。

                  

         图2-62 显示类型图标的文档下载链接     图2-63 Web页面的外部链接

本节示例的效果如图2-64所示,当然此效果只是部分CSS3属性选择器的运用。

图2-62和图2-63的链接效果,使用属性选择器匹配a元素中的href属性值。如果a元素的href属性值是以“http://”开头,将这些链接划分到外部链接一类中,给其定义一个样式,对于下载文档的类型可以根据其文件的扩展名来设置不同的图标。例如,链接为Word文件时,后面显示Word文档图标;链接为PDF文件时,后面显示PDF文档图标。

根据这一思路,可以编写一个简化的示例代码,如下所示。

 

图2-64 创建个性化链接

<!DOCTYPE HTML>

<html lang="en-US">

<head>

  <meta charset="UTF-8">

  <title>创建个性化链接样式</title>

  <style type="text/css">

    a {

      font-size: 16px;

      text-decoration: none;

      padding-right: 20px;

      display: inline-block;

      margin-bottom: 5px;

      background: url(a.png) no-repeat 100% -327px;

    }

    /*匹配所有外部链接*/

    a[href^="http://"]{

      background-position: 100% -409px;

    }

    /*匹配首页*/

    a[href="home"]{

      background-position: 100% -382px;

    }

    /*匹配.doc文档*/

    a[href$="doc"]{

      background-position: 100% 0;

    }

    /*匹配.ppt文档*/

    a[href$="ppt"]{

      background-position:100% -50px;

    }

    /*匹配.xls文档*/

    a[href$="xls"]{

      background-position:100% -75px;

    }

    /*匹配.html文档*/

    a[href$="html"]{

      background-position:100% -100px;

    }

    /*匹配.pdf文档*/

    a[href$="pdf"]{

      background-position:100% -125px;

    }

    /*匹配.jpg,.gif,.png图片*/

    a[href$="jpg"],

    a[href$="gif"],

    a[href$="png"]{

      background-position:100% -172px;

    }

    /*匹配.swf文档*/

    a[href$="swf"]{

      background-position:100% -193px;

    }

    /*匹配.zip,.rar压缩文档*/

    a[href$="zip"],

    a[href$="rar"]{

      background-position:100% -217px;

    }

    /*匹配.mp3文档*/

    a[href$="mp3"]{

      background-position:100% -245px;

    }

    /*匹配.exe安装文件*/

    a[href$="exe"]{

      background-position:100% -273px;

    }

    /*匹配.txt文本文档*/

    a[href$="txt"]{

      background-position:100% -298px;

    }

    /*匹配邮箱地址*/

    a[href^="mailto"]{

      background-position:100% -350px;

    }

  </style>

</head>

<body>

  <ul>

    <li><a href="http://www.w3cplus.com">w3cplus.com</a></li>

    <li><a href="home">home</a></li>

    <li><a href="a.doc">Word文档</a></li>

    <li><a href="b.ppt">Powerpoint文档</a></li>

    <li><a href="c.xls">Excel文档</a></li>

    <li><a href="d.html">HTML文档</a></li>

    <li><a href="e.pdf">PDF文档</a></li>

    <li><a href="f.jpg">JPG图片文档</a></li>

    <li><a href="f.gif">GIF图片文档</a></li>

    <li><a href="f.png">PNG图片文档</a></li>

    <li><a href="g.swf">Flash文档</a></li>

    <li><a href="h.zip">ZIP压缩文档</a></li>

    <li><a href="h.rar">RAR压缩文档</a></li>

    <li><a href="j.mp3">MP3文档</a></li>

    <li><a href="h.exe">EXE安装文件</a></li>

    <li><a href="a.txt">TXT文本文档</a></li>

    <li><a href="mailto:w3cplus@hotmial.com">w3cplus@hotmail.com</a></li>

    <li><a href="#">本地链接</a></li>

  </ul>

</body>

</html>

由于IE 6浏览器不被支持CSS3属性选择器,为了实现图2-64效果,早期的Web设计师们会借助于JavaScript脚本,或者通过古老的办法给不同文档类型元素添加不同的类名,例如给外部链接添加类名“external”,给Word文档添加类名“word”。

意     随着IE 6逐渐接近死亡,可以大胆使用CSS3属性选择器来制作,或者你是一个完美的追求者,可以考虑优雅降级方案来处理。

相关文章
|
2月前
|
前端开发
CSS实现充电效果案例
CSS实现充电效果案例
65 1
|
24天前
|
前端开发 开发者 UED
CSS不同技术的探讨
【10月更文挑战第11天】 CSS不同技术的探讨
|
24天前
|
存储 前端开发 JavaScript
CSS:现代Web设计的不同技术
【10月更文挑战第11天】 CSS:现代Web设计的不同技术
|
24天前
|
前端开发 开发者 UED
CSS技术的演变与应用
【10月更文挑战第11天】CSS技术的演变与应用
|
1月前
|
前端开发 JavaScript
JavaScript动态渲染页面爬取——CSS位置偏移反爬案例分析与爬取实战
JavaScript动态渲染页面爬取——CSS位置偏移反爬案例分析与爬取实战
|
3月前
|
前端开发 开发者 容器
探索现代Web开发中的CSS Grid布局技术
【8月更文挑战第29天】在数字时代的浪潮中,网页设计不断进化以适应日新月异的用户需求。CSS Grid布局技术作为一项革新性的前端工具,为设计师和开发者提供了前所未有的布局能力。本文旨在通过深入浅出的方式介绍CSS Grid的核心概念、基本用法以及在实际项目中的应用,帮助读者快速掌握这一强大的网页布局工具。
52 3
|
3月前
|
编解码 前端开发 开发者
【前端设计达人必备】揭秘CSS尺寸单位的魔力:从基础到实战,打造灵动响应式网页!
【8月更文挑战第26天】本文深入探讨了CSS中常用的尺寸单位,包括像素(px)、百分比(%)、视窗单位(vw/vh/vmin/vmax)、可伸缩相对单位(em/rem)以及Flexbox和Grid中的fr单位。通过具体案例展示了每种单位的特点及其适用场景。像素适用于固定尺寸元素;百分比和em/rem利于构建响应式布局;视窗单位适合全屏设计;fr单位则能有效管理复杂网格布局的空间分配。掌握这些单位有助于开发者设计出更加灵活、高质量的网页布局。
57 4
|
3月前
|
存储 前端开发 安全
【海贼王航海日志:前端技术探索】CSS你了解多少?(三)
【海贼王航海日志:前端技术探索】CSS你了解多少?(三)
32 2
|
3月前
|
前端开发 Java UED
JSF 面向组件开发究竟藏着何种奥秘?带你探寻可复用 UI 组件设计的神秘之路
【8月更文挑战第31天】在现代软件开发中,高效与可维护性至关重要。JavaServer Faces(JSF)框架通过其面向组件的开发模式,提供了构建复杂用户界面的强大工具,特别适用于设计可复用的 UI 组件。通过合理设计组件的功能与外观,可以显著提高开发效率并降低维护成本。本文以一个具体的 `MessageComponent` 示例展示了如何创建可复用的 JSF 组件,并介绍了如何在 JSF 页面中使用这些组件。结合其他技术如 PrimeFaces 和 Bootstrap,可以进一步丰富组件库,提升用户体验。
54 0
|
3月前
|
前端开发 JavaScript 开发者
【前端革新力】React与CSS-in-JS完美邂逅:从styled-components到emotion,全面解析样式管理新趋势的实战应用与优势剖析!
【8月更文挑战第31天】CSS-in-JS 作为一种新兴的样式管理方式,近年来在前端社区受到广泛关注。它将样式嵌入 JavaScript,实现了样式与逻辑的高度耦合,提升了开发效率并解决了全局样式污染等问题。本文通过具体代码示例,探讨 CSS-in-JS 在 React 开发中的应用,并分享实践心得。首先介绍了 CSS-in-JS 的基本概念,然后详细展示了如何使用 styled-components 和 emotion 这两个流行库创建样式化组件。
139 0

热门文章

最新文章