CSS基础:4类组合选择器以及5个注意事项

你好,我是云桃桃。

一个希望帮助更多朋友快速入门 WEB 前端的程序媛。

云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合集

284篇原创内容-更多前端系列内容可以go公众.h:云桃桃

后台回复“前端工具”可获取开发工具,持续更新中

后台回复“前端基础题”可得到前端基础100题汇总,持续更新中

后台回复“前端电子书”可获取20+本精选电子书

前言

要说组合选择器,我们先回顾下简单选择器。

CSS 中的简单选择器包括以下 4 种:

  1. 标签选择器(Element Selector):通过 HTML 元素名称作为选择器,如pdiva等。

  2. 类选择器(Class Selector):通过类名作为选择器,以.开头,如.red-text.btn等。

  3. ID 选择器(ID Selector):通过 ID 属性作为选择器,以#开头,如#header#content等。

  4. 通用选择器(Universal Selector):选择所有元素,使用*作为选择器。

而组合选择器是由多个简单选择器组合而成的选择器,用于更精确地选择 HTML 元素,尤其在一个页面内容多,网页也众多的场景下。那我们一起来看看吧。

4 类组合选择器

一、 后代选择器

(Descendant Selector):用空格分隔不同元素,选择某个元素的后代元素,如div pul li等。以下是 3 个使用后代选择器的 CSS 案例:

  1. 设置页面中所有(.content-box里面的 p 段落标签元素)的样式:

.content-box p {color: #333; /* 设置文字颜色 */font-size: 16px; /* 设置字体大小 */line-height: 1.5; /* 设置行高 */
}
  1. 设置导航栏中所有列表项(<li>元素)的样式:

.navbar li {display: inline-block; /* 设置为行内块级元素 */margin-right: 10px; /* 设置右侧外边距 */
}
  1. 设置表格中所有表头单元格(<th>元素)的样式:

table th {background-color: #f2f2f2; /* 设置背景颜色 */color: #333; /* 设置文字颜色 */font-weight: bold; /* 设置字体加粗 */
}

二、 子元素选择器

(Child Selector):用>符号选择某个元素的直接子元素,如ul > lidiv > p等。以下是 3 个使用子元素选择器的 CSS 案例:

  1. 选择导航栏中直接的列表项(不包括子菜单):

.navbar > ul > li {display: inline-block;margin-right: 10px;
}
  1. 选择表格中直接的表头行(不包括表头中的单元格):

table > thead > tr {background-color: #f2f2f2;color: #333;font-weight: bold;
}
  1. 选择表单中的下拉选择框:

form > select {width: 200px;padding: 5px;border: 1px solid #ccc;
}

三、相邻兄弟选择器

(Adjacent Sibling Selector):用+符号选择紧接在某个元素后面的同级元素,如h2 + pdiv + p等。以下是 3 个使用相邻兄弟选择器的 CSS 案例:

  1. 选择文章标题后的第一个段落:

h2 + p {font-weight: bold;
}
  1. 选择导航栏中当前项后的下一个列表项:

.nav-item.current + .nav-item {font-weight: bold;
}
  1. 选择表格中第一行数据后的下一行数据:

tr + tr {background-color: #f2f2f2;
}

四、通用兄弟选择器

(General Sibling Selector):用~符号选择某个元素后面所有同级元素,如h2 ~ pdiv ~ p等。

以下是 3 个使用通用兄弟选择器的 CSS 案例:

  1. 选择文章标题后的所有段落:

h2 ~ p {margin-top: 10px;
}
  1. 选择导航栏中当前项后的所有列表项:

.nav-item.current ~ .nav-item {opacity: 0.5;
}
  1. 选择表格中第一行数据后的所有行数据:

tr:first-child ~ tr {border-top: 1px solid #ccc;
}

如何选择这 4 种选择器?

在项目中选择合适的组合选择器取决于具体的需求和设计目标,以下是一些选择器写作的建议:

  1. 后代选择器(Descendant Selector):适合用于选择嵌套结构中的后代元素,例如选择特定容器内的子元素,或者选择文章内容中的段落和标题。

  2. 子元素选择器(Child Selector):适合用于选择某个元素的直接子元素,这在设计有嵌套结构的导航菜单或树形菜单时特别有用。

  3. 相邻兄弟选择器(Adjacent Sibling Selector):用于选择紧接在某个元素后面的同级元素,适合用于创建特定样式的相邻元素,例如列表项与列表项之间的分隔线。

  4. 通用兄弟选择器(General Sibling Selector):用于选择某个元素后面所有同级元素,适合用于处理表格中除第一行外的所有行、或者列表中除第一个列表项外的所有项的样式。

