CSS选择器:让样式精确命中目标
CSS选择器:让样式精确命中目标
在网页开发中,CSS选择器是一种强大的工具,它可以帮助我们精确地定位HTML元素,以便为它们应用样式。在这篇博客中,我们将探讨一些常见的CSS选择器,了解它们的功能和使用方法。
一、元素选择器
元素选择器是最基本的选择器类型,它根据HTML元素的类型来选择元素。例如,p
选择器会选择页面上的所有<p>
元素。这种选择器非常简单,但有时候可能会选择到过多的元素,导致样式应用不够精确。
p {color: red;
}
在这个例子中,所有<p>
元素的文本颜色将被设置为红色。
二、类选择器
类选择器通过类名来选择元素。在HTML中,我们可以使用class
属性为元素指定一个或多个类名。然后,在CSS中,使用.
加上类名来定义该类元素的样式。例如,.my-class
选择器会选择所有带有class="my-class"
的元素。类选择器非常灵活,可以让我们在多个元素之间共享样式,同时避免选择到不需要的元素。
.my-class {font-size: 20px;
}
在这个例子中,所有带有class="my-class"
的元素的字体大小将被设置为20像素。
三、ID选择器
ID选择器通过元素的ID来选择元素。在HTML中,每个元素的ID应该是唯一的。在CSS中,使用#
加上ID名来定义该元素的样式。例如,#my-id
选择器会选择ID为my-id
的元素。由于ID选择器的唯一性,它通常用于定位页面上的特定元素,如导航栏、页脚等。
#my-id {background-color: yellow;
}
在这个例子中,ID为my-id
的元素的背景颜色将被设置为黄色。
四、属性选择器
属性选择器根据元素的属性来选择元素。例如,[attr=value]
选择器会选择所有属性为attr
且值为value
的元素。属性选择器非常灵活,可以根据元素的特定属性来应用样式。例如,我们可以使用属性选择器来选择所有带有target="_blank"
的<a>
元素,并为它们添加特定的样式。
input[type="text"] {border: 1px solid black;
}
在这个例子中,所有类型为text
的<input>
元素将有一个黑色的1像素边框。
五、伪类选择器和伪元素选择器
伪类选择器和伪元素选择器是两种特殊的选择器类型,它们可以选择HTML元素的特定状态或部分。伪类选择器用于选择元素在特定状态下的样式,如:hover
选择器用于选择鼠标悬停在元素上时的样式。伪元素选择器则用于选择元素的特定部分,如::before
和::after
选择器用于在元素内容的前后插入内容。
a:hover {color: green;
}
在这个例子中,当鼠标悬停在<a>
元素上时,链接的颜色将变为绿色。
六、组合选择器
我们还可以使用组合选择器来选择符合多个条件的元素。例如,element.class
选择器会选择所有带有指定类名的指定类型元素;element, element
选择器会选择多个类型的元素;element element
选择器会选择后代元素;element > element
选择器会选择子元素;element + element
选择器会选择相邻兄弟元素;element ~ element
选择器会选择所有后面的兄弟元素。
p::first-letter {font-size: 30px;
}
在这个例子中,每个<p>
元素的第一个字母的字体大小将被设置为30像素。
七、通配符选择器
通配符选择器用星号(*)表示,它选择页面上的所有元素。虽然这个选择器在大型项目中可能会导致性能问题(因为它会选择页面上的每一个元素),但在某些特定场景下,比如全局样式重置时,它是非常有用的。
div p {color: blue;
}
在这个例子中,所有在<div>
元素内部的<p>
元素的文本颜色将被设置为蓝色。
八、子代选择器
子代选择器使用 >
符号,它选择直接的子元素,而不是所有后代元素。例如,div > p
选择器会选择所有直接作为 div
元素子元素的 p
元素,而不会选择 div
元素内部更深层次的 p
元素。
ul > li {list-style-type: none;
}
在这个例子中,所有直接作为<ul>
元素子元素的<li>
元素将不会有列表标记。
九、相邻兄弟选择器
相邻兄弟选择器使用 +
符号,它选择紧接在另一个元素后的第一个兄弟元素。例如,div + p
选择器会选择所有紧接在 div
元素后的 p
元素。
h1 + p {margin-top: 50px;
}
在这个例子中,所有紧邻在<h1>
元素后面的<p>
元素的上边距将被设置为50像素。
十、一般兄弟选择器
一般兄弟选择器使用 ~
符号,它选择另一个元素之后的所有兄弟元素。例如,div ~ p
选择器会选择所有在 div
元素之后的 p
元素。
* {box-sizing: border-box;
}
在这个例子中,页面上的所有元素都将使用border-box
作为盒模型。
十一、否定伪类选择器
否定伪类选择器使用 :not()
函数,它允许你选择除了特定元素之外的所有元素。例如,p:not(.my-class)
选择器会选择所有没有 my-class
类的 p
元素。
p:not(.intro) {font-weight: normal;
}
在这个例子中,所有不带.intro
类的<p>
元素将使用正常字体重量。带有.intro
类的<p>
元素将不受影响。
十二、结构性伪类选择器
结构性伪类选择器允许你根据元素在文档树中的位置来选择元素。例如,:first-child
选择器会选择每个元素的第一个子元素,:last-child
选择器会选择每个元素的最后一个子元素,:nth-child(n)
选择器会选择每个元素的第 n 个子元素。
此外,还有 :first-of-type
、:last-of-type
、:nth-of-type(n)
、:only-child
、:only-of-type
等结构性伪类选择器,它们提供了更精细的元素选择方式。
/* 选择第一个li元素 */
ul li:first-child {color: purple;
}/* 选择最后一个li元素 */
ul li:last-child {color: orange;
}/* 选择第三个li元素 */
ul li:nth-child(3) {color: pink;
}/* 选择偶数li元素 */
ul li:nth-child(even) {background-color: lightgray;
}/* 选择类型为li的第一个子元素 */
ul li:first-of-type {font-weight: bold;
}
十三、属性选择器进阶
除了基本的属性选择器 [attr=value]
之外,还有更多复杂的属性选择器可以使用。例如,[attr^=value]
选择器会选择属性值以特定字符串开头的元素,[attr$=value]
选择器会选择属性值以特定字符串结尾的元素,[attr*=value]
选择器会选择属性值中包含特定字符串的元素。这些选择器提供了更强大的属性匹配功能。
/* 重置所有元素的边距和填充 */
* {margin: 0;padding: 0;
}
在这个例子中,通配符选择器*
用于选择页面上的所有元素,并将它们的边距和填充重置为0。
十四、伪元素选择器进阶
除了 ::before
和 ::after
之外,还有其他一些有用的伪元素选择器。例如,::first-letter
选择器会选择元素内容的第一个字母,::first-line
选择器会选择元素内容的第一行,::selection
选择器会选择用户选择(高亮)的元素部分。这些选择器允许你对元素的特定部分应用样式。
在HTML中,一个元素可以有多个类名,用空格分隔。CSS选择器可以针对这些多类名进行匹配:
<div class="box featured">This is a featured box.</div>
.box.featured {border: 3px solid red;
}
在这个例子中,选择器.box.featured
选择了同时具有box
和featured
两个类的<div>
元素,并为其添加了红色边框。
相关文章:
CSS选择器:让样式精确命中目标
CSS选择器:让样式精确命中目标 在网页开发中,CSS选择器是一种强大的工具,它可以帮助我们精确地定位HTML元素,以便为它们应用样式。在这篇博客中,我们将探讨一些常见的CSS选择器,了解它们的功能和使用方法。…...
前端不传被删记录的id怎么删除记录,或子表如何删除记录
1.删除主表相关子表所有记录 2.再保存一次前端传来的记录 3.如果子表是通过先生成空记录,再put修改模式,可以在执行1和2两步后再拿模板集合和当前现有子表集合套两个for循环对比判断,count记录模板记录和子表记录每次循环重合次数ÿ…...
axios的基本特性用法
1. axios的基本特性 axios 是一个基于Promise用于浏览器和node.js的HTTP客户端。 它具有以下特征: 支持浏览器和node.js支持promiseAPI自动转换JSON数据能拦截请求和响应请求转换请求数据和响应数据(请求是可以加密,在返回时也可进行解密&…...

打印水仙花数---c语言刷题
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 题述 求出0~100000之间的所有“水仙花数”并输出。 “水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153&#…...

springboot基础(82):分布式定时任务解决方案shedlock
文章目录 前言简介shedlock dbSchedulerLock注解说明 shedlock redis遇到的问题1.配置shedlock不生效2.报错net/javacrumbs/shedlock/core/LockProvider shedlock升级高版本同名定时任务 前言 多节点或者多服务器拥有相同的定时任务,这种情况下,不同节…...
【Golang】Gorm乐观锁optimisticlock的使用
在数据库操作中,为了保证数据的一致性和完整性,常常需要采取一些措施来防止并发操作导致的数据冲突。悲观锁和乐观锁是两种常见的并发控制机制。 悲观锁(Pessimistic Lock) 悲观锁的基本假设是,数据在并发访问时很可能…...

Apache Doris 发展历程、技术特性及云原生时代的未来规划
本文节选自《基础软件之路:企业级实践及开源之路》一书,该书集结了中国几乎所有主流基础软件企业的实践案例,由 28 位知名专家共同编写,系统剖析了基础软件发展趋势、四大基础软件(数据库、操作系统、编程语言与中间件…...

2024-02-26(Spark,kafka)
1.Spark SQL是Spark的一个模块,用于处理海量结构化数据 限定:结构化数据处理 RDD的数据开发中,结构化,非结构化,半结构化数据都能处理。 2.为什么要学习SparkSQL SparkSQL是非常成熟的海量结构化数据处理框架。 学…...

RubyMine 2023:让Ruby编程变得更简单 mac/win版
JetBrains RubyMine 2023是一款专为Ruby开发者打造的强大集成开发环境(IDE)。这款工具集成了许多先进的功能,旨在提高Ruby编程的效率和生产力。 RubyMine 2023软件获取 RubyMine 2023的智能代码编辑器提供了丰富的代码补全和提示功能&#…...

低功耗设计——门控时钟
1. 前言 芯片功耗组成中,有高达40%甚至更多是由时钟树消耗掉的。这个结果的原因也很直观,因为这些时钟树在系统中具有最高的切换频率,而且有很多时钟buffer,而且为了最小化时钟延时,它们通常具有很高的驱动强度。此外&…...
《凤凰架构》-本地事务章节 读书笔记
1、写锁又名排它锁,写锁禁止其他事务施加读锁和写锁,而不禁止其他事务读取数据(如果遇到了个不加任何锁的另一个事务2,写锁是无法阻止事务2读取数据的),这就是读未提交隔离级别中的脏读问题产生的根因。 2…...
ruby对比python,30分钟教程
会python还需要搞会ruby吗? web方面:ruby有rails,python有flask,django,rails远超django Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘…...
C语言——oj刷题——判断闰年
当我们谈到判断闰年时,我们通常会遵循以下规则:闰年是指能被4整除但不能被100整除的年份,或者能被400整除的年份。在C语言中,我们可以通过编写一个简单的程序来实现这一功能。下面是一个示例代码,用于判断一个给定年份…...

Git笔记——3
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、合并模式和分支策略 二、bug分支 三、强制删除分支 四、创建远程仓库 五、克隆远程仓库_HTTPS和_SSH 克隆远程仓库_HTTPS 克隆远程仓库_SSH 六、向远程仓库…...
C++面试 -操作系统-安全能力:死锁的危害、出现原因、解决方法
目录 死锁的危害 死锁出现的原因 死锁的解决方法 死锁是计算机科学中一个非常重要的概念,特别是在多线程、并发编程以及数据库管理系统等领域中。下面是关于死锁的危害、出现原因和解决方法的基础概述: 死锁的危害 资源浪费:死锁导致系统…...
台湾香港澳门媒体宣发稿报道有哪些平台资源,跨境出海推广新闻营销公司告诉你
【本篇由言同数字科技有限公司原创】随着全球化的快速发展和互联网的普及,品牌越来越重视海外市场的开拓。作为亚洲地区的重要经济中心,香港、台湾和澳门不仅具有独特的地理位置和文化背景,还拥有丰富的媒体资源。在本文中,我们将…...

Python分支和循环结构及其应用(文末送书)
一、分支结构 应用场景 我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构。然而仅有顺序结构并不能解决所有的问题。 if语句的使用 在Python中,要构造分支结构可以使用if、elif和else关键字。所谓关键字就是有特殊含义的…...

机器学习——线性代数中矩阵和向量的基本介绍
矩阵和向量的基本概念 矩阵的基本概念(这里不多说,应该都知道) 而向量就是一个特殊的矩阵,即向量只有一列,是个n*1的矩阵 注:一般矩阵用大写字母表示,向量用小写字母表示 矩阵的加减运算 两个…...

基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用
Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…...

蜘蛛蜂优化算法SWO求解不闭合MD-MTSP,可以修改旅行商个数及起点(提供MATLAB代码)
1、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法(Spider wasp optimizer,SWO)由Mohamed Abdel-Basset等人于2023年提出,该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为,具有搜索速度快,求解精度高的优势。VRPTW&#x…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...