将CSS边框颜色设置为文本颜色

35

有没有一种方法可以在CSS中将border-color设置为与文本颜色相同的颜色?

例如,创建一个类来添加底部点状边框,但让该边框的颜色与文本颜色匹配,就像text-decoration:underline的颜色与文本颜色 (color属性) 相同一样。


1
这个问题的反向已经被问过了:为什么CSS边框颜色会继承字体的颜色属性? - BoltClock
3个回答

86
你实际上可以免费获得这种行为;它在规范中被提到:spec

如果元素的边框颜色没有使用border属性指定,用户代理必须将元素的“color”属性值用作边框颜色的计算值。

因此,当使用border简写属性时,你只需省略颜色即可:
.dotted-underline {
    border-bottom: dotted 1px;
}

或者仅使用 border-styleborder-width 属性,而不使用 border-color

.dotted-underline {
    border-bottom-style: dotted;
    border-bottom-width: 1px;
}

或者,在支持新的CSS3关键字currentColor的浏览器中,将其指定为border-color的值(对于覆盖现有的border-color声明很有用):

.dotted-underline {
    border-bottom-color: currentColor;
    border-bottom-style: dotted;
    border-bottom-width: 1px;
}

默认情况下,边框的颜色与文本颜色相同。


1
我无法在更新的规范中找到那个规则:http://www.w3.org/TR/css3-background/ - 可能已经被currentColor取代... - Šime Vidas
3
顺便提一下,如果该元素的border-color曾经在过去被设置过,那么您必须覆盖它。您不能只指定一个新规则border-bottom: dotted 1px,因为它会保留之前设置的颜色;您只是在改变border-styleborder-width-bottom属性。 - animuson
1
针对@animuson的评论,对于实现了currentColor并更新了相关属性以支持CSS3的浏览器,您实际上可以重新声明border-bottom: dotted 1px,它们将更改所有三个属性,其中border-color再次变为currentColor。另外,我刚刚发现我的演示在IE8中根本无法正常工作。我不知道这是由于CSS2.1规范中的错误还是歧义引起的(尽管我认为初始值应该很清楚,并且如我所提到的,CSS3模块只是添加了一个关键字来指定该值)。 - BoltClock
@BoltClock,我认为你可以在IE8中使用这个(取自bootstrap插件的caret代码):border-bottom: 1px solid \9; // IE8 - user3638471
@Björn Ali Göransson:这只是让IE8使用该声明,但并不能使其正常工作。 - BoltClock
显示剩余3条评论

10

This:

border-bottom: 1px dotted currentColor;

根据规范:

currentColor ‘color’属性的值。‘currentColor’关键字的计算值是‘color’属性的计算值。 如果在‘color’属性本身上设置了‘currentColor’关键字,则它将被视为‘color: inherit’。

请参见:http://www.w3.org/TR/css3-color/#currentcolor

(但在IE8中无法正常工作)


更新:因此,明确设置颜色值并不是必要的,因为默认值已经 “color”属性的值。

所以这个可以正常工作:

border-bottom: 1px solid;

好消息是,这与CSS1和2的行为有关,如果未指定,则使用color值作为border-color的初始值,并且所有浏览器都非常支持它。 - BoltClock

0
你必须自己设置这些颜色为同一个颜色。
如果你想让你的CSS更具有程序性和DRY(不重复原则),你应该使用像LESS这样的东西。它可以为你节省很多工作,因此你只需声明一次该颜色即可。

这不是他要求的!如果你不知道想要设置边框的元素的颜色呢?这里不需要使用CSS预处理器。 (遗憾的是我还不能投票反对) - Lajos Mészáros

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接