综合考虑项目的结构、设计需求以及选择器的特性,可以灵活运用这些组合选择器,提高样式的精准度和可维护性。

注意事项

写组合选择器需要注意什么呢,我认为有以下 5 个方面:

  1. 选择器的复杂度:组合选择器的复杂度越高,其匹配的元素也越具体。因此,在使用组合选择器时,应该根据实际需要和设计目标合理选择选择器的复杂度,避免过度嵌套和复杂的选择器结构。

  2. 选择器的可读性:选择器的命名应该具有一定的可读性和语义化,使得其他开发者能够快速理解选择器的作用和目的。选择器命名应该简洁明了,不宜过长或过于复杂。

  3. 避免选择器冲突:在编写组合选择器时,需要注意避免选择器冲突的问题,特别是在多人协作或引入第三方样式库的情况下。可以通过使用较具体的选择器、使用命名空间或者避免全局作用选择器等方式来减少选择器冲突。

  4. 灵活运用通用选择器:通用选择器(Universal Selector)可以用来选择页面上的所有元素,但过度使用通用选择器可能会影响页面性能。因此,在使用通用选择器时应该谨慎,尽量选择更具体的选择器来减少匹配元素的数量。

  5. 考虑选择器的权重:不同类型的选择器具有不同的权重,例如 ID 选择器的权重高于类选择器、属性选择器和标签选择器。在编写组合选择器时,需要考虑选择器的权重,避免样式被其他具有更高权重的选择器覆盖。关于这个权重问题,后面会写到。

总的来说,编写组合选择器需要综合考虑选择器的复杂度、可读性、避免冲突、权重以及性能等方面,保持选择器的简洁、明了和具体性,有助于提高样式表的可维护性和可扩展性。

OK,本文完。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/3350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Fastadmin】富文本编辑器图片绝对路径改为相对路径

目录 1.场景需求 2.解决方案:把绝对路径改为相对路径存储 首先找到安装的编辑器js文件 3.api获取的时候加入域名实现逻辑 1.安装phpQuery库来处理HTML内容 2.创建一个包含HTML内容的字符串变量$content。 3.使用phpQuery库创建一个新的HTML文档,并将$content作为文档内…

成功密码期刊投稿简介

《成功密码》综合版是由国家新闻出版总署批准&#xff0c;江西省教育厅主管的正规期刊&#xff0c;"以培养担当民族复兴大任的时代新人为着眼点&#xff0c;强化教育引导、实践养成、制度保障"&#xff0c;倡导教育研究的学术水准&#xff0c;注重理论与实践的有机结…

StringBuilder 和 StringBuffer:Java字符串处理的利器

作为准备面试的程序员&#xff0c;你一定知道在Java中字符串处理是一个非常重要的话题。而StringBuilder和StringBuffer作为Java中常用的字符串处理工具&#xff0c;是你必须要掌握的技术之一。 本文将深入探讨StringBuilder和StringBuffer的特点、区别以及在实际开发中的应用…

java spring security oauth2 动态 修改当前登录用户的基础信息以及权限2.0(无需重新登录)

两年前写过一篇动态修改角色和权限当时表述的不是很全面 比如如何修改其他用户权限 修改用户信息没有效果等 再写一篇 如何修改其他用户权限 不管如何改变实际需求就是获取用户token,不管是当前用户还是所有用户 当前用户的token可以通过上下文拿到,而其他用户的token该如何拿…

Delphi 的Show和ShowModal

Show没有返回值是一个过程&#xff0c;焦点可以不在当前窗体&#xff1b; 用法新建一个子窗体&#xff1a; 主窗体&#xff1a; 调用&#xff0c;引用子窗体的单元 调用 showmodal是一个函数有返回值&#xff0c;窗体的处理结果&#xff0c;且只能聚焦到当前窗体 效果都能展示…

尺取法知识点讲解

一、固定长度的情况&#xff1a; 最小和(sum) 输入N个数的数列&#xff0c;所有相邻的M个数的和共有N-M1个&#xff0c;求其中的最小值。 输入格式 第1行&#xff0c;2个整数N&#xff0c;M&#xff0c;范围在[3…100000]&#xff0c;N>M。 第2行&#xff0c;有N个正…

C++多线程系列——std::future | std::promise

获得线程执行任务的结果 在 C 11 之前&#xff0c;想要从线程返回执行任务的结果&#xff0c;可以通过指针来完成。 void fun(int x, int y, int* ans, std::condition_variable &cv) {// 模拟求值之前的准备工作this_thread::sleep_for(3s);*ans x y;cv.notify_one();…

