css3选择器(一)

直接开始正文。

一、属性选择器

属性选择器就是根据元素的属性及属性值来选择元素,用好属性选择器可以让你的级别上升一个层次。

1、只根据属性选择元素

适用于希望选择有某个属性的元素,只关心属性不关心属性值。。

Note:元素和方括号中间没有冒号,也不能有空格,方括号之间也不能有空格。

a、根据一个属性选择【E[Attr]】

*[title]{color:blue;}就可以给所以带title的元素设置样式。

a[href]{color:red;}只对有href的锚(a 元素)应用样式。

b、根据多个属性选择【E[Attr1][Attr2]】

a[href][title]{color: red;} 给同时由href和title属性的锚(a 元素)应用样式。

一个很实用的调试样式方法:img[alt] {border: 5px solid red;}给所有带有alt属性的图像应用样式,从而突出显示这些有效的图像。该方法可以用来诊断图像是否确实有效。

根据属性选择器匹配元素时,这些属性可以是自定义的值,举例:

随便定义一个属性haha,给它随便赋值test,然后通过div[haha]这个属性选择器就可以匹配并添加样式。

<style>
div[haha]{
    background-color: green;
}
</style>
<div haha="test">一个测试的div元素</div>

我之所以取名这么随意就是想说明,在属性选择器中,自定义的属性也是可以用的,当然这是不推荐的。

2、根据属性值选择

根据属性值选择,可进一步缩小选择范围。

a、根据一个属性值选择【E[Attr=Val]】:

b、根据多个属性值选择【E[Attr1=Val1][Attr2=Val2]】:

a[href="http://www.w3school.com.cn/"][title="W3School"] {color: red;}

以上都是完全匹配,也可以根据部分属性值选择。

c、根据属性值的词列表中某个词进行匹配【E[Attr~=Val]】

对于多个用空格隔开的属性值,则需要使用波浪号(~)进行匹配。

[title~=hello]{color:red;}  可以选中<h2 title="hello world">Hello world</h2>,但无法选中<h2 title="world">Hello world</h2>。

d、特定属性选择类型【E[Attr|=Val]】

E[Attr|=Val]选择有属性Attr且Attr的属性值是以Val或者Val-开头的元素。

*[lang|="en"]{color: red;}

可以匹配lang属性等于en或以en-开头的所有元素。

<style type="text/css">
*[lang|="en"]{color: red;}
</style>
<body>
<p lang="en">Hello!</p>
<p lang="en-us">Greetings!</p>
<p lang="en-au">G'day!</p>
<p lang="fr">Bonjour!</p>
<p lang="cy-en">Jrooana!</p>
</body>

e、使用通配符的属性选择器【E[Attr^=Val]】【E[Attr$=Val]】【E[Attr*=Val]】

css3属性选择器中的大boss,使得选择器功能分分钟提升。

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

E[att$="val"],选择器匹配元素E,且E元素定义了属性att,att的属性值以val结尾的任何字符串。

E[att*="val"],选择器匹配元素E,且元素定义了属性att,att属性值任意位置包含了"val"。

这几个通配符和jquery中的一样。

举个例子:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>选择器</title>
<style type="text/css">
a[class^=icon]{
  background: green;
  color:#fff;
}
a[href$=pdf]{
  background: orange;
  color: #fff;
}
a[title*=more]{
  background: blue;
  color: #fff;
}
</style>
</head>
<body>
<a href="xxx.pdf">我链接的是PDF文件</a>
<a href="#" class="icon">我类名是icon</a>
<a href="#" title="我的title是more">我的title是more</a>
</body>
</html>

f、属性选择器 也可以用html5中新增的data属性,但是不推荐用。

div[data-myid="123456"]{
    background-color: green;
}
<div id="xxx" name="test" data-myid="123456">div</div>

二、结构性伪类选择【:root】

:root为根选择器,匹配元素所在文档树的根元素,而在html文档中,根元素就是html,所以:root就相当于html。

