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):某些样式是可以继承的,即子元素会继承父元素的样式。但是,不是所有样式都可以继承,如边框、背景等样式通常不会被继承。

相关推荐
活宝小娜27 分钟前
vue不刷新浏览器更新页面的方法
前端·javascript·vue.js
程序视点29 分钟前
【Vue3新工具】Pinia.js:提升开发效率,更轻量、更高效的状态管理方案!
前端·javascript·vue.js·typescript·vue·ecmascript
coldriversnow30 分钟前
在Vue中,vue document.onkeydown 无效
前端·javascript·vue.js
我开心就好o31 分钟前
uniapp点左上角返回键, 重复来回跳转的问题 解决方案
前端·javascript·uni-app
开心工作室_kaic1 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
刚刚好ā1 小时前
js作用域超全介绍--全局作用域、局部作用、块级作用域
前端·javascript·vue.js·vue
朝九晚五ฺ2 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
沉默璇年3 小时前
react中useMemo的使用场景
前端·react.js·前端框架
yqcoder3 小时前
reactflow 中 useNodesState 模块作用
开发语言·前端·javascript
2401_882727573 小时前
BY组态-低代码web可视化组件
前端·后端·物联网·低代码·数学建模·前端框架