当前位置: 首页 > article >正文

CSS基础巩固-基础-选择

目录

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.lryc.cn/news/2397811.html

相关文章:

  • 一种在SQL Server中传递多行数据的方法
  • 【Docker 从入门到实战全攻略(一):核心概念 + 命令详解 + 部署案例】
  • github 提交失败,连接不上
  • 系统架构设计师(一):计算机系统基础知识
  • VMware安装Ubuntu全攻略
  • 清理 pycharm 无效解释器
  • 精益数据分析(92/126):指标基准化——如何判断你的数据表现是否足够优秀
  • 手机如何压缩文件为 RAR 格式:详细教程与工具推荐
  • Elasticsearch集群管理的相关工具介绍
  • 基于多尺度卷积和扩张卷积-LSTM的多变量时间序列预测
  • Java 注解式限流教程(使用 Redis + AOP)
  • C# XAML 基础:构建现代 Windows 应用程序的 UI 语言
  • Linux运维笔记:服务器感染 netools 病毒案例
  • (面试)获取View宽高的几种方式
  • 【Linux】进程地址空间揭秘(初步认识)
  • 设计模式——备忘录设计模式(行为型)
  • 吴恩达:构建自动化评估并不需要大量投入,从一些简单快速的示例入手,然后逐步迭代!
  • 鸿蒙OSUniApp内存管理优化实战:从入门到精通#三方框架 #Uniapp
  • Vue-5-基于JavaScript和plotly.js绘制数据分析类图表
  • UI自动化测试的革新,新一代AI工具MidScene.js实测!
  • StarRocks的几种表模型
  • 4. Qt对话框(2)
  • 2025-5-31-C++ 学习 字符串(终)
  • Android Studio 2022.2.1.20 汉化教程
  • 第17讲、odoo18可视化操作代码生成模块
  • golang -- slice 底层逻辑
  • SOC-ESP32S3部分:26-物联网MQTT连云
  • 从前端工程化角度解析 Vite 打包策略:为何选择 Rollup 而非 esbuild。
  • 三层架构 vs SOA vs 微服务:该选谁?
  • 制造业的未来图景:超自动化与劳动力转型的双重革命