CSS 选择器入门

一、CSS 选择器基础:快速掌握核心概念

  1. 什么是选择器?
    CSS 选择器就像 “网页元素的遥控器”,用于定位 HTML 中的特定元素并应用样式。

    /* 结构:选择器 { 属性: 值; } */
    p { color: red; }  /* 选择所有<p>元素,文字变红 */
    
  2. 元素选择器(标签选择器)

    • 直接用 HTML 标签名作为选择器(如 divh1a)。
    • 作用于页面中所有该类型的元素。
    h2 { font-size: 20px; }  /* 所有<h2>标题字体大小为20px */
    img { border: 1px solid gray; }  /* 所有图片添加边框 */
    
  3. 类选择器(Class Selector)

    • 通过元素的 class 属性匹配,可复用(一个元素可拥有多个类)。
    • 命名规则
      • 必须以 . 开头(如 .highlight)。
      • 只能包含字母、数字、连字符(-)、下划线(_)。
      • 不能以数字开头,不能包含空格。
      <!-- HTML -->
      <p class="error-message">这是错误提示</p>
      
       
      /* CSS */
      .error-message { color: red; }  /* 所有class="error-message"的元素变红 */
      .btn-primary { background: blue; }  /* 主按钮样式 */
      
  4. ID 选择器

    • 通过元素的 id 属性匹配,必须唯一(一个页面中不能重复)。
    • 命名规则与类相似,但以 # 开头(如 #header)。
    <!-- HTML -->
    <div id="main-content">内容区域</div>
    
    /* CSS */
    #main-content { width: 800px; }  /* id="main-content"的元素宽度为800px */
    
  5. 通配符选择器(*

    • 匹配所有元素,常用于全局样式重置。
    * { margin: 0; padding: 0; }  /* 所有元素的边距重置为0 */
    
二、组合选择器:多条件筛选元素
  1. 后代选择器(空格分隔)

    • 选择某个元素内部的所有后代元素(无论嵌套多深)。
    article p { line-height: 1.6; }  /* 所有<article>内的<p>元素行高为1.6 */
    
  2. 子选择器(>`)

    • 只选择某个元素的直接子元素(一级子元素)。
    nav > ul { background: lightgray; }  /* 导航栏(nav)的直接子元素<ul>添加背景色 */
    
  3. 相邻兄弟选择器(+

    • 选择紧接在另一个元素后的同级元素。
    h3 + p { margin-top: 10px; }  /* 每个<h3>后的第一个<p>元素顶部边距为10px */
    
  4. 通用兄弟选择器(~

    • 选择前面某个元素后的所有同级元素
    img ~ figcaption { font-style: italic; }  /* 每个<img>后的所有<figcaption>变斜体 */
    
三、属性选择器:按元素属性筛选

通过元素的属性或属性值来选择元素。

[disabled] { opacity: 0.5; }  /* 所有带disabled属性的元素透明度降低 */
a[target="_blank"] { color: purple; }  /* 所有打开新窗口的链接变紫色 */
input[type="email"] { border-color: blue; }  /* 邮箱输入框边框变蓝 */
四、伪类选择器(Pseudo-classes)

定义:伪类用于选择处于特定状态或位置的元素,以冒号 : 开头。

1. 动态伪类(用户交互状态)
a:hover { color: red; }          /* 鼠标悬停时链接变红 */
button:active { background: blue; } /* 按钮被点击时背景变蓝 */
input:focus { outline: 2px solid green; } /* 输入框获得焦点时显示绿色边框 */
a:visited { color: purple; }     /* 已访问链接变紫色 */
2. 结构伪类(位置关系)
li:first-child { font-weight: bold; }      /* 第一个列表项加粗 */
li:last-child { border-bottom: none; }     /* 最后一个列表项去掉下边框 */
p:nth-child(even) { background: #f0f0f0; } /* 偶数位置的段落添加浅灰色背景 */
p:nth-child(3) { color: blue; }            /* 第三个段落变蓝色 */
p:nth-of-type(odd) { font-style: italic; } /* 奇数位置的<p>元素变斜体 */
3. 逻辑伪类(条件筛选)
:not(.highlight) { opacity: 0.8; }         /* 非.highlight类的元素透明度降低 */
input:required { border: 1px solid red; }  /* 必填字段添加红色边框 */
input:disabled { background: #eee; }       /* 禁用的输入框添加灰色背景 */
4. 目标伪类(URL 锚点)
:target { background: yellow; }            /* 当前URL锚点对应的元素高亮 */
五、伪元素选择器(Pseudo-elements)

定义:伪元素用于选择元素的特定部分(如首字母、内容前后插入的虚拟元素),以双冒号 :: 开头(单冒号也兼容)。

1. 内容插入伪元素
p::before {content: "▶ ";           /* 在每个<p>元素前插入箭头符号 */color: red;
}p::after {content: " ✅";          /* 在每个<p>元素后插入对勾符号 */
}blockquote::before {content: open-quote;    /* 插入左引号 */font-size: 2em;
}
2. 文本片段伪元素
p::first-letter {font-size: 2em;         /* 段落首字母放大 */font-weight: bold;float: left;margin-right: 5px;
}p::first-line {color: blue;            /* 段落首行变蓝色 */
}
3. 选中状态伪元素
::selection {background: purple;     /* 用户选中文本时的背景色 */color: white;           /* 用户选中文本时的文字颜色 */
}
4. 输入框占位符伪元素
input::placeholder {color: #999;            /* 输入框占位文本变灰色 */font-style: italic;
}
六、选择器优先级:解决样式冲突

当多个选择器作用于同一元素时,优先级由高到低:

  1. 内联样式(如 <div style="color: red">
  2. ID 选择器(#id)
  3. 类 / 属性 / 伪类选择器(.class, [attr], :hover)
  4. 元素 / 伪元素选择器(p, ::before)
  5. 通配符(*)

记忆口诀

  • ID(最高) → Class → Element(最低),简称 ICE 原则
  • 相同优先级时,后定义的样式生效。
  • !important 可强制提升优先级(但尽量避免使用)。
七、初学者常见误区
  1. 滥用 ID 选择器
    ID 必须唯一,应优先使用类选择器实现复用。

  2. 过度嵌套选择器
    避免深层后代选择器(如 div ul li a),优先使用类直接定位。

  3. 忽略继承
    颜色、字体等属性会自动继承,无需为每个元素重复定义。

八、实战练习:选择器应用场景
<!-- HTML 示例 -->
<header class="site-header"><nav><ul><li><a href="#" class="active">首页</a></li><li><a href="#">产品</a></li></ul></nav>
</header>
/* CSS 选择器示例 */
.site-header { background: #333; }  /* 类选择器 */
nav ul { list-style: none; }       /* 后代选择器 */
nav > ul > li { display: inline-block; }  /* 子选择器 */
a.active { color: white; }         /* 组合类选择器 */

总结:选择器是 CSS 的基石

通过系统学习选择器,你可以精准控制网页的每一个元素。建议结合实际项目练习,加深对不同选择器的理解和运用。

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

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

相关文章

Anaconda3安装教程(附加安装包)Anaconda详细安装教程Anaconda3 最新版安装教程

多环境隔离 可同时维护生产环境、开发环境、测试环境&#xff0c;例如&#xff1a; conda create -n ml python3.10 # 创建机器学习环境 conda activate ml # 激活环境三、Anaconda3 安装教程 解压Anaconda3安装包 找到下载的 Anaconda3 安装包&#xff08;.ex…

现代计算机图形学Games101入门笔记(十七)

双向路径追踪 外观建模 散射介质 人的头发不能用在动画的毛发上。 动物的髓质Medulla特别大 双层圆柱模型应用 BSSRDF是BRDF的延伸。 天鹅绒用BRDF不合理&#xff0c;转成散射介质。 法线分布 光追很难处理微表面模型 光在微型细节上&#xff0c;光是一个波&#xff0c;会发生衍…

chrome源码中WeakPtr 跨线程使用详解:原理、风险与最佳实践

base::WeakPtr 在 Chromium 中 不能安全地跨线程使用。这是一个很关键的点&#xff0c;下面详细解释原因及正确用法。 &#x1f50d;原理与使用 ✅ 先说答案&#xff1a; base::WeakPtr 本质上是**线程绑定&#xff08;thread-affine&#xff09;**的。不能在多个线程之间创建…

hysAnalyser 从MPEG-TS导出ES功能说明

摘要 hysAnalyser 是一款特色的 MPEG-TS 数据分析工具。本文主要介绍了 hysAnalyser 从MPEG-TS 中导出选定的 ES 或 PES 功能(版本v1.0.003)&#xff0c;以便用户知悉和掌握这些功能&#xff0c;帮助分析和解决各种遇到ES或PES相关的实际问题。hysAnalyser 支持主流的MP1/MP2/…

C++(21):fstream的读取和写入

目录 1 ios::out 2 ios::in和is_open 3 put()方法 4 get()方法 4.1 读取单个字符 4.2 读取多个字符 4.3 设置终结符 5 getline() 1 ios::out 打开文件用于写入数据。如果文件不存在&#xff0c;则新建该文件&#xff1b;如果文件原来就存在&#xff0c;则打开时清除…

系统架构设计(十七):微服务数据一致性和高可用策略

数据一致性问题 问题本质 由于每个微服务拥有独立数据库&#xff0c;跨服务操作不能用传统的数据库事务&#xff0c;面临“分布式事务”一致性挑战。 数据一致性策略 策略核心思想应用场景优缺点强一致性&#xff08;Strong Consistency&#xff09;所有操作实时同步成功&a…

os agent智能体软件 - 第三弹 - 纯语音交互

前两期期我们发布了产品的初级形态&#xff0c;那时候还只能是“软件开发者”在本地配置使用&#xff0c;或者运行起来有个大黑框&#xff0c;使用起来美观度太差。 到今天大概20天&#xff0c;我们的第3版已经出来了&#xff0c;不仅做成了电脑端的exe软件&#xff08;任何人…

链表原理与实现:从单链表到LinkedList

1.链表的概念及结构 链表是一种物理存储结构上非连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。 可以形象的理解&#xff0c;在逻辑上来看&#xff0c;链表就像是一节节火车车厢。 链表的分类&#xff1a;链表的结构有很多种&#xff0c;单向…

替换word中的excel

PostMapping("/make/report/target/performance/first") public AjaxResult makeTargetReportFirst(RequestBody MakeReportDTO makeReportDTO) {Map<String, String> textReplaceMap new HashMap<>();// 替换日期LocalDateTime nowData LocalDateTime…

深入探索百度智能云千帆AppBuilder:从零开始构建AI应用

在数字化转型的浪潮中&#xff0c;企业对高效、智能的应用开发平台的需求日益增长。百度智能云千帆AppBuilder&#xff08;以下简称AppBuilder&#xff09;凭借其强大的功能和灵活的开发方式&#xff0c;成为企业级大模型应用开发的理想选择。本文将详细介绍如何使用AppBuilder…

测试工程师要如何开展单元测试

单元测试是软件开发过程中至关重要的环节&#xff0c;它通过验证代码的最小可测试单元(如函数、方法或类)是否按预期工作&#xff0c;帮助开发团队在早期发现和修复缺陷&#xff0c;提升代码质量和可维护性。以下是测试工程师开展单元测试的详细步骤和方法&#xff1a; 一、理…

NODE-I916 I721模块化电脑发布,AI算力与超低功耗的完美平衡

在智能工业与边缘计算蓬勃发展的今天&#xff0c;企业对计算设备的性能与能效需求日益严苛。全新推出NODE-I916与NODE-I721模块化电脑&#xff0c;分别搭载英特尔 酷睿™ Ultra 平台与Alder Lake-N平台&#xff0c;以差异化CPU配置为核心&#xff0c;为AI推理、工业自动化及嵌入…

采集需要登录网站的教程

有些网站需要用户登录才能显示相关信息&#xff0c;如果要采集这类网站&#xff0c;有以下几个方法&#xff1a; 1. 写发布模块来抓包获取post的数据&#xff1b; 2. 有些采集器内置浏览器获取这些信息&#xff0c;但是经常获取的不准确&#xff0c;可靠性太低&#xff1b; 3. …

六足连杆爬行机器人的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序 4.系统原理简介 5.完整工程文件 1.课题概述 六足连杆爬行机器人的simulink建模与仿真。通过simulink&#xff0c;对六足机器人的六足以及机身进行simulink建模&#xff0c;模拟其行走&#xff0c;仿真输出机器人行走时六足的坐…

什么是物联网 (IoT):2024 年物联网概述

物联网&#xff08;IoT&#xff09;是一个有望彻底改变我们生活、工作以及与环境互动方式的概念。如今&#xff0c;越来越多的新兴企业和老牌企业都在利用物联网的力量创造创新产品与服务。正因为这一转变&#xff0c;互联互通已成为我们生活中不可或缺的一部分&#xff0c;科技…

MVC入门(5)-- HttpMessageConverter 消息转换器

概念 HttpMessageConverter 是 Spring 框架中用于处理 HTTP 请求和响应数据的核心接口&#xff0c;负责在 Java 对象与 HTTP 消息体&#xff08;请求体或响应体&#xff09;之间进行双向转换。简单来说&#xff0c;它是 Spring 用来将 HTTP 请求中的原始数据&#xff08;如 JS…

Spark,连接MySQL数据库,添加数据,读取数据

以下是使用Spark连接MySQL数据库、添加数据和读取数据的步骤&#xff08;基于Scala API&#xff09;&#xff1a; 1. 准备工作 - 添加MySQL驱动依赖 在Spark项目中引入MySQL Connector JAR包&#xff08;如 mysql-connector-java-8.0.33.jar &#xff09;&#xff0c;或通过Sp…

关于 APK 反编译与重构工具集

一、apktool — APK 解包 / 重打包 apktool 是一款开源的 Android APK 工具&#xff0c;用于&#xff1a; 反编译 APK 查看资源和布局文件 生成 smali 文件&#xff08;DEX 的反汇编&#xff09; 对 APK 进行修改后重新打包 它不能还原 Java 源码&#xff0c;只能将 D…

[解决方案] Word转PDF

背景&#xff1a; 之前做过一些pdf导出&#xff0c; 客户提了一个特别急的需求&#xff0c; 要求根据一个模版跟一个csv的数据源&#xff0c; 批量生成PDF&#xff0c; 因为之前用过FOP&#xff0c; 知道调整样式需要特别长的时间&#xff0c; 这个需求又特别急&#xff0c; 所…

01 基本介绍及Pod基础

01 查看各种资源 01-1 查看K8s集群的内置资源 [rootmaster01 ~]# kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KIND bindings v1 …