monorepo mode vs standard mode使用场景和各自的优缺点

NestJS 是一个基于 TypeScript 和 Node.js 的渐进式框架&#xff0c;用于构建高效、可扩展的服务器端应用程序。在 NestJS 中&#xff0c;“monorepo”和“standard mode”分别指代两种不同的项目组织和管理方式。以下是这两种模式的优缺点对比&#xff1a; Monorepo (Monolit…

一文掌握Vue3:深度解读Vue3新特性、Vue2与Vue3核心差异以及Vue2到Vue3转型迭代迁移重点梳理与实战

每次技术革新均推动着应用性能与开发体验的提升。Vue3 的迭代进步体现在性能优化、API重构与增强型TypeScript支持等方面&#xff0c;从而实现更高效开发、更优运行表现&#xff0c;促使升级成为保持竞争力与跟进现代前端趋势的必然选择。本文深度解读Vue3 响应式数据data、生命…

基于token进行登录,每次请求携带token

一&#xff0c;什么是token&#xff1f; Token&#xff0c;也称为“令牌”&#xff0c;是服务端生成的一串字符串&#xff0c;以作客户端进行请求的一个令牌&#xff0c;当第一次登录后&#xff0c;服务器生成一个Token便将此Token返回给客户端&#xff0c;以后客户端只需带上…

蓝桥杯python考级整理

4_1:算术运算符 4_2:基本语法 4_3:基本语法 4_4:列表 4_5:函数 4_6:字符串 4_7:列表 4_8:逻辑运算符 4_9:字典 4_10:函数

MacOS通过命令行开启关闭向日葵远程控制的后台服务

categories: [Tips] tags: MacOS Tips 写在前面 经常有小伙伴问我电脑相关的问题, 而解决问题的一个重要途径就是远程了. 关于免费的远程工具我试过向日葵和 todesk, 并且主要使用向日葵, 虽然 MacOS 下要设置很多权限, 但是也不影响其丝滑的控制. 虽然用着舒服, 但是向日葵…

tcp通信协议

#include <myhead.h> #define IP "192.168.124.73" #define PORT 8888 int main(int argc, const char *argv[]) { //创建流式套接字 int sfd socket(AF_INET,SOCK_STREAM,0); if(sfd < 0){ fprintf(stderr,"line%d",__LI…

mysql的约束和表关系

根据查询的结果&#xff0c;复制出一个新表 create table newTable AS select * from oldTable; create table newPeople AS select * from day2_test.people; 约束 引入&#xff1a;如果某一列如id列&#xff0c;有重复的数据&#xff0c;无法准确定位&#xff0c;有的列有空…

实体店引流客户的最快方法是什么?线上短视频+直播引流!

前言&#xff1a;为什么想到写这个话题&#xff1f;因为在每周三晚在视频号白杨SEO免费直播的问题解答的时候&#xff0c;有个朋友问同城流量怎么做&#xff1f;我就以实体店举例解答说了做推荐搜索流量相结合。我想应该还有一些朋友也想知道&#xff0c;所以就分享出来&#x…

组合总和(Lc39)——排序+剪枝+回溯

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选取 。如…

python的练习

python 练习 一、练习题目二、代码概览 一、练习题目 Hello World 实例数字求和平方根二次方程计算三角形的面积计算圆的面积随机数生成摄氏温度转华氏温度交换变量if 语句判断字符串是否为数字判断奇数偶数判断闰年获取最大值函数质数判断输出指定范围内的素数阶乘实例九九乘…

MyBatis多参数查询解析

参考官网 1. 底层 底层是ParamNameResolver类查看getNameParams方法实现 2. 获取参数的两种方式 MyBatis获取参数值的两种方式&#xff1a; ${} : 本质就是字符串拼接#{} :本质就是占位符赋值 3. 多种情况的获取情况 单参数情况&#xff1a; a. 单参数-单个字面量类型 …

人脸清晰修复神器CodeFormer

随着AI技术在图像处理领域大展身手&#xff0c;AI去马赛克相关的项目也屡见不鲜&#xff0c;比如在Github上开源免费、备受欢迎的 CodeFormer 。不得不说利用这款神奇的人脸修复工具&#xff0c;真的是让我大开眼界&#xff0c;竟然可以这样搞&#xff01; 不管面对的是多么模…

Java知识总结-基础

Java中的访问权限修饰符 Java语言有四个权限访问修饰符&#xff0c;权限从大到小依次为&#xff1a; 1&#xff09;public &#xff1a;公共权限&#xff0c;可以被任意类访问&#xff0c;不同包不同类依然可以访问&#xff0c; 可修饰&#xff1a;类、成员变量、方法&#…