CSS的样式选择器以及优先级算法汇总

CSS的样式选择器有很多种,常见的有以下几种:

  1. 元素选择器(Element Selector) :通过元素的名称来选择元素。例如,p选择所有的段落元素。

  2. 类选择器(Class Selector) :通过类名来选择元素。类选择器以句点.开头,例如,.myclass选择所有类名为myclass的元素。

  3. ID选择器(ID Selector) :通过元素的ID属性来选择元素。ID选择器以井号#开头,例如,#myid选择ID为myid的元素。

  4. 属性选择器(Attribute Selector) :通过元素的属性来选择元素。例如,[type="text"]选择所有type属性为text的元素。

  5. 后代选择器(Descendant Selector) :选择某个元素的后代元素。例如,div p选择所有div元素内部的p元素。

  6. 子元素选择器(Child Selector) :选择某个元素的直接子元素。例如,ul > li选择所有ul元素下的直接子元素li

  7. 伪类选择器(Pseudo-class Selector):用于选择处于特定状态的元素,如:hover(鼠标悬停)、:first-child(第一个子元素)、:nth-child(n)(第n个子元素)等。

  8. 伪元素选择器(Pseudo-element Selector):用于选择元素的特定部分,如::before(在元素内容之前插入内容)、::after(在元素内容之后插入内容)等。

CSS3引入了许多新的样式,其中一些常见的包括:

  1. 边框样式(Border Styles) :新增了更多样式的边框,如border-radius(圆角边框)和border-image(图片边框)等。

  2. 渐变(Gradients) :新增了线性渐变(linear-gradient)和径向渐变(radial-gradient)等。

  3. 阴影(Box Shadows) :新增了更多样式的阴影效果,如box-shadow

  4. 过渡(Transitions):新增了过渡效果,使元素的样式在一段时间内平滑地过渡到另一种样式。

  5. 动画(Animations):新增了动画效果,可以通过关键帧(keyframes)来定义元素的动画效果。

  6. 媒体查询(Media Queries):允许根据设备的特性(如屏幕宽度、设备方向等)来应用不同的样式。

在CSS中,当多个样式规则应用到同一个元素时,就会涉及到样式选择器的优先级问题。CSS样式选择器的优先级原则可以总结为以下几点:

  1. 重要性(!important) :使用!important声明的样式具有最高的优先级,会覆盖其他所有样式。但是,滥用!important可能导致样式表混乱,应该尽量避免使用。

  2. 优先级就近原则:同权重情况下样式定义最近者为准。

  3. 内联样式(Inline Styles) :在元素的style属性中定义的样式具有更高的优先级,会覆盖外部样式表和内部样式表中的样式。

  4. ID选择器(ID Selectors):ID选择器具有比类选择器和元素选择器更高的优先级。如果同一个元素同时使用了ID选择器和类选择器,ID选择器的样式会被应用。

  5. 类选择器和属性选择器(Class Selectors and Attribute Selectors):类选择器和属性选择器的优先级相同,比元素选择器的优先级高。如果同一个元素同时使用了类选择器和元素选择器,类选择器的样式会被应用。

  6. 元素选择器(Element Selectors):元素选择器的优先级最低,会被其他选择器所覆盖。如果同一个元素同时使用了多个元素选择器,后面定义的样式会覆盖前面定义的样式。

  7. 组合选择器(Combined Selectors):当多个选择器组合在一起时,会根据选择器的特定性(Specificity)来确定优先级。特定性是一个用于计算选择器优先级的值,通常由选择器中ID选择器、类选择器和元素选择器的数量组成。

  8. 通配符* :使用 * 符号来选择所有元素的样式。通配符选择器可以应用于所有元素,而不仅限于特定的元素或类

  9. 组合选择器(Combined Selectors):当多个选择器组合在一起时,会根据选择器的特定性(Specificity)来确定优先级。特定性是一个用于计算选择器优先级的值,通常由选择器中ID选择器、类选择器和元素选择器的数量组成。

  10. 继承(Inheritance):某些样式是可以继承的,即子元素会继承父元素的样式。但是,不是所有样式都可以继承,如边框、背景等样式通常不会被继承。

相关推荐
KangkangLoveNLP33 分钟前
手动实现一个迷你Llama:使用SentencePiece实现自己的tokenizer
人工智能·深度学习·学习·算法·transformer·llama
木木黄木木36 分钟前
css炫酷的3D水波纹文字效果实现详解
前端·css·3d
郁大锤1 小时前
Flask与 FastAPI 对比:哪个更适合你的 Web 开发?
前端·flask·fastapi
浪淘沙jkp1 小时前
大模型学习二:DeepSeek R1+蒸馏模型组本地部署与调用
学习·deepseek
m0_613607012 小时前
数据集(Dataset)和数据加载器(DataLoader)-pytroch学习3
学习
HelloRevit2 小时前
React DndKit 实现类似slack 类别、频道拖动调整位置功能
前端·javascript·react.js
序属秋秋秋2 小时前
算法基础_基础算法【位运算 + 离散化 + 区间合并】
c语言·c++·学习·算法·蓝桥杯
ohMyGod_1232 小时前
用React实现一个秒杀倒计时组件
前端·javascript·react.js
eternal__day2 小时前
第三期:深入理解 Spring Web MVC [特殊字符](数据传参+ 特殊字符处理 + 编码问题解析)
java·前端·spring·java-ee·mvc
醋醋3 小时前
Vue2源码记录
前端·vue.js