CSS基础巩固-基础-选择

news2025/7/24 9:10:59

目录

CSS是如何工作的?

当浏览器遇到无法解析的CSS代码时

如何导入CSS样式?

改变元素的默认样式

选择

前缀符号(后面会具体介绍)

优先级

同时应用样式到多个类上

属性选择器

伪类

伪元素

关系选择器

后代选择器

子代选择器

邻接兄弟

通用兄弟


注:本文以学习 Web 开发 | MDN为基础

CSS是如何工作的?

不同的浏览器引擎会有不同的方式,但有一些步骤是基本都会出现:

1.浏览器引擎载入HTML文件

2.将HTML转为DOM(就是我在index.html文章里面说的对象树

3.接下来,浏览器会拉取HTML相关的大部分资源,比如嵌入到页面的图片、视频、CSS样式等等,JS则会在稍后处理

4.在浏览器拉取到CSS后会进行解析,根据选择器的不同类型(比如 element、class、id等等)把他们分到不同的“桶”中/浏览器基于它找到的不同的选择器,将不同的规则(基于选择器的类型,比如元素选择器、类选择器、id选择器等)应用到对应的DOM节点中,并添加节点依赖的样式(这个步骤称之为 渲染树 )

5.上述规则应用于渲染树之后,渲染树会依照应该出现的结构进行布局

6.着色:网页在屏幕上显示

(CSS选择器:用于选中HTML元素并对其应用样式的一种语法规则;JS中也有用于选择页面元素的选择器)

对于DOM的理解会很大程度帮助你设计、调试和维护你的CSS,因为DOM是你的CSS样式和文件内容的结合。当你使用浏览器F12调试的时候你需要操作DOM来查看使用了哪些规则

比如一个HTML文件是

<p>
  Let's use:
  <span>Cascading</span>
  <span>Style</span>
  <span>Sheets</span>
</p>

那么他的DOM是

P
├─ "Let's use:"
├─ SPAN
|  └─ "Cascading"
├─ SPAN
|  └─ "Style"
└─ SPAN
    └─ "Sheets"

在浏览器创造完DOM后,会解析CSS,可以看到唯一的选择器就是span元素选择器,

span {
  border: 1px solid black;
  background-color: lime;
}

当浏览器遇到无法解析的CSS代码时

什么都不会做,继续解析下一个CSS样式,也就是忽视错误部分

如何导入CSS样式?

和我在index里面说的一样:在开头通过 <link rel=" " href=" "> 来导入

样式化HTML元素

若要样式化一个文档中所有的段落,只需使用 选择器p 

比如HTML是

<h1>I am a level one heading</h1>

<p>This is a paragraph of text. In the text is a <span>span element</span>
and also a <a href="http://example.com">link</a>.</p>

<p>This is the second paragraph. It contains an <em>emphasized</em> element.</p>

<ul>
  <li>Item one</li>
  <li>Item two</li>
  <li>Item <em>three</em></li>
</ul>

CSS是

p,
h1 {
  color: blue;
}

p,
li {
  color: green;
}

得到

改变元素的默认样式

浏览器自带一个包含默认样式的样式表(比如标题会很大等等),如果我们对浏览器的默认样式不满意只需要选定那个元素,加一条CSS规则即可

想对一片区域内的元素应用样式

定义类 class

比如 <div class=" "> , <li class=" ">

选择

前缀符号(后面会具体介绍)

.                 类选择器(同一个类可以被多个元素使用,用于标识一组相似的元素)

#                ID选择器(一个页面只能有一个相同的ID)

无前缀        元素选择器

*                通用选择器

[ ]               属性选择器(比如 <div class="not box"> 会被 div[class~="box"] 选中,因为后面的选择器是匹配 class属性 中含有box单词的 div元素

:                伪类选择器

::                伪元素选择器

空格        后代选择器

>                子选择器

+                相邻兄弟选择器

~                通用兄弟选择器

优先级

!important声明 > 内联样式 > #ID > .类 > 元素 > *

同时应用样式到多个类上

逗号分隔

A,B{
}

属性选择器

[属性]                只要含有这个属性就匹配

[属性=“值"]        属性值等于值

[属性~="值"]        属性中包含某个词(空格分隔)

[属性|="值"]        属性以值开头或等于值

[属性^="值"]        属性以值开头

[属性$="值"]        属性值以“值”结尾

[属性*="值"]        属性值包含“值”(和~区别:不一定要空格分隔)

伪类

用于选择处于特定状态的现有元素

/* 状态伪类 */
a:hover { color: red; }           /* 鼠标悬停状态 */
input:focus { border: blue; }     /* 获得焦点状态 */
button:disabled { opacity: 0.5; } /* 禁用状态 */

/* 结构伪类 */
li:first-child { font-weight: bold; }  /* 第一个子元素 */
tr:nth-child(even) { background: #f0f0f0; } /* 偶数行 */

/* 内容伪类 */
p:empty { display: none; }        /* 空内容元素 */
div:not(.special) { color: black; } /* 排除特定类 */

伪元素

创建和样式化虚拟元素

伪元素并不会修改DOM,只是在渲染层面

/* 内容伪元素 */
.quote::before {
    content: """;
    font-size: 2em;
    color: #ccc;
}

.quote::after {
    content: """;
    font-size: 2em;
    color: #ccc;
}

/* 选择伪元素 */
p::first-line {
    font-weight: bold;
    color: blue;
}

p::first-letter {
    font-size: 2em;
    float: left;
}

/* 占位符伪元素 */
input::placeholder {
    color: #999;
    font-style: italic;
}

关系选择器

注意CSS解析是从右到左(在我的创业分析平台index.html 文章里面有样例)

后代选择器

空格

.box p {
  color: red;
}

子代选择器

子代关系选择器是个大于号(>),只会在选择器选中直接子元素的时候匹配。继承关系上更远的后代则不会匹配。例如,只选中作为<article>的直接子元素的<p>元素:

article > p

邻接兄弟

邻接兄弟选择器(+)用来选中恰好处于另一个在继承关系上同级的元素旁边的物件。例如,选中所有紧随<p>元素之后的<img>元素:

p + img

通用兄弟

如果你想选中一个元素的兄弟元素,即使它们不直接相邻,你还是可以使用通用兄弟关系选择器(~)。要选中所有的<p>元素后任何地方<img>元素,我们会这样做:

p ~ img

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

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

相关文章

一种在SQL Server中传递多行数据的方法

这是一种比较偷懒的方法&#xff0c;其实各种数据库对Json 支持的很好。sql server 、oracle都不错。所以可以直接传json declare 这是一个json varchar(max) set 这是一个json{"data":[{"code":"1","name":"啥1"},{"…

【Docker 从入门到实战全攻略(一):核心概念 + 命令详解 + 部署案例】

1. 是什么 Docker 是一个用于开发、部署和运行应用程序的开源平台&#xff0c;它使用 容器化技术 将应用及其依赖打包成独立的容器&#xff0c;确保应用在不同环境中一致运行。 2. Docker与虚拟机 2.1 Docker&#xff08;容器化&#xff09; 容器化是一种轻量级的虚拟化技术…

github 提交失败,连接不上

1. 第一种情况&#xff0c;开了加速器&#xff0c;导致代理错误 删除hosts文件里相关的github代理地址 2. 有些ip不支持22端口连接,改为443连接 ssh -vT gitgithub.com // 命令执行结果 OpenSSH_for_Windows_9.5p1, LibreSSL 3.8.2 debug1: C…

系统架构设计师(一):计算机系统基础知识

系统架构设计师&#xff08;一&#xff09;&#xff1a;计算机系统基础知识 引言计算机系统概述计算机硬件处理器处理器指令集常见处理器 存储器总线总线性能指标总线分类按照总线在计算机中所处的位置划分按照连接方式分类按照功能分类 接口接口分类 计算机软件文件系统文件类…

清理 pycharm 无效解释器

1. 起因&#xff0c; 目的: 经常使用 pycharm 来调试深度学习项目&#xff0c;每次新建虚拟环境&#xff0c;都是显示一堆不存在的名称&#xff0c;删也删不掉。 总觉得很烦&#xff0c;是个痛点。决定深入研究一下。 2. 先看效果 效果是能行&#xff0c;而且清爽多了。 3. …

手机如何压缩文件为 RAR 格式:详细教程与工具推荐

在如今这个数字化时代&#xff0c;手机已经成为我们生活中不可或缺的工具。随着我们使用手机的频率越来越高&#xff0c;手机中的文件也越来越多&#xff0c;照片、视频、文档等各种类型的文件不断占据着手机的存储空间。 据统计&#xff0c;普通用户的手机存储空间中&#xf…

Java 注解式限流教程(使用 Redis + AOP)

Java 注解式限流教程&#xff08;使用 Redis AOP&#xff09; 在上一节中&#xff0c;我们已经实现了基于 Redis 的请求频率控制。现在我们将进一步升级功能&#xff0c;使用 Spring AOP 自定义注解 实现一个更优雅、可复用的限流方式 —— 即通过 RateLimiter 注解&#xf…

C# XAML 基础:构建现代 Windows 应用程序的 UI 语言

在现代 Windows 应用程序开发中&#xff0c;XAML (eXtensible Application Markup Language) 扮演着至关重要的角色。作为一种基于 XML 的声明性语言&#xff0c;XAML 为 WPF (Windows Presentation Foundation)、UWP (Universal Windows Platform) 和 Xamarin.Forms 应用程序提…

【Linux】进程地址空间揭秘(初步认识)

10.进程地址空间&#xff08;初步认识&#xff09; 文章目录 10.进程地址空间&#xff08;初步认识&#xff09;一、进程地址空间的实验现象解析二、进程地址空间三、虚拟内存管理补充&#xff1a;数据的写时拷贝&#xff08;浅谈&#xff09;补充&#xff1a;页表&#xff08;…

设计模式——备忘录设计模式(行为型)

摘要 备忘录设计模式是一种行为型设计模式&#xff0c;用于在不破坏封装性的前提下&#xff0c;捕获对象的内部状态并在需要时恢复。它包含三个关键角色&#xff1a;原发器&#xff08;Originator&#xff09;、备忘录&#xff08;Memento&#xff09;和负责人&#xff08;Car…

UI自动化测试的革新,新一代AI工具MidScene.js实测!

前言 AI已经越来越深入地走入我们的实际工作,在软件测试领域,和AI相关的新测试工具、方法也层出不穷。在之前我们介绍过结合 mcp server 实现 AI 驱动测试的案例,本文我们将介绍一个近期崭露头角的国产AI测试工具 Midscene.js Midscene.js简介 MidScene.js 是由字节跳动 w…

4. Qt对话框(2)

在上节中已经学习了对话框的确认和取消&#xff0c;本节内容继续接上节完成登录对话框实例并得到登录信息。 本文部分ppt、视频截图原链接&#xff1a;[萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频] 1 实现登录对话框 1.1 功能需要 得到登录信息&#xff0c;需要…

Android Studio 2022.2.1.20 汉化教程

查看Android Studio 版本 Android Studio Flamingo | 2022.2.1 Patch 2 下载&#xff1a;https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack----/versions/stable

golang -- slice 底层逻辑

目录 一、前言二、结构三、创建3.1 根据 make创建3.2 通过数组创建 四、内置append追加元素4.1 追加元素4.2 是否扩容4.2.1 不扩容4.2.2 扩容 总结 一、前言 前段时间学了go语言基础&#xff0c;过了一遍之后还是差很多&#xff0c;所以又结合几篇不同资料重新学习了一下相关…

SOC-ESP32S3部分:26-物联网MQTT连云

飞书文档https://x509p6c8to.feishu.cn/wiki/IGCawAgqFibop7kO83KcsDFBnNb ESP-MQTT 是 MQTT 协议客户端的实现&#xff0c;MQTT 是一种基于发布/订阅模式的轻量级消息传输协议。ESP-MQTT 当前支持 MQTT v5.0。 特性 支持基于 TCP 的 MQTT、基于 Mbed TLS 的 SSL、基于 WebSo…

制造业的未来图景:超自动化与劳动力转型的双重革命

市场现状&#xff1a;传统制造业的转型阵痛 当前全球制造业正站在历史性变革的十字路口。埃森哲对552位工厂经理的全球调研显示&#xff0c;60%的受访者将劳动力转型视为首要战略任务​​&#xff0c;而63%的工厂正在加速部署自动化技术[1]。超过​75%的工厂经理​​认为&…

【Unity】相机 Cameras

1 前言 主要介绍官方文档中相机模块的内容。 关于“9动态分辨率”&#xff0c;这部分很多API文档只是提了一下&#xff0c;具体细节还需要自己深入API才行。 2 摄像机介绍 Unity 场景在三维空间中表示游戏对象。由于观察者的屏幕是二维屏幕&#xff0c;Unity 需要捕捉视图并将…

如何在 Solana 上发币,并创建初始流动性让项目真正“动”起来?

在 Solana 上发行代币如今已不再是技术门槛&#xff0c;而是市场策略和执行效率的较量。如果你只是简单发了一个代币&#xff0c;却没为它建立流动性和市场机制&#xff0c;那么它就只是一个“死币”。 本文将带你一步步理解&#xff0c;如何从发币到建立流动性池&#xff0c;…

核心机制:滑动窗口

TCP 协议 1.确认应答 可靠传输的核心机制 2.超时重传 可靠传输的核心机制 3.连接管理 TCP/网络 最高的面试题 三次握手,建立连接(必须是 三次) 四次挥手,断开连接(可能是 三次) 核心机制四:滑动窗口 算法中的"滑动窗口" 出自 TCP 前面的三个…

苹果电脑深度清理,让老旧Mac重焕新生

在日常使用苹果电脑的过程中&#xff0c;随着时间推移&#xff0c;系统内会积累大量冗余数据&#xff0c;导致电脑运行速度变慢、磁盘空间紧张。想要让设备恢复流畅&#xff0c;苹果电脑深度清理必不可少。那么&#xff0c;如何进行苹果电脑深度清理呢&#xff1f;接下来为你详…