css - CSS - 为什么 CSS 中的规则顺序会影响计算值
问题描述
假设我有这样的代码:
<html>
<head>
<style>
div {
background: yellow;
}
.px-0 {
padding-left: 0;
padding-right: 0;
}
.px-10 {
padding-left: 2.5rem;
padding-right: 2.5rem;
}
</style>
</head>
<body>
<div class="px-10 px-0">
text that should have 0 padding
</div>
</body>
</html>
我的问题是 - 为什么 div 的填充不是 0?我一直认为应该根据使用的类的顺序应用规则——在这种情况下,有px-10
(有填充),然后px-0
有(没有填充),所以最终结果应该是没有填充。
在这种情况下,CSS 中定义的规则顺序似乎也很重要 - 当我在此.px-10
之前放置.px-0
结果与预期的一样(但当然在使用时会导致问题class="px-0 px-10"
)。
以防万一上面的代码只是简化为我所拥有的场景 - 使用Tailwind CSS
并且我有一些设置了px-10
类的组件(假设我无法删除它)并且我很确定px-0
在它之后添加也会导致元素不会有任何填充但似乎我错了。
附加问题 - 唯一可能的解决方案是编写额外的 CSS,如下所示:
.px-10.px-0 {
padding-left: 0;
padding-right: 0;
}
让它工作?
解决方案
有两件事对 CSS 很重要
第一:Css 总是从上到下运行,不管你给类的顺序是什么。
它可以是<div class="px-10 px-0">
OR <div class="px-0 px-10">
。没关系。
正如你给two
你的div
iepx-0
和px-10
.px-0 {
padding-left: 0;
padding-right: 0;
}
.px-10 {
padding-left: 2.5rem;
padding-right: 2.5rem;
}
px-10
正如您在最底部看到的渲染,它将渲染最后一个值。
如果你看这段代码:
div {
padding:0;
background: yellow;
}
.px-10 {
background-color:purple;
padding-left: 10rem;
padding-right: 2.5rem;
}
.px-0 {
padding-left:0;
padding-right:0;
这将为您的div渲染0 padding
,因为它px-0
位于底部并且也purple
为.div
div
purple
background-color property
purple
div
yellow
第二:CSS查看定义的属性是否重要!
如果您定义一个特定的属性!important
.px-10 {
background-color:purple;
padding-left: 5rem !important; <--- Important one
padding-right: 2.5rem;
}
.px-0 {
padding-left:0;
padding-right:0;
}
如果您padding-left:5rem !important;
输入,那么无论是否在最底部定义了属性, px-10
css 都会渲染该属性,它将被视为重要属性。padding-left:5rem
px-0
为了回答你的问题
正如您所提到的,您在px-0
之后给予,px-10
但向左填充和向右填充不为零,因为它们不在 CSS 文件的最底部。
<html>
<head>
<style>
div {
background: yellow;
}
.px-10 {
padding-left: 2.5rem;
padding-right: 2.5rem;
}
.px-0 {
padding-left: 0;
padding-right: 0;
}
</style>
</head>
<body>
<div class="px-10 px-0">
text that should have 0 padding
</div>
</body>
</html>
推荐阅读
- git - git:使用 git-extensions 和 WinMerge 处理 gupta apl 文件(编码问题)
- c++ - Visual Studio 2019 无法识别 Qt 6.1.2 包名称
- html - 使用时选择保存图像的格式
- node.js - 使用 node-http-proxy 的代理管理器服务器无法处理 HTTPS 网站
- css - gcc 同时编译和链接目标文件和源文件
- angular - Angular Material Stepper 图标未按应显示的方式显示 - 气泡、线条和当前阶段
- python-3.x - ValueError:两个形状中的维度 0 必须相等,但使用 tensorflow 2.2 时为 0 和 512
- azure - 到 API-M 的 Azure 前门路由返回“DNSNameNotResolved”错误信息
- java - 我怎样才能得到超类对象
- image - 高级图像过滤器