css——优先级(权重)

2023-11-17

阅读本文需要一定的css基础如有需要可以先了解一下:css选择器

首先来说一下我们的核心CSS:

层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言,用来描述 HTML 或 XML(包括如 SVG、MathML、XHTML 之类的 XML 分支语言)文档的呈现。CSS 描述了在屏幕、纸质、音频等其它媒体上的元素应该如何被渲染的问题。
CSS 是开放网络的核心语言之一,由 W3C 规范 实现跨浏览器的标准化。CSS节省了大量的工作。 样式可以通过定义保存在外部.css文件中,同时控制多个网页的布局,这意味着开发者不必经历在所有网页上编辑布局的麻烦。CSS 被分为不同等级:CSS1 现已废弃, CSS2.1 是推荐标准, CSS3 分成多个小模块且正在标准化中。——https://developer.mozilla.org/zh-CN/docs/Web/CSS

css所谓前端三大件中的一员,只要是做前端的,应该都写过css。虽然现在的ui库已经比较完善了,各种设计方案也是符合主流,但是也总有避免不了的需要自定义样式的需求,这时候就展示了我们css功底的时候到了。

在实际项目中有些人对于一些样式的优先级一直很困惑,为什么这个是优先的?为什么那个没有生效?最后不得不采用了一些比较“极端”的方案:内联样式Important。但是一旦这些方案使用的多了,对于后期维护的开发人员来说是极其可怕的:基于现在的Important不得不继续Important下去,最后使得项目的样式权重只会越来越糟。

其实只要了解了css的优先级是如何计算的,根本不用写那么多的Important也能增加你的样式权重,来覆盖之前的样式。目前来说,我认为需要用到Important的场景只有两种:
1、覆盖内联样式的时候
2、编写全局固定样式的时候

那不适用Important的时候我们如何增加我们的css权重呢?多增加我们的选择器描述选择程度:

.myDiv{
  color:red;
}
[id="box"].myDiv{  
  color:green
}
<div id="box" class="myDiv">box</div>    <!-- red -->
<div id="case" class="myDiv">case</div>  <!-- green -->

细心的同学可能已经注意到了上面的id选择器没有直接用#box的方式来作为css的选择器而是使用了属性选择器来匹配。那为什么要这么做呢?可以看下面:

[id="box"]{  
  color:green
}
.myClass{  
  color:red 
}

#case{  
  color:green
}
.myDiv{  
  color:red 
}
<div id="box" class="myClass">box</div>  <!-- red -->
<div id="case" class="myDiv">case</div>  <!-- green -->

是因为id选择器的权重比类选择器和属性选择器都高,而类选择器和属性选择器的权重在同一级别。在使用了属性选择器之后可以使用同一权重的类选择器来覆盖样式,但是id选择器之后无法使用同一权重以下的选择器来增加其权重了。这样一来那又如何增加我们的id选择器的权重呢?

[id="box"]{  
  color:green
}
.myClass{  
  color:red 
}

#case{  
  color:green
}
#case.myDiv{  
  color:red 
}
<div id="box" class="myClass">box</div>  <!-- red -->
<div id="case" class="myDiv">case</div>  <!-- red -->

类似这样,使用组合器在我们id选择器原基础上增加其他选择器来增加权重比。

说到这里,当前的选择器权重比等级是怎么分划的呢?我这里列一下:

类型选择器(例如:h1)和伪元素(例如:::before)<
类选择器 (例:.example),属性选择器(例:[type=“radio”])和伪类(例如::hover)(此处注意:is() 和 :not() 是例外,这俩自身没有权重等级)<
ID 选择器(例:#example) <
内联样式<
important(例:.example!important)

在这里我们使用MDN的方式来说css的权重就是所谓的四位数:

已经知道一个元素选择器比类选择器的优先级更低会被其覆盖。本质上,不同类型的选择器有不同的分数值,把这些分数相加就得到特定选择器的权重,然后就可以进行匹配。
一个选择器的优先级可以说是由四个部分相加 (分量),可以认为是个十百千四位数的 (分离的) 四个位数:

  1. 千位: 如果声明在 style 的属性(内联样式)则该位得一分。这样的声明没有选择器,所以它得分总是1000。
  2. 百位: 选择器中包含ID选择器则该位得一分。
  3. 十位: 选择器中包含类选择器、属性选择器或者伪类则该位得一分。
  4. 个位:选择器中包含元素、伪元素选择器则该位得一分。

注: 通用选择器 (*),组合符 (+, >, ~, ’ '),和否定伪类 (:not) 不会影响优先级。

为什么说分离的四个位数呢?因为虽然这里用了个十百千的说法,但是它们没有进位,低位选择器使用了再多权重分也不会超过高位权重,只会超过同位及更低的权重。

下面写几个例子来说明上面的说法:


.test:hover  {} /* 权重 0011*/
#test:hover  {} /* 权重 0101*/
#test.test:hover  {} /* 权重 0111*/
.a.b.c.d.e.f.g.h.i.j.k{}/* 权重 00(11)0   
这里是我个人理解的写法,无法进位,只在当前位置有11个权重分*/

那么important呢?我看到的说法是无限大。可比无限大,也就是说,∞<∞+0001.。

最后再写一个css 内关于优先级的点吧,缩写方式的优先级更高:margin: 20px > margin-left: 10px

本文资料来源:https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Building_blocks/Cascade_and_inheritance#specificity_2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

css——优先级(权重) 的相关文章

  • 如何从iframe访问文档中的

    I have an iframe 我在检查器元素中发现 img 标签位于具有 body 标签的 document 中 img src Images landingpage jpg 我需要访问此图像 landing page jpg 以便更改
  • Chrome:网络元素自动移动

    我正在开发一个网络项目 在过去的两周里 我正在进行学期考试 所以我要休息一下 现在 既然他们已经结束了 我又继续我的工作了 但我发现我的一些Web 元素 如按钮 span 在 Chrome 上移动了一些像素 在 IE 和 Mozilla 上
  • 外部 css 文件在 Flask 框架中不起作用

    我正在尝试在我的 html 文件中使用外部 css 文件 起初我使用 bootstrap 框架 效果很好 然而 当我尝试通过添加自定义的css文件来自定义网页时 它根本不起作用 这是我的代码
  • 如何使用 PHP 动态插入 CSS 类?

    下面的代码有什么问题 我想在相应的情况下动态插入 当前 CSS 类 li 单击元素 谢谢 section section li
  • ::after 内联 HTML 电子邮件?

    banner width 34px height 52px position relative color white font size 11px letter spacing 0 2em text align center float
  • 无限水平滚动图像循环?

    所以我试图在我的网站上创建一个无限滚动动画 但我一直在努力 原始教程在这里 使用 6 张图像 最后重复 4 张图像以实现无缝过渡 https designshack net articles css infinitephotobanner
  • 将图例标签设置为块

    我已经在以下网址设置了我的问题的演示 http jsfiddle net YHHg7 4 http jsfiddle net YHHg7 4 我正在尝试执行以下操作 legend display block border bottom 1p
  • Android浏览器上的Web应用程序宽度问题

    所以到目前为止我只在 Android 浏览器上遇到过这个问题 基本上我的网站几乎一直运行良好 而且我还没有在 Dolphin Opera 或 Skyfire 上看到这个问题 但偶尔当我从手机主屏幕之一上的书签重新打开 Android 浏览器
  • a:悬停颜色不起作用

    一件很奇怪的事情 我想在悬停时更改链接的文本颜色和背景颜色 这是代码 css link menu a color white display block height 100 width 100 text decoration none t
  • 如何对多行文本中的每一行应用填充?

    我已将背景颜色应用于 span 标签 也有左和右padding设置在它上面 问题是 padding仅适用于左侧 开始 和右侧 结束 span 而不是当文本换行时每行的左侧 开始 和右侧 结束 我该如何应用左和右padding to the
  • HTML 表格 - 固定列宽和多个可变列宽

    我必须建立一个有 5 列的表 表格宽度是可变的 内容宽度的 50 有些列包含固定大小的按钮 因此这些列应该有一个固定大小 例如 100px 有些列中有文本 所以我希望这些列具有可变的列宽 例如 Column1 tablewidth sum
  • 滚动时输入自动完成位置错误(chrome)

    我在输入文本的默认自动完成功能方面遇到了一些麻烦 滚动时它不会相应移动 我希望自动完成文本保留在输入的正下方 有办法做到这一点吗 我在 Chrome 浏览器版本 57 0 2987 133 中发生这种情况 fiddle https jsfi
  • 样式标签中的源映射是否有效?

    我在标签和源映射中遇到 CSS 问题 为了缩短项目的加载时间 我改变了将 CSS 放入 HTML 的方式 将其改为 h1 Source maps working wonderfully h1 进入这个
  • 如何向 Rails 应用程序添加自定义字体?

    我想在 RoR 应用程序中使用几种字体 但它们的格式主要是 ttf 和 otf 等 我该如何将这些文件嵌入到我的 Rails 应用程序中 也就是说 一旦我将它们放入我的资产文件夹中 将它们嵌入我的 CSS 和 或 LESS 文件中的语法到底
  • 淘汰赛绑定,每个都可进行自定义

    我这里有一个情况 用于淘汰每个带有定制的绑定 这是我的代码 div div table tbody tr td td td td tr tbody table div div
  • 引导行之间的垂直间距

    所以我正在研究布局 为了 响应能力 我决定使用 Bootstrap 现在我猜网格系统有问题 我想要的结果如下 1 4 2
  • 即使在包裹后也具有等宽的弹性项目

    是否可以制作一个像这样的纯 CSS 解决方案 物品有一些min width 它们应该动态增长以填充所有容器宽度 然后换行到新行 列表中的所有项目都应具有相同的宽度 现在看起来是这样的 这就是我希望它看起来像的样子 我已经手动管理这些底部项目
  • 在 HTML5 iOS 7 / iOS 8 中显示十进制键盘

    经过几个小时的搜索后 我只是有一个简单的问题 是否有可能在网络浏览器输入字段中显示小数键盘 input type number 只显示数字 但我需要在左下角使用逗号或点 我尝试过任何事情 pattern step等等 但没有显示十进制键盘
  • 如何使用 jQuery 或 JavaScript 聚焦 或 标签?

    for var i 0 i
  • 如何从 bootstrap-markdown.js 调用 .getContent 和 .parseContent

    我是使用 Bootstrap 插件的新手 刚刚通过代码学院 http www codecademy com en skills make an interactive website 我真的很想用这个很棒的引导 Markdown 插件 ht

随机推荐

  • Centos7搭建RabbitMQ集群及单机多节点部署

    安装基本环境 yum y install wget vim bash completion lrzsz nmap telnet tree net tools bind utils lsof ntpdate iotop erlang环境 wg
  • 深入理解计算机系统-笔记

    计算机系统漫游 程序 程序的生命周期从一个源程序 源文件 开始 即程序员利用编辑器创建并保存的文本文件 如文件名为hello c的c语言程序 源程序是由0和1组成的位序列 8个位被组织成一组 称为字节 每个字节表示程序中的某个文本字符 这种
  • css布局 - 垂直居中布局的一百种实现方式(更新中...)

    首先将垂直居中的现象和实现方式两大方向细分类如下 接下来逐条累加不同情况下的垂直居中实现 目录 一 父元素高度固定时 单行文本 图片的垂直居中 1 line height行高简单粗暴实现法 line height Npx N 与元素高度相同
  • parted 分区与磁盘扩容(二)

    前 LVM分区管理是对后续扩容磁盘做铺垫的 现在2TB的硬盘都非常常见了 对于超过2TB的硬盘分区 需要使用parted命令进行操作 fdisk只可以操作2TB之内的 本次教程教你们如何轻松实现2T以上和2T以下磁盘的分区及扩容 一 首先要
  • avalon框架中ms-visible和ms-if的区别

    在avalon的官方教程中说 ms visible的作用是使元素在一定条件下隐藏 不显示 ms if 同样隐藏 但它是将元素移出DOM 这个功能直接影响到CSS empty伪类的渲染结果 那么 什么是伪类 它与class id等功能类似 也
  • 利用VTK显示PLY网格模型文件

    define vtkRenderingCore AUTOINIT 2 vtkRenderingOpenGL2 vtkInteractionStyle include
  • 使用Idea打开Maven项目的正确姿势

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 在学习网上大神们的源码过程中 经常有一些打包好的项目可以提供给自己参考学习 其中不乏一些maven项目 因为自己使用的开发环境是Idea Gradle 对于Maven虽有耳
  • 模型设计总结(1)

    用单变量线性时间序列预测模型预测股价走势有一定的局限性 因此 为了充分利用时间序列的特性数据序列 深入挖掘数据特征 提高数据质量为了提高股票价格预测的准确性 基于CNN LSTM的股票价格预测方法进行股票次日收盘价预测 卷积神经网络 CNN
  • Pandas 使用ExcelWriter实现覆盖文件操作

    if sheet exists replace 这段代码主要实现的作用是 多次使用同一个文件 创建sheet时 但已存在同样的sheet名 进行覆盖操作 writer pd ExcelWriter result file path engi
  • 【阅读随笔】Modularized Control Synthesis for Complex Signal Temporal Logic Specifications

    又是一篇有关STL任务分解的文章 1 Z Zhang and S Haesaert Modularized Control Synthesis for Complex Signal Temporal Logic Specifications
  • 防御第三天

    1 总结当堂NAT与双机热备原理 形成思维导图 2 完成课堂NAT与双机热备实验 fw1
  • PIO操作Excel,通过文件流判断Excel的版本

    import com fasterxml jackson databind exc InvalidFormatException import org apache poi ss usermodel Workbook import org
  • 送书

    又到了周三了 说实话 本来这期想鸽的 上海这边的疫情太严重了 前几期上海这边中奖的粉丝都没办法收货 只能等解封后再安排了 在这里和大家道个歉 希望大家谅解 最后希望在上海的小伙伴们早日渡过难关 像这种一把青菜50块的日子什么时候才是个头啊
  • 推荐七种开源免费的C/C++网络库

    1 ACE 庞大 复杂 适合大型项目 开源 免费 不依赖第三方库 支持跨平台 2 Asio Asio基于Boost开发的异步IO库 封装了Socket 简化基于socket程序的开发 开源 免费 支持跨平台 3 POCO POCO C Li
  • java向上转型思考

    https www cnblogs com bangaj p 5813738 html 下面是对向上转型思考 作用 简化开发 体现类的多态性 保证代码简洁 实现前提 因为java是动态绑定特点 在编译时会编译器会自动找寻到 是子类方法还是父
  • COUNT(1) 和 COUNT(*) COUNT(字段) 傻傻分不清

    写 SQL 的时候突然想到一个问题 COUNT 1 和 COUNT 有啥区别 COUNT 字段 呢 在数据库的增删改查操作中 使用最频繁的就是查询操作 而在所有查询操作中 统计数量操作更是经常被用到 关于数据库中行数统计 无论是MySQL还
  • Pandas学习笔记

    1 Pandas作用 一个提供快速 可扩展和展现数据结构的Python库 目标是成为使用Python处理时间和实际数据分析的模块 有两种数据结构 Series和DataFrame 1 Series是一种类似于NumPy数组的对象 由一组数据
  • Ubuntu16.04下安装sogou输入法

    1 首先进入搜狗输入官方网站 找到对应的for Ubuntu进行下载 链接如下 https pinyin sogou com 进入进行下载 下载完成的文件后缀名为 deb文件 2 开始安装
  • 软件测试用例常用七大方法

    第一 测试用例格式包括十大特点 用例编号 测试项 测试标题 用例属性 重要级别 高中低 预置条件 测试输入 操作步骤 预期结果 实际结果 第二 等价类 1 等价类定义 2 等价类划分 3 等价类划分规则 4 进行等价类用例设计 5 案例加以
  • css——优先级(权重)

    阅读本文需要一定的css基础如有需要可以先了解一下 css选择器 首先来说一下我们的核心CSS 层叠样式表 Cascading Style Sheets 缩写为 CSS 是一种 样式表 语言 用来描述 HTML 或 XML 包括如 SVG