更改FF和Opera中子元素的下划线颜色(适用于IE,Safari和Chrome)

时间:2012-04-02 14:12:10

标签: html css

故事: 我有一个有一些文字的链接。链接的一部分应该有点不同(不同的大小和颜色)。

HTML:

<a href="#">Lorem Ipsum <span>Lorem Ipsum</span> Lorem Ipsum</a>

CSS:

a { color: blue; text-decoration: underline; }
a span { color: yellow; font-size: 2em; }

问题: 无论我做什么,我都无法找到一个很好的方法让跨度文本下的线与文本颜色相同。

我能看到的唯一解决方案是在a-tag上设置 text-decoration:none 并为每个子项设置它。但这对我来说似乎不是一个好方法。

我在Firefox v12(Windows和Ubuntu),Opera v11,IE v7,IE v9,Safari v5.1和Chrome(夜晚)中进行了测试......

只有Firefox和Opera似乎有这个问题(Opera甚至比Firefox差,但我对Opera并不在意)。

编辑: 我的目标不是完全摆脱线,而是改变颜色(通过任何解决方案)。正如我从克里斯写的答案中看到的那样,我认为它必须像过度绘画一样。这至少在IE和Webkit-Browsers中看起来如何。

示例: 这是一个扩展示例的链接: http://jsfiddle.net/r2dhb/3/

更新 确切地说,CSS3中会发生一些变化http://www.w3.org/TR/css3-text/#decoration,但我不在乎,因为任何浏览器都不支持这些东西:)

2 个答案:

答案 0 :(得分:2)

引言来自http://www.w3.org/TR/CSS2/text.html#propdef-text-decoration

  

后代元素上的'text-decoration'属性不能有任何属性   对祖先的装饰有影响。在确定位置   和文本装饰线的厚度,用户代理可以考虑   后代的字体大小和主要基线,但必须使用   每条线上的基线和厚度相同。相对定位一个   后代移动影响它的所有文本装饰以及   后代的文字;它不会影响装饰的计算   该行的初始位置。

上面的引用并不像它可能那样明确,但暗示父元素无论其子项的下划线状态如何都会有下划线。它还表明下划线的厚度应始终保持一致。

  

文本修饰所需的颜色必须来自   'text-decoration'所在元素的'color'属性值   组。即使是后代,装饰的颜色也必须保持不变   元素具有不同的“颜色”值。

这第二个引用表明,对于给定元素下划线,颜色应该保持不变。因此,当在黄色文本下面时,不改变颜色是按照规范。

我会同意,应该有某种方式允许你关闭下划线,但我认为你应用下划线到个别div的工作可能就是你所拥有的。

答案 1 :(得分:0)

这是我的解决方法(仅限Firefox):

a span.test3 { text-decoration: underline; vertical-align: 4%; }

因此,子(span)下划线应隐藏父(a)下划线。

当然下划线仍然更厚,但也许你可以在CSS3中改变它?!

感谢。