CSS3 :nth-child(n):

http://demo.doyoe.com/css3/nth-child(n)/

浏览器参照基准:IE9, Firefox, Chrome, Safari, Opera

语法:

E:nth-child(n){ sRules } 【n从1开始】

* 匹配父元素索引为n的子元素E

【补充:】#parent :nth-child(1) 会匹配父元素#parent下的每一个第一个元素,如下橙色代码例子,#demo :nth-child(1)会匹配到的元素有:<h1>选取ul第一个子元素li</h1> 【section的第一个元素】,<li>如果我是红色,说明你的选择到了我,浏览器还颇为先进</li> 【ul 的第一个元素】,<input type='text' name='user' />【div的第一个元素】;在此基础上,#parent  E:nth-child(1)会匹配 #parent下的每个第一个元素 中是E的那个元素.

:nth-child(n) 让你匹配到父元素的任一子元素:

Figure 1: 常规用法 DEMO
<section id="demo">
  <h1>选取ul第一个子元素li</h1>
  <ul>
    <li>如果我是红色,说明你的选择到了我,浏览器还颇为先进</li>
    <li>落后的浏览器</li>
    <li>落后的浏览器</li>
    <li>落后的浏览器</li>
  </ul>
  <div>
    <input type='text' name='user' />
  </div>
#demo li:nth-child(1){ color:#f00; }

* 除lte IE8浏览器外,你都能看到第一个li被匹配到,且文本为红色;

重点:匹配到的是父元素的子元素:

Figure 2: 如果代码是这样的 DEMO
<section id="demo"> <h1>选取#demo第一个子元素p</h1> <p>如果你以为我会被选中变红,那你就猜错了</p> <p>落后的浏览器</p> <p>落后的浏览器</p> <p>落后的浏览器... #demo p:nth-child(1){ color:#f00; }

* 上诉代码是不是让你感觉第一p元素会被匹配到?如果你真这么想,那你就真的错了,这里没有任何一个元素会被匹配到;

Figure 3: CSS如果改成这样 DEMO
#demo p:nth-child(2){ color:#f00; }

* 将Figure #2中的CSS伪类 #demo p:nth-child(1) 改成 #demo p:nth-child(2) 你会发现第一个p才被选中变红,why? 不急,我们再往下看看;

Figure 4: 再改 DEMO
#demo :nth-child(2){ color:#f00; }

* 我们再将Figure #3中的CSS伪类 #demo p:nth-child(2) 改成 #demo :nth-child(2) ,把p tag从选择器中去除,你会发现第一个p同样被选中变红。貌似这个才是能符合我们正常思维的,因为第1个p是#demo的第二个子元素;也就是说在本 DEMO 中 #demo p:nth-child(2) 与 #demo :nth-child(2) 是等价的;

* 你觉得这难理解么?CSS选择器是从右到左查询的,我猜你已经知道了这个。E:nth-child(n) 表示的是匹配父元素第2个子元素,如果第2个子元素正好是E,则被匹配到;

* 相信现在 Figure #2 为什么没有任何元素被选中,你已经可以理解了。因为#demo的第一个子元素并不是p,而是一个h1,所以这个选择器是无效的;

* 而 Figure #3 选择器 #demo p:nth-child(2) 表示匹配 #demo 的第2个子元素p,此时 #demo 的第2个子元素正好是一个p,所以被匹配到;

* 相对于 Figure #2 和 Figure #3,本例中的 #demo :nth-child(2) 表示直接选择 #demo 第2个子元素,不论这个子元素是任何标签,都将被匹配到;

:nth-child(n) 可能会这样被使用:

Figure 5: 间隔背景色效果 DEMO
<section id="demo"> <h1>还记得这种间隔背景色的效果么?</h1> <ul> <li>CSS3伪类 :nth-child(n) 实现的奇偶间隔背景色效果</li> <li>CSS3伪类 :nth-child(n) 实现的奇偶间隔背景色效果</li> <li>CSS3伪类 :nth-child(n) 实现的奇偶间隔背景色效果</li> <li>CSS3伪类 :nth-child(n) 实现的奇偶间隔背景色效果</li> <li>CSS3伪类 :nth-child(n) 实现的奇偶间隔背景色效果... #demo li{ background-color:#ddd; } #demo li:nth-child(2n){ background-color:#bbb; }

* 确实,:nth-child(n), 这个 n 不仅可以试一个具体的数字索引,也可以作为一个乘法的因子,比如本例中的 2n 不论这个 n 是多少,始终代表是的一个偶数,所以实现奇偶间隔真是轻而易举;

Figure 6: n+1使用场景 DEMO
<section id="demo"> <h1>我想每个显示4个方块,并且每列的背景色都不相同?</h1> <ul> <li>1</li><li>2</li><li>3</li><li>4</li> <li>5</li><li>6</li><li>7</li><li>8</li> <li>9</li><li>10</li><li>11</li><li>12</li> <li>13</li><li>14</li><li>15</li><li>16... #demo li{ float:left; } #demo li:nth-child(4n+1){ clear:left; background-color:#999; } #demo li:nth-child(4n+2){ background-color:#aaa; } #demo li:nth-child(4n+3){ background-color:#ccc; } #demo li:nth-child(4n+4){ background-color:#eee; }

