前几天我看到了一段关于此的小讨论,并认为看看所有不同的实现方式会很有趣。 它们都不特别复杂,但也许你会因为语法清晰度、效率或其他原因而偏爱其中一种。
假设我们想要在元素的底部、左侧和右侧(但不是顶部)添加边框。
显式声明每一侧
.three-sides {
border-bottom: 2px solid black;
border-right: 2px solid black;
border-left: 2px solid black;
}
虽然这很清楚,但它仍在使用简写形式。 完全展开后将如下所示
.three-sides {
border-bottom-color: black;
border-bottom-style: solid;
border-bottom-width: 2px;
border-left-color: black;
border-left-style: solid;
border-left-width: 2px;
border-right-color: black;
border-right-style: solid;
border-right-width: 2px;
}
去除其中一侧
您可以通过使用简写声明所有四边的边框,然后删除不需要的那一边来节省一些代码
.three-sides {
border: 2px solid black;
border-top: 0;
}
仅使用简写设置宽度
.three-sides {
border-color: black;
border-style: solid;
/* top, right, bottom, left - just like margin and padding */
border-width: 0 2px 2px 2px;
}
作为一个有趣的小插曲,您无需声明边框颜色即可显示边框,因为颜色将继承 currentColor
! 因此,这将正常工作
.three-sides {
/* no color declared */
border-style: solid;
border-width: 0 2px 2px 2px;
}
如果您这样做,则将具有红色边框
.three-sides {
border-color: red;
border-style: solid;
border-width: 0 2px 2px 2px;
}
奇怪但真实。
如果要显式添加颜色,可以混合和匹配简写形式,因此这将正常工作
.three-sides {
border: solid green;
border-width: 2px 0 2px 2px;
}
哇!太有用了,css 的基础知识,我们在每个教程中都能找到!
重点不在于此。 我认为许多教程实际上并没有向您展示所有选项,它们只是向您展示了该怎么做。 也可能没有提到 currentColor。
我倾向于使用简短的,只要没有人按字符付费给我 ;-) 当然,较长的形式在您在其他地方指定单个属性/值并想要保留它时具有一些优势,但这不太可能,而且通常也不可取。
@Chris 这些方法之间的一个区别是我在这些讨论中没有看到的,那就是每种方法的明确性差异。 我制作了一个 codepen 来突出我的意思。
.bordersB
上的长格式方法将保留在.bordersA
上定义的边框,而.bordersC
上的简写方法将显式设置border-bottom
,因此会覆盖来自.bordersA
的边框。虽然这只有在我们覆盖边框时才会生效,但我认为指出来很重要。 在我自己的 CSS 中,我通常使用长格式方法,因为我知道我正在显式设置什么,因此将来会减少意外行为。
显然缺少一个
这似乎比尝试解释
border-width: 0
或border-color: transparent
更容易阅读