结构伪类选择器,可以根据元素在文档中所处的位置,来动态选择元素,从而减少HTML文档对ID或类的依赖,有助于保持代码干净整洁。

表 2-6 结构伪类选择器
选择器 功能描述 版本
E:last-child 选择父元素的倒数第一个子元素E,相当于E:nth-last-child(1) 3
E:nth-child(n) 选择父元素的第n个子元素,n从1开始计算 3
E:nth-last-child(n) 选择父元素的倒数第n个子元素,n从1开始计算 3
E:first-of-type 选择父元素下同种标签的第一个元素,相当于E:nth-of-type(1) 3
E:last-of-type 选择父元素下同种标签的倒数第一个元素,相当于E:nth-last-of-type(1) 3
E:nth-of-type(n) 与:nth-child(n)作用类似,用作选择使用同种标签的第n个元素 3
E:nth-last-of-type 与:nth-last-child作用类似,用作选择同种标签的倒数第一个元素 3
E:only-child 选择父元素下仅有的一个子元素,相当于E:first-child:last-child或E:nth-child(1):nth-last-child(1) 3
E:only-of-type 选择父元素下使用同种标签的唯一子元素,相当于E:first-of-type:last-of-type或E:nth-of-type(1):nth-last-of-type(1) 3
E:empty 选择空节点,即没有子元素的元素,而且该元素也不包含任何文本节点 3
E:root 选择文档的根元素,对于HTML文档,根元素永远HTML 3

结构伪类选择器很容易遭到误解,需要特别强调。如,p:first-child表示选择父元素下的第一个子元素 p,而不是选择 p 元素的第一个子元素。

需要注意的是,结构伪类选择器中,子元素的序号是从 1 开始的,也就是说,第一个子元素的序号是 1,而不是 0。换句话说,当参数 n 的计算结果为 0 时,将不选择任何元素。

接下来,简单介绍 :first-child、:last-child、:nth-child、:nth-of-type、:empty 这几个选择器,其他选择器的功能在表格中已经描述清楚,不再赘述。

E:first-child 和 E:last-child

:first-child 和 :last-child分别用于选择元素的子元素中,符合条件的第一个和最后一个子元素。:first-child 伪类在CSS2就已经存在,:last-child 伪类是CSS3新增的伪类。

如,对于下面的 tab 菜单,希望该 tab 菜单的第一个元素的左上角,和最后一个元素的右上角应用圆角。HTML代码如下:

  1. <ul class = "tabMenu">
  2. <li><a href="# ">公司介绍</a></li>
  3. <li><a href="# ">产品中心</a></li>
  4. <li><a href="# ">新闻动态</a></li>
  5. </ul>

在CSS3之前,直接选取 class 为 tab 元素的第一个或最后一个子元素,是不可能的。现在,通过 :first-child 和 :last-child 伪类,就可以轻松实现。CSS代码如下:

  1. .tabMenu li:first-child {
  2. border-top-left-radius: 5px;
  3. }
  4. .tabMenu li:last-child {
  5. border-top-right-radius: 5px;
  6. }

上述代码的运行结果如图 2‑19 所示:

图2-19 first-child和last-child伪类

E:nth-child(n)

E:nth-child(n) 用于选择某个父元素的一个或多个特定的子元素。n 表示不确定的数字,th 是英语中序数词的后缀。因此,nth-child 就表示第 n 个子元素。该选择器的参数 n 可以是数字、公式或关键字:

1)数字:可以是任何大于 0 的正整数。如,.tab li:nth-child(2),表示选择 class 为 .tab 的父元素下,第 2 个 li 子元素。

2)公式:格式为 (an + b)。其中,a表示周期的长度,n 是计数器(从 0 开始),b 是偏移值。如,:nth-child(n+4) 选取序号大于等于 4 的元素,:nth-child(-n+4) 选取序号小于等于 4 的元素,:nth-child(2n) 选取序号为偶数的元素,:nth-child(2n+1) 选取序号为奇数的元素,:nth-child(3n) 选取序号为3、6、9…的子元素(即“隔二选一”),:nth-child(3n+1) 选取序号为1、4、7、10…的子元素,等等。

3)关键字:只有odd 和 even 两个关键字。odd表示选取序号为奇数的元素,效果等同于 :nth-child(2n-1) 和 :nth-child(2n+1);even表示选取序号为偶数的元素,效果等同于 :nth-child(2n)。

E:nth-of-type(n)

:nth-of-type(n) 与 :nth-child(n) 的作用和使用方法完全相同,唯一不同的是,它用来选择某个父元素下,指定类型的一个或多个特定的子元素。

E:empty

选择空节点,即不包含任何子元素的元素,也就是内容为空白的元素。因为文本节点本身也被看作子元素,所以,包含文本节点的元素就不是空元素,哪怕是一个空格。如:

  1. <div>
  2. <p>我包含文本节点,我不是空元素</p>
  3. <p></p>
  4. </div>

对上述HTML代码调用样式如下:

  1. p:empty {
  2. height: 25px;
  3. background: #eee;
  4. border: 1px solid #f90;
  5. }

上述HTML代码中,由于最后一个 p 元素是空节点,则会被 p:empty 选择器选中。于是,它就会表现为一个高度为 25px,背景色为灰色,带有1px 的橙色边框的矩形框。运行结果如图 2‑20 所示:

图2-20 E:empty运行结果

:nth-child 与 :nth-of-type 的区别:

:nth-child 和 :nth-of-type 都能选择子元素,它们到底有什么区别呢?

