css选择器的1.12 结构性伪类选择器

html-css016

css选择器的1.12 结构性伪类选择器,第1张

HTML CODE:1.<div class=box>2. <span>First span</span>3. <p class=ft>First p</p>4. <div>First div<strong class=ft>Strong text</strong></div>5. <p class=ft>Second p</p>6. <div class=ft>Second div <span>Second span</span><span>Third span</span></div>7.</div>

结构性伪类选择器的冒号前边可以跟一个其他选择器做为限定;带括号的选择器,里面一定要有参数;匹配子元素,同时也会匹配孙子元素,因为子元素是孙子元素的父元素;

下面的 !lte8是指IE8一下浏览器不支持,包括IE8也不支持

:first-of-type,选择相对父元素里同类型子元素中的第一个,!lte8.box :first-of-type {color: #f00}//匹配2.3.4以及4里面的strong和6里面的第一个span,因为这个span是6里的第一个span子元素.box .ft:first-of-type {color: #ff0}//匹配3和4里面的strong,因为3是box里面的第一个p且class=”ft”,而4里只有一个strong且class=”ft”,而5和6虽然class=”ft”但是他们相对于box的同类型中不是第一个出现的;

:last-of-type,选择相对父元素里同类型子元素中的最后一个,!lte8.box :last-of-type {color: #f00}//匹配2.5.6以及4里的strong和6里的最后一个span

:only-of-type,选择相对父元素里同类型子元素中只有一个的元素,!lte8.box :only-of-type {color: #f00}//匹配2以及4里的strong,类为box里同类型元素只有一个的只有span.box .ft:only-of-type {color: #f00} //只匹配4里的strong:only-child,选择的元素相对于其父元素是唯一的子元素,!lte8.box :only-child {color: #f00}//只匹配4里的strong

:nth-child(n),选择其父元素的第n个子元素或多个子元素,索引从1开始,当n用于表达式时索引从0开始!lte8.box :nth-child(3) {color: #f00}//匹配第三个子元素即这里的4.box :nth-child(odd) {color: #f00} 等价于 .box :nth-child(2n + 1) {color: #f00}//匹配奇数即这里的2.4.6以及4里的strong和6里的第一个span.box :nth-child(even) {color: #f00} 等价于 .box :nth-child(2n + 2) {color: #f00}和.box :nth-child(2n)//匹配偶数即这里的3.5以及6里的第二个span.box :nth-child(n + 1) {color: #f00}//匹配 n + 1开始的所有子元素即.box里所有的子元素以及子孙元素,因为这里n是从1开始的即:n = 0 ---->n + 1 = 0 + 1 = 1,即这里的2n = 1 ---->n + 1 = 1 + 1 = 2,即这里的3... ...n = 4 ---->n + 1 = 4 + 1 = 5,即这里的6

:nth-last-child(n),跟:nth-child(n)使用类似,只是索引是从最后开始往前数,!lte8.box :nth-last-child(3) {color: #f00}//匹配倒数第三个子元素即这里的4

:nth-of-type(n),选择父元素的第n个或多个同类型的子元素,!lte8.box :nth-of-type(2) {color: #f00}//匹配5和6以及6里面的第二个span

:nth-last-of-child(n),同上,只是从最后开始往前数,!lte8.box :nth-last-of-child(2) {color: #f00}//匹配3和4以及6里面的第一个span:first-child,选择父元素里的第一个子元素,!ie6.box :first-child {color: #f00}//匹配2和4里的strong以及6里的第一个span

:last-child,选择父元素里的最后一个子元素,!lte8.box :last-child {color: #f00}//匹配6和6里的最后一个span以及4里的strong

:root,选择文档的根元素,在HTML中就是指<html>标签,!lte8:empty,选择没有任何内容的元素,那怕是有一个空格也不行,!lte8table td:empty {background-color: #ffc}//匹配表格里没有内容的td:target,选择当前活动的元素,指锚点点击后跳转到的那一个元素,!lte8:not(selector),选择排除selector以外的其他所有元素,!lte8.box *:not(div) {background-color: #ffc}//选择box里除div以外的所有后代元素,如果div里有其他非div元素,也会选择上,如上的HTML CODE就会选择上div里面的span和strong

结构性伪类——选择器,用途其实就是字面意思,它的作用就是让你可以在css中有更多的办法来选择你需要的节点。比如拿not来说,当想对某个结构元素使用样式,但想排除这个结构元素下的子结构元素,就可以用not样式,比如我有一次,需要选中一个div里面的除了最后一个子元素以外的所有子元素,#div:not(':last-child'),这样就能很方便的实现我想要的选择了。

所以css3的结构伪类目的就是让你能更轻松,准确的选择到你想要的元素,你理解它的目的后就能理解它的作用了。

伪类选择器分为结构性、子元素、 UI、动态和其它伪类选择器

备注:为了更好的区分伪类和伪元素,书写上CSS做了区分。例如,伪类 :first-child;伪元素

在下面的示例中:

div >p:only-child{

color:red//不变红

}

div >p:only-of-type{

color:red//变红

}

<div>

<p>test1</p>

<span>test2</span>

</div>

ul >li:nth-child(2){

color:red //选择该元素所有子元素的第二个子元素

}

ul >li:nth-last-child(2){

color:red //选择该元素所有子元素的倒数第二个子元素

}

ul >li:nth-of-type(2){

color:red //选择该元素所有该类型子元素的第二个子元素

}

ul >li:nth-last-of-type(2){

color:red //选择该元素所有该类型子元素的倒数第二个子元素

}

:target{

color:red //定位到锚点,选择此元素

}

//锚点的定位:

首先在HTML元素中定义一个ID属性值,例如<p id="test">asd</p>

然后在浏览器地址栏,在URL最后加上#test,便可以定位到该锚点了。

锚点的使用:

可以用来将一篇很长的文章分段,

eg.<a href="#02">跳转到</a>

<p id="02">……</p>

其实锚点只需name就可以可,加id是为了让它兼容性更好

所谓UI选择器:就是指定的样式只有当元素处于某种状态下时,才起作用,在默认状态下不起作用!

浏览器兼容性:

E:hover 支持firefox、safari、Opera、ie8、chrome------------

E:active 支持firefox、safari、Opera、chrome 不支持ie8

E:focus 支持firefox、safari、Opera、ie8、chrome-------------

E:enabled 支持firefox、safari、Opera、chrome不支持ie8

E:disabled支持firefox、safari、Opera、chrome不支持ie8

E:read-only 支持firefox、Opera 不支持ie8、safari、chrome

E:read-write 支持firefox、Opera 不支持ie8、safari、chrome

E:checked 支持firefox、safari、Opera、chrome不支持ie8

E::selection 支持firefox、safari、Opera、chrome 不支持ie8

E:default 只支持firefox ------------

E:indeterminate只支持chrome ------------

E:invalid 支持firefox、safari、Opera、chrome 不支持ie8

E:valid 支持firefox、safari、Opera、chrome 不支持ie8

E:required支持firefox、safari、Opera、chrome 不支持ie8

E:optional 支持firefox、safari、Opera、chrome 不支持ie8

E:in-range支持firefox、safari、Opera、chrome 不支持ie8

E:out-of-rang支持firefox、safari、Opera、chrome 不支持ie8

下面就其使用做详细的说明

1、选择器E:hover、E:active和E:focus

1)、E:hover选择器被用来指定当鼠标指针移动到元素上时元素所使用的样式

使用方法:

<元素>:hover{

CSS样式

}

我们可以在“<元素>”中添加元素的type属性。

例:

input[type="text"]:hover{

CSS样式

}

2)、E:active选择器被用来指定元素被激活时使用的样式

3)、E:focus选择器被用来指定元素获得光标聚焦点使用的样式,主要是在文本框控件获得聚焦点并进行文字输入时使用。

例如:

[html] view plain copy

<!DOCTYPE html>

<html>

<head lang="en">

<meta charset="UTF-8">

<title>选择器E:hover、E:active和E:focus</title>

<style>

input[type="text"]:hover{

background: green

}

input[type="text"]:focus{

background: #ff6600

color: #fff

}

input[type="text"]:active{

background: blue

}

input[type="password"]:hover{

background: red

}

</style>

</head>

<body>

<h1>选择器E:hover、E:active和E:focus</h1>

<form>

姓名:<input type="text" placeholder="请输入姓名">

<br/>

<br/>

密码:<input type="password" placeholder="请输入密码">

</form>

</body>

</html>

2、E:enabled伪类选择器与E:disabled伪类选择器

1)、E:enabled选择器被用来指定当元素处于可用状态时的样式。

2)、E:disabled选择器被用来指定当元素处于不可用状态时的样式。

例如:

[html] view plain copy

<!DOCTYPE html>

<html>

<head lang="en">

<meta charset="UTF-8">

<title>E:enabled伪类选择器与E:disabled伪类选择器</title>

<style>

input[type="text"]:enabled{

background: green

color: #ffffff

}

input[type="text"]:disabled{

background: #727272

}

</style>

</head>

<body>

<h1>E:enabled伪类选择器与E:disabled伪类选择器</h1>

<form>

姓名:<input type="text" placeholder="请输入姓名" disabled>

<br/>

<br/>

学校:<input type="text" placeholder="请输入学校">

</form>

</body>

</html>

3、E:read-only伪类选择器与E:read-write伪类选择器

1)、E:read-only选择器被用来指定当元素处于只读状态时的样式。

2)、E:read-write选择器被用来指定当元素处于非只读状态时的样式。

[html] view plain copy

<!DOCTYPE html>

<html>

<head lang="en">

<meta charset="UTF-8">

<title>read-only伪类选择器与E:read-write伪类选择器</title>

<style>

input[type="text"]:read-only{

background: #000

color: green

}

input[type="text"]:read-write{

color: #ff6600

}

</style>

</head>

<body>

<h1>read-only伪类选择器与E:read-write伪类选择器</h1>

<form>

姓名:<input type="text" placeholder="请输入姓名" value="winson" readonly>

<br/>

<br/>

学校:<input type="text" placeholder="请输入学校">

</form>

</body>

</html>

4、伪类选择器E:checked、E:default和indeterminate

1)、E:cehcked伪类选择器用来指定当表单中的radio单选框或者是checkbox复选框处于选取状态时的样式。

2)、E:default选择器用来指定当页面打开时默认处于选取状态的单选框或复选框的控件的样式。