* 有 Figure #5 这样一个 DEMO,如果也可以 n+1 这样子,你是不是会更兴奋?本例你可以看到 n+1 的使用场景,看看 DEMO 吧。相信你能拓展更多的使用场景和好玩的实例,Good Luck!

© Copyright Doyoe.com

CSS3选择器 :nth-child(n) 详解的更多相关文章

  1. CSS3盒模型display:box详解

    display:box;box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布局应用就是布局的垂直等高.水平均分.按比例划分. 目前box ...

  2. css3中user-select的用法详解

    css3中user-select的用法详解 user-select属性是css3新增的属性,用于设置用户是否能够选中文本.可用于除替换元素外的所有元素,以下是user-select的主要用法和注意事项 ...

  3. CSS3教程:pointer-events属性值详解 阻止穿透点击

    转:http://www.poluoluo.com/jzxy/201109/142876.html 在某个项目中,很多元素需要定位在一个地图层上面,这里就要用到很多绝对定位或者相对定位的元素,但是这样 ...

  4. css3伸缩布局中justify-content详解

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. css3:border-radius圆角边框详解 (变圆 图片)

    转:http://www.kuqin.com/shuoit/20141014/342620.html border-radius:50% 今天来聊聊这个border-radius属性,radius的英 ...

  6. CSS3图片翻转动画技术详解

    CSS动画非常的有趣:这种技术的美就在于,通过使用很多简单的属性,你能创建出漂亮的消隐效果.其中代表性的一种就是CSS图片翻转效果,能让你看到一张卡片的正反两面上的内容.本文就是要用最简单的方法向大家 ...

  7. CSS3 nth-child的使用,详解css中nth的作用,以及nth-child的兼容写法

    :nth-child是css3的一个比较常用的选择器.它用于匹配属于其父元素中的子元素,不论元素的类型. 它的参数可以是数字.关键词或公式.下面讲介绍它的使用方法, nth-child的使用 html ...

  8. CSS3之3D变换实例详解

    CSS3的3D效果很赞,本文实现简单的两种3D翻转效果.首先看效果和源代码,文末是文绉绉的总结部分^_^ 以下CSS代码为了简洁没有添加前缀,请视情况自行添加(自动化时代推荐使用其他的一些方法,如gu ...

  9. CSS3中的Transition属性详解

    w3c标准中对CSS3的transition这是样描述的:“CSS的transition允许CSS的属性值在一定的时间区间内平滑地过渡.这种效果可以在鼠标单击.获得焦点.被点击或对元素任何改变中触发, ...

  10. CSS3中的Transition属性详解(贝赛尔曲线)

    transition语法: transition : [<'transition-property'> || <'transition-duration'> || <'t ...

随机推荐

  1. 在IIS站点中Adomd.net集成认证账号问题

    最近在做一个Asp.net项目的时候 ,在C#代码里面用到了Adomd.net去连接SSAS服务器做MDX查询,开发完成后将Asp.net代码部署到IIS后发现Adomd.net老是连接不到SSAS服 ...

  2. oracle中的函数

    ORACLE中函数          Oracle已经内建了许多函数,不同的函数有不同的作用和用法,有的函数只能作用在一个记录行上,有的能够作用在多个记录行上,不同的函数可能处理不同的数据类型.常见的 ...

  3. OpenStack 之vmware机器迁移到openstack集群

    原理 openstack本身是支持使用vmware格式的镜像的,但是是需要我们我们在/etc/nova/nova.conf的配置文件中指定该计算节点使用vmware的驱动 1 2 3 4 5 6 7 ...

  4. 关于IE6/7的 inline-block

    今天在写代码的时候使用了inline-block,但是很意外的在IE6/7下此属性不给力~~ 但是由于我既需要他是个内联数据,又要设置它的宽度设置block,所以只能使用inline-block. 所 ...

  5. std的find和reverse_iterator联合使用

    上代码: // test2013.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdlib.h> #in ...

  6. php curl向远程服务器上传文件

    <?php /** * test.php: */ header('content-type:text/html;charset=utf8'); $ch = curl_init(); //加@符号 ...

  7. WPF:窗体置顶

    1.设置窗体TopMost属性 private DispatcherTimer timer; public Window1() { InitializeComponent(); Loaded += n ...

  8. 用C#.NET编写软件注册机

    验证注册码是保护软件产品产权的常用手段.一般过程如下, 1.  软件发行者收集用户特有的信息: 2.  根据用户特有的信息,使用注册机生成注册码并把注册码发给客户: 3.  向软件导入注册码,由软件自 ...

  9. css样式(二)(伪类 | 伪元素 | 导航 | 图像拼合 | 属性选择器 )

    一.rgb值: RGBA 颜色 RGBA 颜色值得到以下浏览器的支持:IE9+.Firefox +.Chrome.Safari 以及 Opera +. RGBA 颜色值是 RGB 颜色值的扩展,带有一 ...

  10. java JPEGImageEncoder;图像处理

    在Eclipse中处理图片,需要引入两个包: import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JP ...