区别其实也很简单,E:nth-child(n) 是把所有子元素作为选择对象,选择其中的第n个子元素,且这个子元素的类型必须是 E,如果不是,则选择失败。而 E:nth-of-type(n) 则先把类型为E的所有子元素选择出来,从1开始编号,然后把这些子元素作为选择对象,选择其中的第n个。假如有以下HTML代码片段:

  1. <div>
  2. <ul class="demo">
  3. <p>zero</p>
  4. <li>one</li>
  5. <li>two</li>
  6. </ul>
  7. </div>

上述代码中,.demo li:nth-child(2)是从 .demo 的所有子元素中找第二个子元素,且第二个子元素的类型必须是 li,选择结果为<li>one</li>节点;.demo li:nth-of-type(2) 先把 .demo 的所有类型为 li 的子元素找出来,然后选择其中的第 2 个,选择结果为 <li>two</li> 节点。

关于作者

歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、《Bootstrap2用户指南》、《Bootstrap3实用教程》,并全部在 GitHub 上开源。

CSS结构伪类选择器相关推荐

  1. Css 结构伪类选择器

    目录 Css 结构伪类选择器 结构伪类-公式 Css 结构伪类选择器 在日常开发中,结构伪类选择器用的还是比较多的熟练的使用它,可以让我们的代码更整洁. 作用与优势: 作用:根据元素在HTML中的结构 ...

  2. web前端入门学习 css(8)(新增语义化标签、video/audio、新增input类型、新增表单属性、属性选择器、结构伪类选择器、伪元素选择器、css3盒子模型、模糊、calc函数、过渡

    https://www.bilibili.com/video/BV1pE411q7FU?p=276 文章目录 html5新特性 html5新增语义化标签 header头部 nav导航 article内 ...

  3. CSS学习(05结构伪类选择器 浮动及清除)

    文章目录 一 结构伪类选择器 1.1 作用与优势: 1.2 选择器 1.3 n的注意点 二 伪元素 2.1 区别: 2.2 种类: 2.3 注意点: 三 标准流 四 浮动 4.1 浮动的产生 4.2 ...

  4. css 伪类选择器(链接伪类选择器、结构伪类选择器、目标伪类选择器)

    css 伪类选择器(链接伪类选择器.结构伪类选择器.目标伪类选择器) 链接伪类选择器:顾名思义就是用于链接的伪类选择器.a的伪类标签有:a:link.a:visited.a:hover.a:activ ...

  5. CSS学习05之结构伪类选择器

    回顾 基本选择器又分为三种方式: 后代选择器 子选择器 相邻选择器 通用选择器 结构伪类选择器 结构伪类选择器有很多种伪类,这里我们列举常用的几种方式: first-child 伪类 hover悬停伪 ...

  6. CSS基本选择器、层次选择器、结构伪类选择器、属性选择器

    目录 基本选择器 1.标签选择器 2.类选择器 3.ID选择器 层次选择器 结构伪类选择器 属性选择器 基本选择器 1.标签选择器 2.类选择器 3.ID选择器 层次选择器 选择器 类   型 功能描 ...

  7. CSS基础(part20)--CSS3结构伪类选择器

    学习笔记,仅供参考,有错必究 参考自:pink老师教案 结构伪类选择器 属性列表: nth-child(n) 参数详解: 注意:本质上就是选中第几个子元素 n可以是数字.关键字.公式 n如果是数字,就 ...

  8. CSS新增的属性、结构伪类选择器,帮你快速找到那个对的人

    文章目录 前言 一.属性选择器 二.结构伪类选择器 总结 前言 今天学会了这几个新的选择器会为我们节省很多代码,简化HTML结构,对于起名困难户也会有很大的帮助. 提示:以下是本篇文章正文内容,下面案 ...

  9. html伪类选择器focus,了解CSS :focus-within伪类选择器

    一.了解CSS :focus-within伪类选择器 CSS :focus-within伪类选择器和IE8就开始支持的:focus可以说是近亲,区别在于:focus表示当前元素处于focus状态时候干 ...

最新文章

  1. 从现在到未来50年,传感器将如何改变世界?
  2. 虚拟串口工具_com0com
  3. 哈尔滨__伏尔加庄园
  4. Java基础——Arrays工具类的使用
  5. 解决使用sudo没问题,但是使用su会报错 su: Authentication failure 的问题
  6. gdbstub中的基本命令_程序员应该知道的 20 个 Linux 系统管理命令
  7. C#的百度地图开发(一)发起HTTP请求
  8. 读取本地IP地址和子网页码
  9. Mac开机速度优化的详细教程
  10. 硬件加密芯片介绍 及 加密芯片选择(加密IC) 加密芯片原理
  11. 【backtrader回测】隔夜持仓 VS 日内交易
  12. 【自然语言处理】【聚类】DCSC:利用基于对比学习的半监督聚类算法进行意图挖掘
  13. stm32h7内存分配_【STM32H7教程】第26章 STM32H7的TCM,SRAM等五块内存的超方便使用方式...
  14. android 自动调节音量,Android 音量调节
  15. QAP-based Simulation-Extractable SNARK with a Single Verification及代码实现
  16. CVE-2021-40539-Zoho ManageEngine ADSelfService Plus如何从bypass到RCE
  17. springboot+vue宠物医院诊所管理系统源码
  18. java培训出来的面试经历
  19. 华为6年经验测试工程师,做软件测试的一些感悟
  20. 年年立计划却年年倒?用对计划管理工具是关键

热门文章

  1. C#网络编程之Http请求
  2. NSEnumerator使用
  3. C#类、接口、虚方法和抽象方法
  4. Memcached内存管理机制浅析
  5. Android中文API(126) —— Message
  6. 程序员的进阶课-架构师之路(2)-数组
  7. 关于Python的一些学习笔记(小白式笔记,持续更新)
  8. IoU,ROI 和 ROC,AUC区分
  9. weblogic-开发模式转变为生产模式生产模式转变为开发模式
  10. Exchange 2013SP1和O365混合部署系列一