3)、E:indeterminate选择器用来指定当页面打开时,一组单选框中没有任何一个单选框被设定为选中状态时,整组单选框的样式。

[html] view plain copy

<!DOCTYPE html>

<html>

<head lang="en">

<meta charset="UTF-8">

<title>checked伪类选择器</title>

<style>

input[type="checkbox"]:checked{

outline: 2px solid green

}

</style>

</head>

<body>

<h1>checked伪类选择器</h1>

<form>

房屋状态:

<input type="checkbox">水

<input type="checkbox">电

<input type="checkbox">天然气

<input type="checkbox">宽带

</form>

</body>

</html>

默认的选择项

[html] view plain copy

<!DOCTYPE html>

<html>

<head lang="en">

<meta charset="UTF-8">

<title>default伪类选择器</title>

<style>

input[type="checkbox"]:default{

outline: 2px solid green

}

</style>

</head>

<body>

<h1>default伪类选择器</h1>

<form>

房屋状态:

<input type="checkbox" checked>水

<input type="checkbox">电

<input type="checkbox">天然气

<input type="checkbox">宽带

</form>

</body>

</html>

[html] view plain copy

<h1 style="color: rgb(0, 0, 0)font-family: Simsunfont-style: normalfont-variant: normalletter-spacing: normalline-height: normalorphans: autotext-align: starttext-indent: 0pxtext-transform: nonewhite-space: normalwidows: 1word-spacing: 0px-webkit-text-stroke-width: 0px">indeterminate伪类选择器</h1><!DOCTYPE html>

