一个边框颜色继承自字体的color
属性,这正常吗?我很惊讶地发现:
div
{
border: 4px solid;
color: red;
height: 100px;
width: 100px;
}
<div></div>
该链接提供一个带红色边框的 div。通常未指定颜色会默认为黑色。这是什么奇怪的继承?
一个边框颜色继承自字体的color
属性,这正常吗?我很惊讶地发现:
div
{
border: 4px solid;
color: red;
height: 100px;
width: 100px;
}
<div></div>
该链接提供一个带红色边框的 div。通常未指定颜色会默认为黑色。这是什么奇怪的继承?
border-color
值为currentColor
:CSS颜色模块 - 4.4.
currentColor
颜色关键字CSS1和CSS2将
border-color
属性的初始值定义为color
属性的值,但没有定义相应的关键字。SVG意识到了这个遗漏,因此SVG 1.0引入了currentColor
值,用于fill
、stroke
、stop-color
、flood-color
和lighting-color
属性。CSS3扩展了颜色值,包括
currentColor
关键字,以允许其与所有接受<color>值的属性一起使用。这简化了在CSS3中定义这些属性的过程。
换句话说,在您的情况下,该值被视为以下内容:
border: 4px solid currentColor;
currentColor
值来设置诸如 background-color
属性之类的内容。例如:
div {
color: red;
width: 100px;
height: 100px;
border: 4px solid;
background-color: currentColor;
}
<div></div>
有趣的小知识,如果您更改字体颜色(例如:hover
),边框颜色也会随之改变!它还可以很好地与过渡效果配合使用!
color
属性进行过渡。在IE中,你需要同时指定color, border-color
才能使边框随颜色一起动画化。IE的行为更符合我的预期,但我不知道哪个行为实际上是正确的。 - BoltClockcolor
属性指定,和背景色,由background-color
属性指定。许多其他属性接受颜色,但如果将黑色作为初始颜色值,那么它将非常任意,因此接受颜色值的属性默认采用计算出的前景色。这种行为自CSS1以来一直存在。基于等效的SVG关键字,currentColor
值在CSS Color 3中被引入,并列在各自CSS3模块的相应属性的初始值中:
当找不到值时,使用带有颜色值的attr()
也会回退到currentColor
。请参见CSS Values 3。
border-color: inherit
并不会从color
属性继承——就像所有其他CSS属性一样,它是从父元素的border-color
继承的。
1 默认情况下,实际上是反转轮廓下方像素的颜色,但支持 invert
是非强制性的,如果浏览器选择不支持,必须使用前景色代替。