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

前端(四)css选择器、css的三大特性

css选择器、css的三大特性

文章目录

  • css选择器、css的三大特性
  • 一、css介绍
  • 二、css选择器
    • 2.1 基本选择器
    • 2.2 组合选择器
    • 2.3 交集并集选择器
    • 2.4序列选择器
    • 2.5属性选择器
    • 2.6伪类选择器
    • 2.7伪元素选择器
  • 三、css三大特性
    • 3.1 继承性
    • 3.2 层叠性
    • 3.3 优先级

一、css介绍

CSS全称为Cascading Style Sheet层叠样式表,是专门用来为HTML标签添加样式的。样式指的是HTML标签的显示效果,比如换行、宽高、颜色等等。
在没有css以前html的样式都需要在每个标签后面设置属性,这样非常的繁琐,有了scc以后只需要完成统一的样式设置就可以批量化的设置标签的样式。

css引入有四种方式:

#内行式
<p style="color:red">hello</p>#嵌入式
<head><style>p{color: red;}</style>
</head>
<body><p>hello</p>
</body>#导入式
#css文件中为p{color: red;}
<head><style>@import "css/mystyle.css";#或者@import url("css/mystyle.css");</style>
</head>
<body><p>hello</p>
</body>#外链式
#css文件中为p{color: red;}
<head><link rel="stylesheet" href="css/mystyle.css">
</head>
<body><p>hello</p>
</body>

导入式的方式存在一些问题:

  • 导入式是css2.1特有的,对于不兼容css2.1的浏览器来说就是无效的
  • 导入式会先加载页面,再加载样式,因此如果页面内容很大,可能会先出现无样式的页面,隔一段时间再出现完整的页面从而降低用户体验

在css中可以使用如下的方式进行注释:

/*这是注释*/

二、css选择器

选择器的目的是通过某种方式选中标签从而完成对标签样式的修改。

2.1 基本选择器

id选择器以#开头,p1为标签的id名。但需要注意的是id名是唯一的,标签的id名不能重复,因此id资源十分珍贵,一般留给js代码使用,css样式不推荐使用。另外id名由字母、数字、部分特殊字符组成,且不能以数字开头,更不能是html关键字如p,a,img。

<!--id选择器-->
<style>#p1{color: red;}
</style>

类选择器以.开头,p1为标签的类名。类名的命名规则和id相同,一个标签可以有多个类,例如<p class=“p1 p2”></p>。

<!--类选择器-->
<style>.p1{color: red;}
</style>

标签选择器只需直接写标签名即可。标签选择器会选择页面所有相同类型的标签,但是只有html的标签才能作为标签选择器。

<!--标签选择器-->
<style>p{color: red;}
</style>

通配符选择器可以选中页面的所有标签,需要注意的是通配符选择器使用时会遍历页面的所有标签,如果页面内容非常大,会导致效率降低的问题。

<!--通配符选择器-->
<style>*{color: red;}
</style>

2.2 组合选择器

后代选择器以空格作为间隔,空格前后可以是基本选择器的任意一种。后代选择器可以选中某个标签的所有满足要求的子标签,如下代码中后代选择器选中的是类为p1的标签中子标签为p并且子标签p中所有id为p2的子标签。

<!--后代选择器-->
<style>.p1 p #p2{color: red;}
</style>

相邻选择器以+号作为间隔,+前后可以是基本选择器的任意一种。相邻选择器的作用是选择某个标签相邻的下一个标签,如下代码中相邻选择器选中的是类为p1的标签相邻的下一个p标签。

<!--相邻选择器-->
<style>.p1+p{color: red;}
</style>

下级选择器以>作为间隔,>前后可以是基本选择器的任意一种。下级选择器可以选中某个标签下一层嵌套中满足要求的子标签,如下代码中下级选择器选中的是类为p1的标签中下一层嵌套中子标签为p并且子标签p中的下一层嵌套的所有id为p2的子标签。

<!--下级选择器-->
<style>.p1>p>#p2{color: red;}
</style>

向后选择器以作为间隔,前后可以是基本选择器的任意一种。向后选择器可以选中某标签后面所有满足要求的标签。如下代码中向后选择器选中的是类为p1的标签后面所有的p标签。

<!--向后选择器-->
<style>.p1~p{color: red;}
</style>

2.3 交集并集选择器