<html>

<head lang="en">

<meta charset="UTF-8">

<title>indeterminate伪类选择器</title>

<style>

input[type="radio"]:indeterminate{

outline: 2px solid green

}

</style>

</head>

<body>

<h1>indeterminate伪类选择器</h1>

<form>

性别:

<input type="radio">男

<input type="radio">女

</form>

</body>

</html>

5、伪类选择器E::selection

1)、E:selection伪类选择器用来指定当元素处于选中状态时的样式。

例如

[html] view plain copy

<!DOCTYPE html>

<html>

<head lang="en">

<meta charset="UTF-8">

<title>伪类选择器E::selection</title>

<style>

::selection{

background: green

color: #ffffff

}

input[type="text"]::selection{

background: #ff6600

color: #ffffff

}

</style>

</head>

<body>

<h1>伪类选择器E::selection</h1>

<p>今天,开发搜索框,出现了bug,现在没有找到原因!今天,开发搜索框,出现了bug,现在没有找到原因!今天,开发搜索框,出现了bug,现在没有找到原因!今天,开发搜索框,出现了bug,现在没有找到原因!今天,开发搜索框,出现了bug,现在没有找到原因!</p>

<input type="text" placeholder="文本">

</body>

</html>

6、E:invalid伪类选择器与E:valid伪类选择器