下面三种写法都是等效的:

html:root {
  background:orange;
}
:root {
  background:orange;
}
html {
  background:orange;
}

不知道为什么网上都写着“建议使用:root方法”,但是不给个理由,呵呵。我对:root持保留态度,因为实在没觉得有什么用啊。

三、结构性伪类选择器【:not】

:not选择器和jquery中的:not选择器一样,选择除某个元素之外的所有元素,是个比较好用的选择器。

使用:not选择器注意事项:

Note:【:not】必须紧跟元素,不能有空格。:not后跟括号,这个括号在属性选择器里是没有的。

 举个有用的例子:给表单中除submit按钮之外的input添加红色边框。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>选择器</title>
<style type="text/css">
form{
    width: 200px;
    margin: 20px auto;
}
div{
    margin-bottom: 20px;
}
/*input[type="text"]{
    border:1px solid red;
}*/
input:not([type="submit"]){
    border:1px solid red;
}
</style>
</head>
<body>
<form>
    <div>
        <label for="name">昵称:</label>
        <input type="text" id="name" placeholder="starof">
    </div>
    <div>
        <label for="password">密码:</label>
        <input type="text" id="password" placeholder="******">
    </div>
    <div>
        <input type="submit" value="提交">
    </div>
</form>
</body>
</html>

四、结构性伪类选择器【:empty】

:empty选择器表示的就是空,用来选择没有任何内容的元素, 真的是什么内容都没有,空格都不能有。

举例:第一个<p>有文字内容,第二个<p>只有一个空格,第三个<p>为空。:empty就可以选中第三个<p>给它添加样式。

<style type="text/css">
p{
    background-color: orange;
    min-height: 30px;
}
:empty{
    background-color: red;
}
</style>
<p>我是一个段落</p>
<p> </p>
<p></p>​

在jquery中empty()和remove([expr])都用来移除元素,但是empty()是移除了指定元素中的所有子节点,仍保留其在dom中所占的位置。$("p").empty(),就会剩下<p></p>这样一个空标签,此时就可以用css3中的:empty为其添加样式。remove([expr])则是把其从dom中删除,而不会保留其所占的位置。

五、结构性伪类选择器【:target】

:target为目标选择器,用来匹配相关URL指向的元素。

:target是个很有意思的结构化伪类选择器,可以很轻松的实现点一个标题显示内容,而且还可以用#brand:target p{}这样配合选择target下的后代选择器。

举例:简洁版手风琴效果。

这样.accordion :target p{display: block;}一行代码就可以实现手风琴的效果。

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8" />
    <title>css手风琴效果</title>
    <style type="text/css">
.accordion p{
    display: none;
}
.accordion :target p{
    display: block;
}
/*和下面这种写法是等价的*/
/*#section-1:target p,#section-2:target p,#section-3:target p{
    display: block;
}; */
    </style>
</head>
<body>
    <div class="accordion">
        <div id="section-1">
            <h2>
                <a href="#section-1">section-1</a>
            </h2>
            <p>第一部分内容</p>
        </div>
        <div id="section-2">
            <h2>
                <a href="#section-2">section-2</a>
            </h2>
            <p>第二部分内容</p>
        </div>
        <div id="section-3">
            <h2>
                <a href="#section-3">section-3</a>
            </h2>
            <p>第三部分内容</p>
        </div>
    </div>
</body>
</html>

 

MDN相关资料:target

Using the :target selector

六、结构性伪类选择器【first-child】

":first-child"选择器表示的是选择父元素的第一个子元素E。

举个例子:对比后代元素子元素第一个子元素

后代元素:选择所有后代。

子元素:只选择第一代。

:first-chid:选择第一代中的第一个元素【这个站在父元素的角度理解的,如果站在元素自身的角度理解就是,如果该元素是其父元素的第一个子元素,就选中,通俗理解就是如果小明是他爸爸的大儿子就选中】。

