CSS 选择器介绍
CSS 选择器介绍
1. 基本概念
CSS(层叠样式表)是一种用于描述 HTML 或 XML 文档外观的语言。通过 CSS,可以控制网页中元素的布局、颜色、字体等视觉效果。而 CSS 选择器则是用来指定哪些 HTML 元素应该应用这些样式的工具。
2. 基本选择器
-
元素选择器(Element Selector)
根据 HTML 元素名称来选择元素。p { color: blue; } /* 所有段落文字颜色为蓝色 */ -
类选择器(Class Selector)
通过 class 属性值来选择元素。以点.开头。.highlight { background-color: yellow; } /* 具有 highlight 类的元素背景色为黄色 */ -
ID 选择器(ID Selector)
通过 id 属性值来选择唯一的一个元素。以井号#开头。#header { font-size: 24px; } /* ID 为 header 的元素字体大小为24像素 */ -
通用选择器(Universal Selector)
匹配所有 HTML 元素,使用星号*表示。* { margin: 0; padding: 0; } /* 所有元素的外边距和内边距均为0 */
3. 组合选择器
-
后代选择器(Descendant Combinator)
匹配某个元素的所有后代元素,使用空格分隔。div p { color: red; } /* 所有在 div 内部的 p 元素文字颜色为红色 */ -
子代选择器(Child Combinator)
匹配某个元素的直接子元素,使用>符号。ul > li { list-style-type: none; } /* 无序列表的直接子项 li 元素取消列表符号 */ -
相邻兄弟选择器(Adjacent Sibling Combinator)
匹配紧接在另一个元素后的元素,使用+符号。h2 + p { font-weight: bold; } /* 跟在 h2 后的下一个 p 元素字体加粗 */ -
一般兄弟选择器(General Sibling Combinator)
匹配同一个父元素下的所有同类型兄弟元素,使用~符号。li ~ li { color: green; } /* 所有 li 元素中第二个及以后的字体颜色为绿色 */
4. 伪类选择器
-
:link和:visited
用于链接的状态,分别表示未访问和已访问。a:link { color: blue; } /* 链接初始状态颜色为蓝色 */ a:visited { color: purple; } /* 访问过的链接颜色为紫色 */ -
:hover
当鼠标悬停在元素上时触发。button:hover { background-color: orange; } /* 悬停时按钮背景色变为橙色 */ -
:active
表示被激活的元素,通常用于点击状态。a:active { color: red; } /* 点击链接时颜色为红色 */ -
:focus
用于表单元素获得焦点时的状态。input:focus { border: 2px solid blue; } /* 输入框获得焦点时边框变为蓝色 */ -
:nth-child(n)和:nth-of-type(n)
分别匹配第 n 个子元素和第 n 个同类型子元素。ul li:nth-child(2) { color: red; } /* 列表中第二个元素文字颜色为红色 */ -
:empty
匹配没有内容的元素(不含文本节点)。div:empty { display: none; } /* 没有内容的 div 元素隐藏 */
5. 属性选择器
-
[attribute]
匹配具有指定属性的元素。a[href] { color: blue; } /* 所有带有 href 属性的链接颜色为蓝色 */ -
[attribute=value]
匹配属性值完全匹配的元素。img[src="logo.png"] { width: 200px; } /* src 为 logo.png 的图片宽度设为200像素 */ -
[attribute^=value]、[attribute$=value]、[attribute=value]*
分别匹配属性值以 value 开头、结尾和包含 value。a[href^="https"] { color: green; } /* href 以 https 开头的链接颜色为绿色 */
6. 伪元素选择器
-
::before和::after
在元素内容前或后插入内容,常用于添加图标、引号等。blockquote::before { content: "❝"; } /* 引用块前插入引号 */ -
::first-line和::first-letter
分别匹配段落的第一行和第一个字母。p::first-line { font-weight: bold; } /* 段落第一行字体加粗 */ -
::selection
匹配用户选中的内容。::selection { background-color: lightblue; } /* 选中文本背景色为浅蓝色 */
7. 高级选择器
-
:not(selector)
匹配不满足指定条件的元素。:not(.highlight) { color: gray; } /* 不具有 highlight 类的元素颜色为灰色 */ -
:enabled和:disabled
用于表单元素,分别表示启用和禁用状态。input:disabled { opacity: 0.5; } /* 禁用的输入框透明度设为0.5 */
8. 组合选择器
- 组合多个选择器
可以通过逗号分隔多个选择器,同时应用样式。h1, h2, h3 { color: red; } /* 所有 h1、h2、h3 元素颜色为红色 */
9. 优先级与覆盖
-
特定选择符
使用!important提高样式的优先级。.error { color: red !important; } /* 强制应用红色 */ -
内联样式
直接在 HTML 元素中定义的样式具有最高优先级。
10. 响应式设计
- 媒体查询
根据设备特性应用不同的样式。@media screen and (max-width: 600px) {nav { display: none; } } /* 屏幕宽度小于等于600像素时隐藏导航 */
11. CSS 模块化
- 导入规则
使用@import导入其他样式表,但需注意顺序和性能。@import url('normalize.css'); /* 导入 normalize.css 文件 */
12. 常用技巧
-
重置默认样式
通过引入reset.css或自定义规则清除浏览器默认样式。* { margin: 0; padding: 0; box-sizing: border-box; } /* 设置所有元素的边距和盒子模型 */ -
使用变量
CSS 变量(Custom Properties)提高代码复用性。:root {--primary-color: #3498db; } body { color: var(--primary-color); } /* 使用变量定义主色调 */
13. 性能优化
-
减少计算
避免复杂的计算,尽可能使用预设值或固定单位。width: 50%; /* 避免写成 calc(100% / 2) */ -
避免过度布局
确保 CSS 布局结构合理,减少重排和重绘。
14. 兼容性
-
使用前缀
为确保旧浏览器支持新特性,添加相应的厂商前缀。.box {display: flex;display: -webkit-flex; /* Chrome 早期版本 */ } -
测试与调试
使用浏览器的开发者工具检查样式应用情况,并进行必要的调整。
15. 工具与资源
-
预处理器
如 Sass、Less 等,提供变量、嵌套等高级功能。$primary-color: #3498db; .header { color: $primary-color; } -
构建工具
使用Webpack、Gulp等自动化处理 CSS 文件。 -
UI 框架
Bootstrap、Foundation 等提供现成的组件和布局,加速开发进程。
16. 最佳实践
-
代码规范
保持代码整洁,适当分隔功能模块,添加注释方便维护。 -
版本控制
使用 Git 等工具管理 CSS 文件变更,便于协作与回溯。
通过以上内容的学习和实践,可以系统地掌握 CSS 的核心概念、高级技巧以及最佳实践,从而在实际项目中开发出高效、优雅且兼容性良好的网页样式。
相关文章:
CSS 选择器介绍
CSS 选择器介绍 1. 基本概念 CSS(层叠样式表)是一种用于描述 HTML 或 XML 文档外观的语言。通过 CSS,可以控制网页中元素的布局、颜色、字体等视觉效果。而 CSS 选择器则是用来指定哪些 HTML 元素应该应用这些样式的工具。 2. 基本选择器 …...
【prometheus+Grafana篇】从零开始:Linux 7.6 上二进制安装 Prometheus、Grafana 和 Node Exporter
💫《博主主页》:奈斯DB-CSDN博客 🔥《擅长领域》:擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、NoSQL(MongoDB)有了解 💖如果觉得文章对你有所帮…...
STM32(M4)入门:GPIO与位带操作(价值 3w + 的嵌入式开发指南)
一:GPIO 1.1 了解时钟树(必懂的硬件基础) 在 STM32 开发中,时钟系统是一切外设工作的 “心脏”。理解时钟树的工作原理,是正确配置 GPIO、UART 等外设的核心前提。 1.1.1 为什么必须开启外设时钟? 1. 计…...
树莓派超全系列教程文档--(42)树莓派config.txt旧版配置HDMI和杂项选项
树莓派config.txt旧版配置HDMI和杂项选项 Raspberry Pi 4 HDMI遗留的杂项选项avoid_warningslogging_level 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 Raspberry Pi 4 HDMI IMPORTANT: 使用VC4 KMS图形驱动程序时,完整的显示管道…...
Linux419 三次握手四次挥手抓包 wireshark
还是Notfound 没连接 可能我在/home 准备配置静态IP vim ctrlr 撤销 u撤销 配置成功 准备关闭防火墙 准备配置 YUM源 df -h 未看到sr0文件 准备排查 准备挂载 还是没连接 计划重启 有了 不重启了 挂载准备 修改配置文件准备 准备清理缓存 ok 重新修改配…...
CSS-跟随图片变化的背景色
CSS-跟随图片变化的背景色 获取图片的主要颜色并用于背景渐变需要安装依赖 colorthief获取图片的主要颜色. 并丢给背景注意 getPalette并不是个异步方法 import styles from ./styles.less; import React, { useState } from react; import Colortheif from colorthief;cons…...
解决Docker 配置 daemon.json文件后无法生效
vim /etc/docker/daemon.json 在daemon中配置一下dns {"registry-mirrors": ["https://docker.m.daocloud.io","https://hub-mirror.c.163.com","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","ht…...
虚幻基础:ue碰撞
文章目录 碰撞:碰撞体 运动后 产生碰撞的行为——碰撞响应由引擎负责,并向各自发送事件忽略重叠阻挡 碰撞响应关系有忽略必是忽略有重叠必是重叠有阻挡不一定阻挡(双方都为阻挡) 碰撞启用:纯查询:开启移动检…...
2025.04.23【探索工具】| STEMNET:高效数据排序与可视化的新利器
文章目录 1. STEMNET工具简介2. STEMNET的安装方法3. STEMNET常用命令 1. STEMNET工具简介 在生物信息学领域,分析和处理大规模数据集是研究者们面临的日常挑战。STEMNET工具应运而生,旨在提供一个强大的平台,用于探索和分析单细胞RNA测序&a…...
GitLab Runner配置并行执行多个任务
检查并修改方法: 打开 Runner 的配置文件(通常位于 /etc/gitlab-runner/config.toml 或 ~/.gitlab-runner/config.toml)。 确保 concurrent 值大于 1,例如: concurrent 4 # 允许最多 4 个任务同时运行重启 Runner…...
深入理解前端安全:CSRF与XSS攻击详解
引言 在Web开发的世界里,安全性就像是房子的门锁。你可能觉得它不显眼,但一旦没了它,麻烦可就大了!本文将深入探讨两大前端安全威胁:CSRF(跨站请求伪造)和XSS(跨站脚本攻击…...
Docker 中运行 JAR 文件
文章目录 步骤 1:准备文件结构步骤 2:编写 Dockerfile步骤 3:构建 Docker 镜像步骤 4:运行容器常见问题解决Q1:容器启动后立即退出Q2:时区不一致Q3:依赖外部服务(如MySQL)…...
数据治理体系的“三驾马车”:质量、安全与价值挖掘
1. 执行摘要 数据治理已从合规驱动的后台职能,演变为驱动业务成果的战略核心。本文将深入探讨现代数据治理体系的三大核心驱动力——数据质量、数据安全与价值挖掘——它们共同构成了企业在数字时代取得成功的基石。数据质量是信任的基石,确保决策所依据…...
leetcode 二分查找应用
34. Find First and Last Position of Element in Sorted Array 代码: class Solution { public:vector<int> searchRange(vector<int>& nums, int target) {int low lowwer_bound(nums,target);int high upper_bound(nums,target);if(low high…...
Ngrok 内网穿透实现Django+Vue部署
目录 Ngrok 配置 注册/登录 Ngrok账号 官网ngrok | API Gateway, Kubernetes Networking Secure Tunnels 直接cmd运行 使用随机生成网址:ngrok http 端口号 使用固定域名生成网址:ngrok http --domain你的固定域名 端口号 Django 配置 1.Youre a…...
利用OLED打印调试信息: 控制PC13指示灯点灯的实验
Do口暗的时候才是高电平,因为光敏电阻传感器的高电平是依靠LM393电压比较器上引脚进入高阻态再加上上拉电阻上拉产生的高电平DO口什么时候会输出高阻态?电压比较器的正极输入电压大于负极输入电压,而正极输入电压是光敏电阻分得的电压,光敏电阻的阻值越大,已分得的电压就越大,…...
240422 leetcode exercises
240422 leetcode exercises jarringslee 文章目录 240422 leetcode exercises[237. 删除链表中的节点](https://leetcode.cn/problems/delete-node-in-a-linked-list/)🔁节点覆盖法 [392. 判断子序列](https://leetcode.cn/problems/is-subsequence/)🔁…...
mybatis mapper.xml中使用枚举
重点:application.propertis配置类 #TypeEnumHandler 这个类的包名,不是全路径 mybatis.type-handlers-packagecom.fan.test.handler两个枚举类: public enum StatusEnum {DELETED(0),ACTIVE(1);private final int code;StatusEnum(int cod…...
【初级】前端开发工程师面试100题(二)
本题库共计包含100题,考察html,css,js,以及react,vue,webpack等基础知识掌握情况。 TypeScript篇 TypeScript和JavaScript有什么区别? TS是JS的超集,添加了静态类型系统,编译时检查类型错误,适合大型项目。interface和type有什么区别? interface主要用于描述对象形…...
Appium安装 -- app笔记
调试环境:JDK(java) SDK(android) Node.js 雷神模拟器(或 真机) Appium(Appium Server【内外件(dos内件、界面化工具)】、Appium Inspector) p…...
2025.04.23华为机考第一题-100分
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 星空探索者 问题描述 LYA是一位天文学爱好者,她拍摄了一张星空照片并将其数字化为二维亮度图。在这张图像中,每个像素点的值代表该位置的亮度。现在,LYA想要寻找特定亮度的星…...
【OpenGL】OpenGL学习笔记-1:VS2019配置OpenGL开发环境
在Visual Studio 2019中可以通过手动配置库文件或NuGet包管理器快速安装的方法配置OpenGL环境,详细步骤如下: 一、打开VS2019,创建新的控制台项目 二、方法一:手动配置GLEW/GLFW/GLAD库 GLFW是窗口管理和输入事件的基础设施&…...
集结号海螺捕鱼游戏源码解析(第二篇):水浒传捕鱼模块逻辑与服务器帧同步详解
本篇将全面解构“水浒传”子游戏的服务端核心逻辑、帧同步机制、鱼群刷新规则、客户端命中表现与服务器计算之间的协同方式,聚焦于 C 与 Unity3D 跨端同步的真实实现过程。 一、水浒传捕鱼模块资源结构 该模块包含三部分核心目录: 子游戏/game_shuihuz…...
从零到一实现 .NET Core 项目 + JWT 认证
知识文档:从零到一实现 .NET Core 项目 + JWT 认证 1. 知识点概述 本项目通过实现 JWT 身份验证,完成以下功能: 用户登录并生成 JWT Token。使用 [Authorize] 属性保护受控资源。测试登录和受保护资源访问的完整流程。JWT(JSON Web Token)是一种轻量级的认证机制,广泛用…...
【音视频】FFmpeg内存模型
FFmpeg内存模型 从现有的Packet拷贝一个新Packet的时候,有两种情况: 两个Packet的buf引用的是同一数据缓存空间,这时候要注意数据缓存空间的释放问题;两个Packet的buf引用不同的数据缓存空间,每个Packet都有数据缓存…...
QML 样式库
在 QML 中,样式库(或 UI 框架)用于快速构建一致且美观的界面。Qt/QML 本身不提供内置的完整样式库,但可以通过以下方式实现样式管理或使用第三方库。 1. Qt Quick Controls 2 样式系统 Qt Quick Controls 2 是官方提供的 UI 组件…...
小白自学python第一天
学习python的第一天 一、常用的值类型(先来粗略认识一下~) 类型说明数字(number)包含整型(int)、浮点型(float)、复数(complex)、布尔(boolean&…...
2022 年 9 月青少年软编等考 C 语言七级真题解析
目录 T1. 二叉树的深度T2. 迷宫思路分析T3. Sequence思路分析T4. Priority Queue 练习题思路分析T1. 二叉树的深度 题目链接:SOJ D1164 此题为 2022 年 3 月七级第三题原题,见 2022 年 3 月青少年软编等考 C 语言七级真题解析中的 T3。 T2. 迷宫 题目链接:SOJ D1213 一…...
手动实现LinkedList
前言 大家好,我是Maybe。最近在学习数据结构中的链表,自己手动实现了一个LinkedList。我想与大家分享一下。 思维导图 代码部分 package Constant;public class constant {public static final String INDEX_IS_WRONG"输入的下标不合法"; }p…...
maven的安装与配置、IDEA集成maven
一、maven的安装与配置环境变量 maven的下载与安装,配置环境变量与验证【附安装包3.6.1,3.8.8,3.9.9】-CSDN博客 参考资料:黑马程序员 二、IDEA集成 2.1 当前工程设置 1. 打开 Maven 设置路径:在 IDEA 中…...