1)、E:invalid伪类选择器用来指定,当元素内容不能通过HTML5通过使用的元素的诸如requirde等属性所指定的检查或元素内容不符合元素规定的格式时的样式。

2)、E:valid伪类选择器用来指定,当元素内容能通过HTML5通过使用的元素的诸如requirde等属性所指定的检查或元素内容符合元素规定的格式时的样式。

例如

[html] view plain copy

<!DOCTYPE html>

<html>

<head lang="en">

<meta charset="UTF-8">

<title>E:invalid伪类选择器与E:valid伪类选择器</title>

<style>

input[type="email"]:invalid{

color: red

}

input[type="email"]:valid{

color: green

}

</style>

</head>

<body>

<h1>E:invalid伪类选择器与E:valid伪类选择器</h1>

<form>

<input type="email" placeholder="请输入邮箱">

</form>

</body>

</html>

7、E:required伪类选择器与E:optional伪类选择器

1)、E:required伪类选择器用来指定允许使用required属性,而且已经指定了required属性的input元素、select元素以及textarea元素的样式。

2)、E:optional伪类选择器用来指定允许使用required属性,而且未指定了required属性的input元素、select元素以及textarea元素的样式。

[html] view plain copy

<!DOCTYPE html>

<html>

<head lang="en">

<meta charset="UTF-8">

<title>E:required伪类选择器与E:optional伪类选择器</title>

<style>

input[type="text"]:required{

background: red

color: #ffffff

}

input[type="text"]:optional{

background: green

color: #ffffff

}

</style>

</head>

<body>

<h1>E:required伪类选择器与E:optional伪类选择器</h1>

<form>

姓名:<input type="text" placeholder="请输入姓名" required>

<br/>

<br/>

学校:<input type="text" placeholder="请输入学校">

</form>

</body>

</html>

8、E:in-range伪类选择器与E:out-of-range伪类选择器

1)、E:in-range伪类选择器用来指定当元素的有效值被限定在一段范围之内,且实际的输入值在该范围之内时的样式。

2)、E:out-of-range伪类选择器用来指定当元素的有效值被限定在一段范围之内,但实际输入值在超过时使用的样式。

例如

[html] view plain copy

<!DOCTYPE html>

<html>

<head lang="en">

<meta charset="UTF-8">

<title>E:in-range伪类选择器与E:out-of-range伪类选择器</title>

<style>

input[type="number"]:in-range{

color: #ffffff

background: green

}

input[type="number"]:out-of-range{

background: red

color: #ffffff

}

</style>

</head>

<body>

<h1>E:in-range伪类选择器与E:out-of-range伪类选择器</h1>

<input type="number" min="0" max="100" value="0">

</body>

</html>