代码:

 View Code

分析:

说明:ul.ancestor是为了意思更明确这些写的,各位正式写嗲吗只要写.ancestor就好了。

ul.ancestor li:是后代选择器,所以样式会应用到所有的后代li元素,让它们背景色变黄。

ul.ancestor >li:是子选择器,所以样式会应用到第一代li元素,让它们背景色变绿,覆盖前面样式。

ul.ancestor >li:first-child:选择第一代中的第一个li元素,让其文字颜色变为橘色。

补充内容

为什么我要写这句话:文字颜色是橙色,超链接的color被浏览器样式覆盖了,所以才不是橙色。

因为慕课网出的一道题:将无序列表的第一个项目符号设置为红色。答案是ul li:first-child{ color: red;}。导致我以为只能选中项目符号,所以就测试了一下,确实是选择第一代中第一个元素。

有兴趣的可自行测试:

<p style="color:red">文字<a href="#">a</a></p>

效果为:

原因是浏览器默认样式覆盖了继承自p的color样式。

Note:

  • :first-child对初学者来说是个容易出错的选择器,容易犯错:

看第一眼我以为我以为ul:first-child会是选中第一个li呢,但其真正的含义是,如果ul是它父元素的第一个子元素,就选中加样式。所以避免出错推荐像我这样ul.ancestor >li:first-child非常明确的写出,而不用自己去推测。

  • 是单冒号而不是双冒号。

七、结构性伪类选择器【:last-child】

:last-child和:first-chld类似,用来选择第一代中最后一个元素,是个很实用的选择器。

举例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>选择器</title>
<style type="text/css">
ul{
    list-style-type: none;
    border:1px solid grey;
    display: inline-block;
    padding: 0;
    width: 200px;
}
li{
    padding: 5px;
    border-bottom: 3px solid grey;
}
ul >li:last-child{
    border-bottom:none;
}
</style>
</head>
<body>
<ul>
  <li>Item1</li>
  <li>Item2</li>
  <li>Item3</li>
  <li>Item5</li>
  <li>Item6</li>
</ul>
</body>
</html>

补充2015/11/10 ::last-child】在IE8不兼容,所以开发环境很少用。

 

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/4563756.html有问题欢迎与我讨论,共同进步。

时间: 2024-10-03 23:52:10

css3选择器(一)的相关文章

在IE中使用高级CSS3选择器

别误会,IE是不支持CSS3高级选择器,包括最新的IE8(详见<CSS选择器的浏览器支持>),但是CSS选择器的确是很有用的,它可以大大的简化我们的工作,提高我们的代码效率,并让我们很方便的制作高可维护性的页面. 然而IE对高级CSS选择器特别是CSS3选择器的支持让我们一直不能将CSS选择器推广应用.不过,虽然我们无法左右浏览器的市场份额,却可以通过一些技术改善我们的工作.我们也可以使用其它的一些技术,让IE可以变相支持CSS3选择器. 一位来自英国的网页开发工程师Keith Clark开发

css3 选择器(三)

接css3选择器(一) 接css3 选择器(二) 这篇和前两篇内容相关性不大,主要是涉及到一些css3的状态选择器,所以标题从一开始. 一.[:enabled]选择器 一看这个属性就知道是专为表单元素提供的.在表单中输入框,密码框,复选框都有可用(:enabled)和不可用(:disabled)状态,默认情况,这些表单元素都处在可用状态.可通过选择器:enabled为这些表单元素设置样式. 举例:可用输入框设置样式. <meta charset="utf-8"> <s

《图解CSS3:核心技术与案例实战》——第2章CSS3选择器

第2章CSS3选择器W3C在CSS3的工作草案中把选择器独立出来成为一个模块.实际上,选择器是CSS知识中的重要部分之一,也是CSS的根基.利用CSS选择器能不改动HTML结构,通过添加不同的CSS规则得到不同样式的网页.

