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. Headless MSBuild Support for SSDT (*.sqlproj) Projects

    http://sqlproj.com/index.php/2012/03/headless-msbuild-support-for-ssdt-sqlproj-projects/ Update: bre ...

  2. bug的约束

    1.bug的标题:主模块-子模块-页面-功能描述-bug的描述

  3. linux 集群配置ssh无密码访问

    一.修改host文件 1) 用客户端工具(ssh client或者putty)连接到linux服务器.在root用户下输入命令 vi /etc/hosts,用vi编辑hosts文件,如下: #127. ...

  4. 【原创】纯干货,Spring-data-jpa详解,全方位介绍。

    本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求.这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring ...

  5. Mac系统之----教你怎么显示隐藏文件,或者关闭显示隐藏文件

    缺省情况下,在 Mac 下是不显示隐藏文件的,Finder 也未提供设置是否显示隐藏文件的选项,不像 Windows 下,有一个“文件夹选项“设置界面里可以控制,但这并不表示 Mac 下无法显示隐藏文 ...

  6. C#:将子Form加入父Form中

    实现的功能:已建立了多个子Form界面,在父Form界面左面,点击不同标题的链接文本,父Form界面右面显示不同的子界面内容. 具体如下: 1.加入split拆分器控件 2.在splitControl ...

  7. Greenplum failed segment的恢复方法

    [前记] Segment检测及故障切换机制GP Master首先会检测Primary状态,如果Primary不可连通,那么将会检测Mirror状态,Primary/Mirror状态总共有4种:1. P ...

  8. Poj(1797) Dijkstra对松弛条件的变形

    题目链接:http://poj.org/problem?id=1797 题意:从路口1运货到路口n,最大的运货重量是多少?题目给出两路口间的最大载重. 思路:j加到s还是接到K下面,取两者的较大者,而 ...

  9. python爬虫之Scrapy 使用代理配置

    转载自:http://www.python_tab.com/html/2014/pythonweb_0326/724.html 在爬取网站内容的时候,最常遇到的问题是:网站对IP有限制,会有防抓取功能 ...

  10. Codeforces Round #372 (Div. 2) B

    Description ZS the Coder loves to read the dictionary. He thinks that a word is nice if there exists ...