当前位置: 首页 > 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;常用的方法…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...