css3 选择器(二)

接css3选择器(一) 八.结构性伪类选择器[:nth-child(n)] :nth-child(n)选择器用来匹配某个父元素的一个或多个特定的子元素,和jquery中一样. 其中"n"是其参数,而且可以是整数值(1,2,3,4),也可以是表达式(2n+1,-n+5)和关键字(odd[奇数].even[偶数]),但是参数n的值起始值始终是1,而不是0.也就是说,参数n的值为0时,选择器将选择不到任何匹配的元素. Note:当":nth-child(n)"选择器中的n

css3 选择器:CSS3 选择器【2】

UI元素状态伪类选择器UI元素状态伪类选择器的共同特征是:指定的样式只有当元素处于某种状态下时才起作用,在默认状态下不起作用.选择器E:hover.E:active和E:focusE:hover选择器用来指定当鼠标指针移动到元素上时元素所使用的样式:E:active选择器用来指定元素被激活(鼠标在元素上按下还没有松开)时使用的样式:E:focus选择器用来指定元素获得光标焦点时使用的样式,主要是在文本框控件获得焦点并进行文字输入的时候使用.<!DOCTYPE html><html>

css3 选择器:CSS选择器

以前看jQuery的时候一直看不懂,为什么$()这个工厂方法能做那么多事, 里面对DOM的选择功能太强大了!今天看了<CSS入门经典>这本书,原来CSS本身就有这么多选择器,之前看jQuery的代码,一直没搞明白jQuery怎么解析里面的参数.从中总结了一个经验:基础不好不要去看那些框架,越看越糊涂.言归正传:1, 类选择器 .planet{position: absolute;top:0;left:0;bottom:15px;}用一个点开头,后面接类名本身,类名不能有空格在页面文件中,假设有

图解css3:核心技术与案例实战. 2.8 结构伪类选择器

2.8 结构伪类选择器 伪类可以将一段并不存在的HTML当作独立元素来定位,或是找到无法使用其他简单选择器就能定位到的切实存在的元素.因此CSS3给伪类选择器引入一种"结构伪类选择器".这种选择器可以根据元素在文档树中的某些特性(如相对位置)定位到它们.也就是说,通过文档树结构的相互关系来匹配特定的元素,从而减少HTML文档对ID或类名的定义,帮助你保持代码干净和整洁. 2.8.1 重温HTML的DOM树 所有的结构伪类都是基于HTML文档树的,也称做文档对象模型(DOM),下面简单回

《图解CSS3:核心技术与案例实战》——2.1节认识CSS选择器

2.1 认识CSS选择器 要使某个样式应用于特定的HTML元素,首先需要找到该元素.在CSS中,执行这一任务的表现规则称为CSS选择器.它为获取目标元素之后施加样式提供了极大的灵活性.实际上,CSS2.1已经为大家提供了很多常用的选择器,基本能够满足Web设计师常规的设计需求. 2.1.1 CSS3选择器的优势 既然CSS选择器能满足Web常规的设计需求,CSS3选择器有什么优势呢?CSS3选择器不但支持所有CSS选择器,同时新增了独有的选择器,对拥有一定CSS基础的开发人员来说,学习CSS3选

图解css3:核心技术与案例实战. 2.1 认识CSS选择器

2.1 认识CSS选择器 要使某个样式应用于特定的HTML元素,首先需要找到该元素.在CSS中,执行这一任务的表现规则称为CSS选择器.它为获取目标元素之后施加样式提供了极大的灵活性.实际上,CSS2.1已经为大家提供了很多常用的选择器,基本能够满足Web设计师常规的设计需求. 2.1.1 CSS3选择器的优势 既然CSS选择器能满足Web常规的设计需求,CSS3选择器有什么优势呢?CSS3选择器不但支持所有CSS选择器,同时新增了独有的选择器,对拥有一定CSS基础的开发人员来说,学习CSS3选