交集并集选择器前后同样可以为基本选择器的任意一种。
交集选择器将多个基本选择器连在一起写(不过有标签选择器的话,标签选择器要写在前面),其功能是选中满足多个条件的标签,如下代码中交集选择器选中的是标签为p且类为p1,p2的标签。

<!--交集选择器-->
<style>p.p1.p2{color: red;}
</style>

并集选择器将多个基本选择器用,分隔写在一块,其功能是选中多个标签,如下代码中并集选择器选中的是所有p标签或者类为p1的标签或者类为p2的标签。

<!--并集选择器-->
<style>p,.p1,.p2{color: red;}
</style>

2.4序列选择器

序列选择器可以加在任何基本选择器后面作用是给基本选择器一个筛选条件。

<!--选中所有层级中第一个且为p的标签-->
p:first-child
<!--选中所有层级中最后一个且为p的标签-->
p:last-child
<!--选中所有层级中正数第n个且为p的标签-->
p:nth-child(n)
<!--选中所有层级中倒数第n个且为p的标签-->
p:nth-last-child(n)
<!--选中所有层级中的第一个p标签-->
p:first-of-type
<!--选中所有层级中的最后一个p标签-->
p:last-of-type
<!--选中所有层级中正数第n个p标签-->
p:nth-of-type(n)
<!--选中所有层级中倒数第n个p标签-->
p:nth-last-of-type(n)
<!--选中所有层级中只有一个标签且为p-->
p:only-child
<!--选中所有层级中只有一个p标签-->
:only-of-type

2.5属性选择器

属性选择器的地位相当于基本选择器,可以代替上面选择器中需要使用基本选择器的位置。
属性选择器会把属性中的内容作为字符串对其进行匹配,=表示完全匹配,*表示含有,^表示以其开头,$表示以其结尾。

<!--选中含有class属性的标签-->
[class]
<!--选中class中完全匹配为p1的标签-->
[class="p1"]
<!--选中class中含有p1字符的标签-->
[class*="p1"]
<!--选中class中以p1字符开头的标签-->
[class^="p1"]
<!--选中class中以p1字符结尾的标签-->
[class$="p1"]
<!--选中a标签且a标签中的href属性以https字符开头,这本质是a的标签选择器和属性选择器经过交集选择器拼接在了一起-->
a[href^="https"]

2.6伪类选择器

<!--a标签初始状态文字颜色为红色-->
a:link{color: red;}
<!--a标签被访问过后文字颜色为蓝色-->
a:visited {color: blue;}
<!--鼠标悬停a标签上时背景颜色为绿色-->
a:hover {background-color:green;}
<!--鼠标点击a标签时文字颜色为黄色-->
a:active {color: yellow;}
<!--input文本框聚集时框线消失,背景颜色为粉色-->
input:focus{outline: none;background-color:pink;}

a标签的伪类选择器可以单独出现,也可以一起出现,一起出现时有严格的顺序要求:link,visited,hover,active。
hover是所有其他标签都可以使用的,focus只给input标签使用。

2.7伪元素选择器

<!--选中p标签的首个字母,常用于杂志类文字首字母的调节大小-->
p:first-letter {font-size: 48px;}
<!--p标签内容前面插入新内容,且文本颜色为红色-->
p:before {content: "*";color: red;}
<!--p标签内容后面插入新内容,且文本颜色为红色-->
p:after {content: "?";color: red;}

选择器的组合使用示例:p .p1:first-child~#qq:last-child,div+[class]:last-child p[class$=qq]

三、css三大特性

3.1 继承性

继承性指子标签可以继承父标签的样式,但是只有以color、font-、text-、line-开头的属性才可以继承,a标签的文字颜色和下划线是不能继承别人的,h标签的文字大小是不能继承别人的,如果继承则会在原来字体大小的基础上变大。

3.2 层叠性

层叠性是指如果多个选择器选中了同一个标签且设置的属性产生冲突时会有覆盖效果。例如打开浏览器开发者面板时会看到有效属性被划掉了。

3.3 优先级

