CSS的复合选择器

CSS选择器是前端开发中非常重要的基础知识,而复合选择器则是其中功能强大且实用的部分。本文将详细介绍各种复合选择器的用法和应用场景,帮助您更高效地选择和控制页面元素。

1. 后代选择器(空格)

后代选择器通过空格连接两个选择器,用于选择嵌套在父元素内部的所有匹配子元素,不论嵌套层级有多深。

语法:祖先选择器 后代选择器{}

代码示例:

css 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>复合选择器</title>
    <style>
        .container .box1-1 {
            width: 100px;
            height: 100px;
            background-color: #19ff32;
            color: #5440ff;
        }
    </style>
</head>
<body>
    <div class="container">
        <!--作为container的亲儿子-->
        <div class="box1-1">我是儿子</div>
        <div class="box1">
            <!--做为container的孙子-->
            <div class="box1-1">
                我是孙子
                <div class="box1-1">
                    <!--做为container的孙孙-->
                    我是孙孙子
                </div>
            </div>
        </div>
    </div>
</body>
</html>

运行结果:


注意点:

  1. 后代包括:⼉⼦、孙⼦、重孙⼦......
  2. 后代选择器中,选择器与选择器之前通过 空格 隔开

2. 子代选择器(>)

子代选择器使用>符号,只选择直接子元素,不会选择更深层级的元素。

语法:子代选择器:亲父亲选择器>亲儿子选择器{}

css 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>子代选择器</title>
  <style>
    .container>.box1{
      width: 100px;
      height: 100px;
      background-color: #19ff32;
    }
  </style>
</head>
<body>
    <div class="container">
        <!--作为container的亲儿子-->
        <div class="box1">我是儿子</div>
        <div class="box1-1">
            <!--做为container的孙子-->
            <div class="box1">
                我是孙子
                <div class="box1">
                    <!--做为container的孙孙-->
                    我是孙孙子
                </div>
            </div>
        </div>
    </div>
</body>
</html>


注意点:

  1. ⼦代只包括:⼉⼦
  2. ⼦代选择器中,选择器与选择器之前通过 > 隔开

3. 并集选择器(,)

并集选择器可以同时选择多个元素,为它们设置相同的样式。

语法:并集选择器:选择器1,选择器2....{}

css 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>并集选择器</title>
    <style>
        h1,div p, .outer{
            width:100px;
            height:100px;
            background-color: red;
        }
    </style>
</head>
<body>
    <h1>我是大标题</h1>
    <h2>我是小标题</h2>
    <p class="outer">我是盒子外部的段落!!!</p>
    <div>
         <p class="inner">
             我是盒子内部的段落!!!
         </p>
    </div>
</body>
</html>


注意点:

  1. 并集选择器中的每组选择器之间通过 , 分隔
  2. 并集选择器中的每组选择器可以是基础选择器或者复合选择器
  3. 并集选择器中的每组选择器通常⼀⾏写⼀个,提⾼代码的可读性

4.交集选择器

交集选择器可以通过对元素的类名和id名以及标签名字,对元素进行精准定位,为它们设置样式。

语法:交集选择器:标签名称.选择器名称{}

css 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>交集选择器</title>
    <style>
     /*给类名为boxid名为one的元素设置属性*/
     .box#one {
          width: 100px;
          height: 100px;
          background-color: red;
      }
     /*给标签为h2id名为three的元素设置属性*/
     h2#three{
          width: 100px;
          height: 100px;
          background-color: blueviolet;
     }
    </style>
</head>
<body>
    <div class="box">
        <div class="box" id="one">111</div>
         <h2 class="box" id="two">222</h2>
         <h2 class="box" id="three">222</h2>
         <p class="box" id="four">333</p>
    </div>
</body>
</html>

运行结果:

5.伪类结构选择器:hover{}

伪类结构主要是用来制作鼠标悬停的时候的动态效果。

语法:伪类选择器:hover{}

css 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>伪类结构选择器</title>
    <style>
        h1:hover{
            color: red;
        }
        .outer:hover{
            background-color: #ef96c2;
        }
        a:hover{
            color: #0be4d5;
        }
    </style>
</head>
<body>
    <h1>我是大标题</h1>
    <p class="outer">伪类结构主要是用来制作鼠标悬停的时候的动态效果。</p>
    <div>
        <a href="http://www.baidu.com">百度一下</a>
    </div>
</body>
</html>

运行结果:

总结:

复合选择器是CSS中非常强大的工具,合理使用可以:

  1. 减少HTML中的类名依赖,保持代码整洁
  2. 提高样式选择效率,减少重复代码
  3. 实现更复杂的样式控制
  4. 创建丰富的交互效果
相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95273 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大3 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师3 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学3 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端