[快速入门前端 12] CSS 选择器 (2) 複合选择器 — 后代选择器及兄弟选择器

元素间的关係

除了我们之前讲到的交集、併集选择器外,複合选择器还有后代、兄弟、子选择器等依照元素间结构关係来选取到该元素的选择器,所以在讲接下来的选择器之前我们先来简单介绍一下 HTML 元素之间的关係。

在下面这段程式中我们可以看到结构为 <div> 包裹着 <form<a><span>,而 <form> 标籤中又包含两个 <input>

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">  </head>  <body>    <div>        <form>             <input type="text" name="userName">            <input type="button" value="button">        </form>        <a>test 123</a>        <span>test 456</span>    </div>  </body></html>

从最外层的结构来看,<div>包着三个标籤,所以我们称 <form><a><span> 为子元素,而 div 为他们的父元素。除此之外,在同一层的元素被称为兄弟元素,所以这边的 <form><a><span> 互为兄弟元素。
http://img2.58codes.com/2024/20158509cLBl2l7JZU.jpg

其实 HTML 的结构关係就像是家庭的关係,有父子、兄弟、祖先和后代,下图是同一段程式码的下一层解析。我们可以看到 <input> 是在 <div> 的子元素 <form> 中,所以对 <div> 来说,<input> 是他的后代元素 (在结构关係中不论是子元素、孙子元素、曾孙元素...等都被称为后代元素);而反过来 <div><input> 的祖先元素。
http://img2.58codes.com/2024/20158509z2fUl9o3n0.jpg

后代选择器

后代选择器的功能顾名思义就是选中元素中符合条件的后代元素,这边的后代元素包含子元素,可以理解为 ... 中的元素,例如 div p .red 可以解释为选择 div 中的 p 标籤中的拥有 red 这个 class 的元素

语法:

元素1 元素2 元素3... 元素n { /* 元素必须由外层写到内层 */  属性名: 属性值;}

範例:

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <style>      div a { /* 选择 div 中的 a */        color: red;      }    </style>  </head>  <body>    <div>        <a>123我要变红色</a> <!-- 变红色 -->    </div>    <a>我会变成红色吗? 不会</a> <!-- 不符合 div a 这个选择器,不会变色 -->  </body></html>

子选择器

子选择器的规则比后代选择器更加严谨,只会选中元素的子元素,其他后代不受影响。

语法:

元素1 > 元素2 > 元素3... > 元素n { /* 元素必须由外层写到内层 */  属性名: 属性值;}

範例:

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <style>        .block > a { /* 选择 div 中的子元素 a */            color: red;        }    </style>  </head>  <body>    <div class="block">        <a>123我要变红色</a> <!-- 是 .block 的儿子,会变红色 -->        <div>            <a>我是儿子还是孙子?</a> <!-- 是 .block 的孙子,不会变色 -->        </div>        <span>我是儿子但我不是 a</span> <!-- 符合子元素,但不符合标籤为 a,不会变色 -->    </div>    <a>我会变成红色吗? 不会</a> <!-- 不符合 div a 这个选择器,不会变色 -->  </body></html>

兄弟选择器

兄弟选择器会选择该元素符合条件的兄弟元素,主要分为通用兄弟选择器及相邻兄弟选择器,比较特别的是兄弟选择器只会选择到该元素之后的兄弟元素 (如範例)。

通用兄弟选择器:选择某元素后的所有兄弟元素相邻兄弟选择器:选择某元素后的第一个兄弟元素

语法:

/* 通用兄弟选择器 */元素1 ~ 元素2 { /* 元素2必须是元素1后面的兄弟元素 */  属性名: 属性值;}/* 相邻兄弟选择器 */元素1 + 元素2 { /* 元素2必须是元素1后面的第一个兄弟元素 */  属性名: 属性值;}

通用兄弟元素範例:

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <style>        h1 ~ a {            color: red;        }    </style>  </head>  <body>    <a>我也是兄弟但我在前面</a> <!-- h1 元素前面的兄弟元素不会变色 -->    <h1>我是标题</h1>    <a>123</a>    <div>        <a>我会变色吗?</a> <!-- h1 的兄弟 div 的子元素不会变色 -->    </div>    <a>123</a>    <a>123</a>  </body></html>

相邻兄弟元素範例:

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <style>        h1 + a {            color: red;        }    </style>  </head>  <body>    <a>我也是兄弟但我在前面</a>    <h1>我是标题</h1>    <a>123</a> <!-- 只有这个元素符合 h1 后面的第一个兄弟元素 a -->    <div>        <a>我会变色吗?</a>    </div>    <a>123</a>    <a>123</a>  </body></html>

上一篇:[快速入门前端 11] CSS 选择器 (2) 複合选择器 — 交集和併集
下一篇:[快速入门前端 13] CSS 选择器 (3) Pseudo-Classes 伪类 - 动态伪类
系列文章列表:[快速入门前端] 系列文章索引列表


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章