当多个选择器选中同一标签且设置的属性产生冲突时,就会涉及到优先级的问题了。
优先级遵守以下的规则:

  • 行内式>嵌入式和外部式(引入css文件的样式)。
  • 直接选中 > 间接选中(即继承而来的)。
  • 如果都是间接选中,那么谁离目标标签比较近,就用谁的。
  • 如果都是直接选中,并且都是同类型的选择器,那么谁写的在后面就用谁的。
  • 如果都是直接选中,并且是不同类型的选择器,那么id > 类 > 标签 > 通配符(也算直接选中) > 继承 > 浏览器默认(即没有设置任何属性)。
  • 如果都是直接选中,并且混杂了一系列其他的选择器一起使用时,则需要通过计算机权重来判定优先级:id数多的优先级高;id数相同,则判定类数多的优先级高;id数、class数均相同,则判定标签数多的优先级高;若id数、class数、标签数均相同,则无需继续往下计算了,谁写在后面谁的优先级高。

另外可以通过important将优先级提升到最高,但是这种方法容易产生代码难以维护的问题。

.p1{color:red !important;}

相关文章:

前端(四)css选择器、css的三大特性

css选择器、css的三大特性 文章目录 css选择器、css的三大特性一、css介绍二、css选择器2.1 基本选择器2.2 组合选择器2.3 交集并集选择器2.4序列选择器2.5属性选择器2.6伪类选择器2.7伪元素选择器 三、css三大特性3.1 继承性3.2 层叠性3.3 优先级 一、css介绍 CSS全称为Casca…...

vscode 打开 setting.json

按下Ctrl Shift P&#xff08;Windows/Linux&#xff09;或Cmd Shift P&#xff08;Mac&#xff09;来打开命令面板。输入open settings&#xff0c;然后选择 Open User Settings(JSON)。打开settings.json文件 ------修改设置-----&#xff1a; 1、 html代码的行长度&am…...

关于网络安全攻防演化博弈的研究小议

1. 拉高视角&#xff0c;从宏观看网络安全攻防 伴随着信息化的发展&#xff0c;网络安全的问题就一直日益突出&#xff0c;与此同时&#xff0c;网络安全技术也成为研究热点&#xff0c;直到今日也没有停止。 从微观来看&#xff0c;网络安全技术研究指的是针对某项或某几项…...

【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(7)

1.问题描述&#xff1a; 推送通知到手机&#xff0c;怎么配置拉起应用指定的页面&#xff1f; 解决方案&#xff1a; 1、如果点击通知栏打开默认Ability的话&#xff0c; actionType可以设置为0&#xff0c; 同时可以在.clickAction.data中&#xff0c;指定待跳转的page页面…...

远程桌面防护的几种方式及优缺点分析

远程桌面登录是管理服务器最主要的方式&#xff0c;于是很多不法分子打起了远程桌面的歪心思。他们采用暴力破解或撞库的方式破解系统密码&#xff0c;悄悄潜入服务器而管理员不自知。 同时远程桌面服务中的远程代码执行漏洞也严重威胁着服务器的安全&#xff0c;攻击者可以利…...

ASP.NET|日常开发中连接Sqlite数据库详解

ASP.NET&#xff5c;日常开发中连接Sqlite数据库详解 前言一、安装和引用相关库1.1 安装 SQLite 驱动1.2 引用命名空间 二、配置连接字符串2.1 连接字符串的基本格式 三、建立数据库连接3.1 创建连接对象并打开连接 四、执行数据库操作4.1 创建表&#xff08;以简单的用户表为例…...

python的自动化seleium安装配置(包含谷歌的chromedriver)

目录 前言介绍 一、下载谷歌浏览器chromedriver (一)查看谷歌浏览器版本 (二)去官网下载谷歌驱动(chromdriver) (三)谷歌浏览器安装位置解压 (四)配置环境变量 二、pychram里下载安装selenium 三、测试selenium是否成功 前言介绍 Selenium是一个开源的自动化测试工具&…...

QT requested database does not belong to the calling thread.线程中查询数据报错

QT requested database does not belong to the calling thread.线程中查询数据报错 QString name "ttx"; QSqlQueryModel* sql_model; QString sql_comm QString("select * from dssb_moddve_loddt_tab where name%1").arg(name); sql_model->set…...

服务器一般装什么系统?

在服务器管理中&#xff0c;操作系统的选择是一个关键因素&#xff0c;它直接影响到服务器的稳定性、性能和可维护性。那么为什么有些服务器选择Linux&#xff0c;而不是Windows&#xff1f;选择合适的操作系统对服务器的性能和安全性有多么重要&#xff1f; 在众多操作系统中…...

