前端(四)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(Windows/Linux)或Cmd Shift P(Mac)来打开命令面板。输入open settings,然后选择 Open User Settings(JSON)。打开settings.json文件 ------修改设置-----: 1、 html代码的行长度&am…...
关于网络安全攻防演化博弈的研究小议
1. 拉高视角,从宏观看网络安全攻防 伴随着信息化的发展,网络安全的问题就一直日益突出,与此同时,网络安全技术也成为研究热点,直到今日也没有停止。 从微观来看,网络安全技术研究指的是针对某项或某几项…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(7)
1.问题描述: 推送通知到手机,怎么配置拉起应用指定的页面? 解决方案: 1、如果点击通知栏打开默认Ability的话, actionType可以设置为0, 同时可以在.clickAction.data中,指定待跳转的page页面…...
远程桌面防护的几种方式及优缺点分析
远程桌面登录是管理服务器最主要的方式,于是很多不法分子打起了远程桌面的歪心思。他们采用暴力破解或撞库的方式破解系统密码,悄悄潜入服务器而管理员不自知。 同时远程桌面服务中的远程代码执行漏洞也严重威胁着服务器的安全,攻击者可以利…...
ASP.NET|日常开发中连接Sqlite数据库详解
ASP.NET|日常开发中连接Sqlite数据库详解 前言一、安装和引用相关库1.1 安装 SQLite 驱动1.2 引用命名空间 二、配置连接字符串2.1 连接字符串的基本格式 三、建立数据库连接3.1 创建连接对象并打开连接 四、执行数据库操作4.1 创建表(以简单的用户表为例…...
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…...
服务器一般装什么系统?
在服务器管理中,操作系统的选择是一个关键因素,它直接影响到服务器的稳定性、性能和可维护性。那么为什么有些服务器选择Linux,而不是Windows?选择合适的操作系统对服务器的性能和安全性有多么重要? 在众多操作系统中…...
Linux vi/vim 编辑器使用教程
Linux vi/vim 编辑器使用教程 引言 Linux 系统中的 vi 和 vim 是非常强大的文本编辑器,它们以其高效性和灵活性而闻名。vim 是 vi 的增强版,提供了更多的功能和改进的用户界面。本文将详细介绍 vi/vim 的基本用法,包括打开文件、编辑文本、…...
JavaEE多线程案例之阻塞队列
上文我们了解了多线程案例中的单例模式,此文我们来探讨多线程案例之阻塞队列吧 1. 阻塞队列是什么? 阻塞队列是⼀种特殊的队列.也遵守"先进先出"的原则. 阻塞队列是⼀种线程安全的数据结构,并且具有以下特性: 当队列满的时候,继续⼊队列就会…...
梳理你的思路(从OOP到架构设计)_基本OOP知识04
目录 1、 主动型 vs.基於被动型 API 1)卡榫函数实现API 2)API的分类 3)回顾历史 4)API >控制力 2、 结语&复习: 接口与类 1)接口的表示 2)Java的接口表示 1、 主动型 vs.基於被动…...
nginx反向代理(负载均衡)
nginx的代理 代理 四层代理 七层代理 正向代理和缓存的配置方式 🐭🐮🐯🐰🐉🐍🐴🐑🐒🐔🐶🐷 反向代理》负载均衡 负载均衡ÿ…...
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 的使用及其实现。 它们都用于保护共享资源不被两个或多个进程同时修改…...
访问者模式的理解和实践
在软件开发过程中,设计模式为我们提供了解决常见问题的最佳实践。访问者模式(Visitor Pattern)是行为设计模式之一,它将数据操作与数据结构分离,使得在不修改数据结构的前提下,能够定义作用于这些元素的新的…...
在Scala中对Map函数的使用
package pp28{object cscc {def main(args: Array[String]): Unit {val m1 Map("马云 — 阿里巴巴" -> 1964,"马化腾 — 腾讯" -> 1971,"李彦宏 - 百度" -> 1968,"雷军 - 小米" -> 1969,"丁磊 - 网易" -> …...
PyTorch基本使用-张量的索引操作
在操作张量时,经常要去获取某些元素进行处理或者修改操作,在这里需要了解torch中的索引操作。 准备数据: data torch.randint(0,10,[4,5]) print(data--->,data)输出结果: data---> tensor([[3, 9, 4, 0, 5],[7, 5, 9, …...
OpenCV实验:图片加水印
第二篇:图片添加水印(加 logo) 1. 实验原理 水印原理: 图片添加水印是图像叠加的一种应用,分为透明水印和不透明水印。水印的实现通常依赖于像素值操作,将水印图片融合到目标图片中,常用的方法…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
