样式中 nth-child(n) 的用法

新版本的样式CSS3功能很强大,下面介绍其中的 nth-child(n) 伪类的用法,网上已经有很多了,转载一下,原文部分见

http://www.cnblogs.com/kiracn/archive/2009/12/17/1626742.html


语法:
E:nth-child(an+b)
这个用法比较经典,复杂,实现功能多,用法分五种情况介绍,支持的浏览器为多数厂家新版本的浏览器,如firefox,chrome等

第一种:简单数字序号写法
E:nth-child(number)
直接匹配第number个元素。参数number必须为大于0的整数。
例子: li:nth-child(3){background:orange;}/*把第3个LI的背景设为橙色*/

  • li item 001
  • li item 002
  • li item 003
  • li item 004
CSS 代码 
ul.ul01{margin:0px; padding:0px; width:350px;}
ul.ul01 li:nth-child(3){background-color:#F60;}

第二种:倍数写法
E:nth-child(an)
匹配所有倍数为a的元素。其中参数an中的字母n不可缺省,只能用n字母,它是倍数写法的标志,如3n、5n。
例子:
li:nth-child(3n){background:orange;}/*把第3、第6、第9、…、所有3的倍数的LI的背景设为橙色*/
  • li item 001
  • li item 002
  • li item 003
  • li item 004
  • li item 005
  • li item 006
  • li item 007
  • li item 008
  • li item 009
  • li item 010
CSS 代码 
ul.ul02{margin:5px 0px; padding:0px; width:350px;}
ul.ul02 li:nth-child(3n){background-color:#F60;}

第三种:倍数分组匹配
E:nth-child(an+b) 与 :nth-child(an-b)
先对元素进行分组,每组有a个,b为组内成员的序号,其中字母n和加号+不可缺省,位置不可调换,这是该写法的标志,其中a,b均为正整数或0。如3n+1、5n+1。但加号可以变为负号,此时匹配组内的第a-b个。(其实an前面也可以是负号,但留给下一部分讲。) 
例子: li:nth-child(3n+1){background:orange;}/*匹配第1、第4、第7、…、每3个为一组的第1个LI*/
li:nth-child(3n+5){background:orange;}/*匹配第5、第8、第11、…、从第5个开始每3个为一组的第1个LI*/
li:nth-child(5n-1){background:orange;}/*匹配第5-1=4、第10-1=9、…、第5的倍数减1个LI*/
li:nth-child(3n±0){background:orange;}/*相当于(3n)*/
li:nth-child(±0n+3){background:orange;}/*相当于(3)*/
  • li item 001
  • li item 002
  • li item 003
  • li item 004
  • li item 005
  • li item 006
  • li item 007
  • li item 008
  • li item 009
  • li item 010
  • li item 011
  • li item 012
  • li item 013
  • li item 014
  • li item 015
  • li item 016
CSS 代码 
ul.ul03{margin:5px 0px; padding:2px; width:350px; border:1px dotted #999;}
ul.ul03 li:nth-child(3n+5){background-color:#F60;}

第四种:反向倍数分组匹配
E:nth-child(-an+b)
此处一负一正,均不可缺省,否则无意义。这时与:nth-child(an+1)相似,都是匹配第1个,但不同的是它是倒着算的,从第b个开始往回算,所以它所匹配的最多也不会超过b个。
例子:
li:nth-child(-3n+8){background:orange;}/*匹配第8、第5和第2个LI*/
li:nth-child(-1n+8){background:orange;}/*或(-n+8),匹配前8个(包括第8个)LI,这个较为实用点,用来限定前面N个匹配常会用到*/
  • li item 001
  • li item 002
  • li item 003
  • li item 004
  • li item 005
  • li item 006
  • li item 007
  • li item 008
  • li item 009
  • li item 010
CSS 代码 
ul.ul04{margin:5px 0px; padding:2px; width:350px; border:1px dotted #999;}
ul.ul04 li:nth-child(-3n+8){background-color:#F60;}

第五种:奇偶匹配
E:nth-child(odd) 与 E:nth-child(even)
分别匹配序号为奇数与偶数的元素。奇数(odd)与(2n+1)结果一样;偶数(even)与(2n+0)及(2n)结果一样。 如下偶数行LI背景为橙色,奇数行为蓝色
  • li item 001
  • li item 002
  • li item 003
  • li item 004
  • li item 005
  • li item 006
  • li item 007
  • li item 008
  • li item 009
  • li item 010
CSS 代码 
ul.ul05 li:nth-child(odd){background-color:#F60;}
ul.ul05 li:nth-child(even){background-color:#09F;}
/* or, (same effect) */
ul.ul05 li:nth-child(2n+1){background-color:#F60;}
ul.ul05 li:nth-child(2n){background-color:#09F;}

完整的例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>nth-child(n)</title>
<style type="text/css">
*{font-family:arial, verdana; font-size:12px; line-height:16px;}
div.title{font-size:13px; color:#06C; font-weight:bold;}
pre{font-family:verdana,arial; font-size:11px; color:#09F; margin:0px; padding:2px; 
border:1px dotted #FF66CC; display:inline-table; }
ul{margin:5px 0px; padding:2px; width:400px; border:1px dotted #999;}
li{ margin:1px 0px; padding:0px 3px;}
</style>
</head>
<body>
<p>
<div class="title">CSS3的 <b>nth-child(n)</b> 伪类用法介绍</div>
</p>

<p>
<div class="title">语法:</div>
E:nth-child(an+b)<br />
这个用法比较经典,复杂,实现功能多,用法分五种情况介绍,支持的浏览器为多数厂家新版本的浏览器,如firefox,chrome等
</p>

<p>
<div class="title">第一种:简单数字序号写法</div>
E:nth-child(number)<br/>
直接匹配第number个元素。参数number必须为大于0的整数。<br/>

例子:
li:nth-child(3){background:orange;}/*把第3个LI的背景设为橙色*/<br/>
<style type="text/css">
ul.ul01{margin-top:5px;}
ul.ul01 li:nth-child(3){background-color:#F60;}
</style>
<ul class="ul01">
<li> li item 001</li>
<li> li item 002</li>
<li> li item 003</li>
<li> li item 004</li>
</ul>
CSS 代码
<pre>
ul.ul01{margin:0px; padding:0px; width:350px;}
ul.ul01 li:nth-child(3){background-color:#F60;}
</pre>
</p>

<p>
<div class="title">第二种:倍数写法</div>
E:nth-child(an)<br/>
匹配所有倍数为a的元素。其中参数an中的字母n不可缺省,只能用n字母,它是倍数写法的标志,如3n、5n。<br/>

例子:<br/>
li:nth-child(3n){background:orange;}/*把第3、第6、第9、…、所有3的倍数的LI的背景设为橙色*/<br/>
<style type="text/css">
ul.ul02{margin-top:5px;}
ul.ul02 li:nth-child(3n){background-color:#F60;}
</style>
<ul class="ul02">
<li> li item 001</li>
<li> li item 002</li>
<li> li item 003</li>
<li> li item 004</li>
<li> li item 005</li>
<li> li item 006</li>
<li> li item 007</li>
<li> li item 008</li>
<li> li item 009</li>
<li> li item 010</li>
</ul>
CSS 代码
<pre>
ul.ul02{margin:5px 0px; padding:0px; width:350px;}
ul.ul02 li:nth-child(3n){background-color:#F60;}
</pre>
</p>

<p>
<div class="title">第三种:倍数分组匹配</div>
E:nth-child(an+b) 与 :nth-child(an-b)<br/>
先对元素进行分组,每组有a个,b为组内成员的序号,其中字母n和加号+不可缺省,位置不可调换,这是该写法的标志,其中a,b均为正整数或0。如3n+1、5n+1。但加号可以变为负号,此时匹配组内的第a-b个。(其实an前面也可以是负号,但留给下一部分讲。)
<br/>例子:
li:nth-child(3n+1){background:orange;}/*匹配第1、第4、第7、…、每3个为一组的第1个LI*/<br/>
li:nth-child(3n+5){background:orange;}/*匹配第5、第8、第11、…、从第5个开始每3个为一组的第1个LI*/<br/>
li:nth-child(5n-1){background:orange;}/*匹配第5-1=4、第10-1=9、…、第5的倍数减1个LI*/<br/>
li:nth-child(3n±0){background:orange;}/*相当于(3n)*/<br/>
li:nth-child(±0n+3){background:orange;}/*相当于(3)*/<br/>
<style type="text/css">
ul.ul03{margin-top:5px;}
ul.ul03 li:nth-child(3n+5){background-color:#F60;}
</style>
<ul class="ul03">
<li> li item 001</li>
<li> li item 002</li>
<li> li item 003</li>
<li> li item 004</li>
<li> li item 005</li>
<li> li item 006</li>
<li> li item 007</li>
<li> li item 008</li>
<li> li item 009</li>
<li> li item 010</li>
<li> li item 011</li>
<li> li item 012</li>
<li> li item 013</li>
<li> li item 014</li>
<li> li item 015</li>
<li> li item 016</li>
</ul>
CSS 代码
<pre>
ul.ul03{margin:5px 0px; padding:2px; width:350px; border:1px dotted #999;}
ul.ul03 li:nth-child(3n+5){background-color:#F60;}
</pre>
</p>

<p>
<div class="title">第四种:反向倍数分组匹配</div>
E:nth-child(-an+b)<br/>
此处一负一正,均不可缺省,否则无意义。这时与:nth-child(an+1)相似,都是匹配第1个,但不同的是它是倒着算的,从第b个开始往回算,所以它所匹配的最多也不会超过b个。<br/>
例子:<br/>
li:nth-child(-3n+8){background:orange;}/*匹配第8、第5和第2个LI*/<br/>
li:nth-child(-1n+8){background:orange;}/*或(-n+8),匹配前8个(包括第8个)LI,这个较为实用点,用来限定前面N个匹配常会用到*/<br/>
<style type="text/css">
ul.ul04{margin-top:5px;}
ul.ul04 li:nth-child(-3n+8){background-color:#F60;}
</style>
<ul class="ul04">
<li> li item 001</li>
<li> li item 002</li>
<li> li item 003</li>
<li> li item 004</li>
<li> li item 005</li>
<li> li item 006</li>
<li> li item 007</li>
<li> li item 008</li>
<li> li item 009</li>
<li> li item 010</li>
</ul>
CSS 代码
<pre>
ul.ul04{margin:5px 0px; padding:2px; width:350px; border:1px dotted #999;}
ul.ul04 li:nth-child(-3n+8){background-color:#F60;}
</pre>
</p>

<p>
<div class="title">第五种:奇偶匹配</div>
E:nth-child(odd) 与 E:nth-child(even)<br/>
分别匹配序号为奇数与偶数的元素。奇数(odd)与(2n+1)结果一样;偶数(even)与(2n+0)及(2n)结果一样。 如下偶数行LI背景为橙色,奇数行为蓝色<br/>
<style type="text/css">
ul.ul05{margin-top:5px;}
ul.ul05 li:nth-child(odd){background-color:#F60;}
ul.ul05 li:nth-child(even){background-color:#09F;}
/*
ul.ul05 li:nth-child(2n+1){background-color:#F60;}
ul.ul05 li:nth-child(2n){background-color:#09F;}
*/
</style>
<ul class="ul05">
<li> li item 001</li>
<li> li item 002</li>
<li> li item 003</li>
<li> li item 004</li>
<li> li item 005</li>
<li> li item 006</li>
<li> li item 007</li>
<li> li item 008</li>
<li> li item 009</li>
<li> li item 010</li>
</ul>
CSS 代码
<pre>
ul.ul05 li:nth-child(odd){background-color:#F60;}
ul.ul05 li:nth-child(even){background-color:#09F;}
/* or, (same effect) */
ul.ul05 li:nth-child(2n+1){background-color:#F60;}
ul.ul05 li:nth-child(2n){background-color:#09F;}
</pre>
</p>
参考: <a href="http://www.cnblogs.com/kiracn/archive/2009/12/17/1626742.html" target="_blank">
http://www.cnblogs.com/kiracn/archive/2009/12/17/1626742.html
</a>
</p>
</body>
</html>








  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值