Linux vi/vim 编辑器使用教程

Linux vi/vim 编辑器使用教程 引言 Linux 系统中的 vi 和 vim 是非常强大的文本编辑器&#xff0c;它们以其高效性和灵活性而闻名。vim 是 vi 的增强版&#xff0c;提供了更多的功能和改进的用户界面。本文将详细介绍 vi/vim 的基本用法&#xff0c;包括打开文件、编辑文本、…...

JavaEE多线程案例之阻塞队列

上文我们了解了多线程案例中的单例模式&#xff0c;此文我们来探讨多线程案例之阻塞队列吧 1. 阻塞队列是什么&#xff1f; 阻塞队列是⼀种特殊的队列.也遵守"先进先出"的原则. 阻塞队列是⼀种线程安全的数据结构,并且具有以下特性: 当队列满的时候,继续⼊队列就会…...

梳理你的思路(从OOP到架构设计)_基本OOP知识04

目录 1、 主动型 vs.基於被动型 API 1&#xff09;卡榫函数实现API 2&#xff09;API的分类 3&#xff09;回顾历史 4&#xff09;API >控制力 2、 结语&复习&#xff1a; 接口与类 1&#xff09;接口的表示 2&#xff09;Java的接口表示 1、 主动型 vs.基於被动…...

nginx反向代理(负载均衡)

nginx的代理 代理 四层代理 七层代理 正向代理和缓存的配置方式 &#x1f42d;&#x1f42e;&#x1f42f;&#x1f430;&#x1f409;&#x1f40d;&#x1f434;&#x1f411;&#x1f412;&#x1f414;&#x1f436;&#x1f437; 反向代理》负载均衡 负载均衡&#xff…...

Android系统应用主要模块

设置 Android Settings开发总结 Launcher Android Launcher开发学习总结 System UI Android SystemUI 学习总结...

【万字详解】三维重建(二)——NeRF、NeuS、MeshUDF、NeuralUDF、3DGS、GShell

文章目录 一、NeRF:Representing Scenes as Neural Radiance Fields for View Synthesis(推荐读)1.1 式1 神经网络的输入和输出1.2 式2 体素渲染算法1.3 式3 损失函数1.4 位置编码1.5 基本原理二、经典的重建流程2.1 传统的三维重建pipeline2.2 神经网络回归2.3 可微渲染最优…...

【RK3588 Linux 5.x 内核编程】-内核线程与Seqlock

内核线程与Seqlock 文章目录 内核线程与Seqlock1、Seqlock介绍2、Seqlock相关API2.1 初始化2.2 写操作2.3 读操作3、驱动实现4、驱动验证在前面的文章中,我们介绍了 Mutex、Spinlock、Read/Write Spinlock 的使用及其实现。 它们都用于保护共享资源不被两个或多个进程同时修改…...

访问者模式的理解和实践

在软件开发过程中&#xff0c;设计模式为我们提供了解决常见问题的最佳实践。访问者模式&#xff08;Visitor Pattern&#xff09;是行为设计模式之一&#xff0c;它将数据操作与数据结构分离&#xff0c;使得在不修改数据结构的前提下&#xff0c;能够定义作用于这些元素的新的…...

在Scala中对Map函数的使用

package pp28{object cscc {def main(args: Array[String]): Unit {val m1 Map("马云 — 阿里巴巴" -> 1964,"马化腾 — 腾讯" -> 1971,"李彦宏 - 百度" -> 1968,"雷军 - 小米" -> 1969,"丁磊 - 网易" -> …...

PyTorch基本使用-张量的索引操作

在操作张量时&#xff0c;经常要去获取某些元素进行处理或者修改操作&#xff0c;在这里需要了解torch中的索引操作。 准备数据&#xff1a; data torch.randint(0,10,[4,5]) print(data--->,data)输出结果&#xff1a; data---> tensor([[3, 9, 4, 0, 5],[7, 5, 9, …...

OpenCV实验:图片加水印

第二篇&#xff1a;图片添加水印&#xff08;加 logo&#xff09; 1. 实验原理 水印原理&#xff1a; 图片添加水印是图像叠加的一种应用&#xff0c;分为透明水印和不透明水印。水印的实现通常依赖于像素值操作&#xff0c;将水印图片融合到目标图片中&#xff0c;常用的方法…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...