重新审视"text-decoration"和":after"伪元素

pal*_*m3D 49 css cross-browser pseudo-element

我重新问这个问题,因为它的答案在我的案例中不起作用.

在我的打印媒体样式表中,我想在使用:after伪类的每个链接后附加url .

a:after {
    content: " <" attr(href) ">";
    text-decoration: none;
    color: #000000;
}
Run Code Online (Sandbox Code Playgroud)

在Firefox(可能是Chrome但不是IE8)中,text-decoration: none被忽略,并且下划线在URL的底部没有吸引力.该color然而,正确设置为黑色的网址.有没有办法让text-decoration工作?

原来的问题所附固定大小的图像,而不是可变宽度的文本.它的答案使用填充和背景图像,以避免使用文本修饰属性.当内容是可变宽度文本时,我仍在寻找解决方案.

Ell*_*t C 95

如果您使用display: inline-block:after假,该text-decoration声明将工作.

在Chrome 25,Firefox 19中测试过

  • 你是部分正确的.在这种情况下,文本修饰实际上根本不起作用,因为父文本修饰通常不能应用于内部内联块.如果你完全忽略了`text-decoration:none`,它仍然可以工作. (7认同)
  • 但遗憾的是不在IE中,请看我的问题:http://stackoverflow.com/questions/18069225/applying-text-decoration-on-css-generated-content-in-ie (5认同)
  • 遗憾的是,如果您的 A 标记是 display:flex,则此方法会失败。 (3认同)

MyI*_*hin 23

IE8的执行:before和:after伪元素不正确.Firefox,Chrome和Safari都根据CSS 2.1规范实现它.

5.12.3:before和:after伪元素

':before'和':after'伪元素可用于元素内容之前或之后插入 生成 的内容.它们在生成的文本部分中进行了解释.

...

层叠样式表2级修订版1(CSS 2.1)规范

规范表明内容应该插入元素内容之前或之后,而不是元素(即<element> content:在内容之前: </ element>之后).因此,在Firefox和Chrome中,您遇到的文本修饰不在插入的内容上,而是在包含插入内容的父锚元素上.

我认为您的选项将使用前一个问题中建议的背景图像/填充技术,或者可能将锚元素包含在span元素中,并将伪元素应用于span元素.

  • @ palm3D:你不理解的是伪选择器不是继承文本修饰,锚的文本修饰只是通过显示.如果为伪选择器设置文本修饰,则会在选择器的文本修饰之上呈现它.此外,如果您为伪选择器设置背景颜色,它会在Firefox,Chrome和Safari中正确地显示选择器的文本装饰.此外,在IE8/IE7中的渲染模式之间切换会显着改变伪选择器的处理,因此请观察您的DTD. (9认同)

小智 9

我有同样的问题,我的解决方案是设置高度和溢出:隐藏

http://jsfiddle.net/r45L7/

a {
    text-decoration: underline;
}

a:after {
    content: "»";
    display: inline-block;
    text-decoration: none;
    height:16px;
    overflow: hidden;
    padding-left: 10px;
}
Run Code Online (Sandbox Code Playgroud)

它适用于IE,FF,Chrome.

  • 看起来像`display:inline-block`声明就足够了. (7认同)

olu*_*luc 6

作为替代方案,您可以使用底部边框而不是文本修饰.这假设您知道背景的颜色

a {
  text-decoration: none;
  border-bottom: 1px solid blue;
}
a:after {
  content: "foo";
  border-bottom: 1px solid white; /* same color as the background */
}
Run Code Online (Sandbox Code Playgroud)


小智 6

1)

:after{
    position: absolute;
}
Run Code Online (Sandbox Code Playgroud)

并不完美,因为元素内容不会换行

2)

:after{
    display: inline-block;
}
Run Code Online (Sandbox Code Playgroud)

并不完美,因为有时我们希望内容后面应该始终包含元素内容的最后一个单词。

目前,我找不到适合所有3个条件的完美解决方案(1.如果内容太长,可以自动换行2.after内容应该与元素内容一起换行,这意味着after内容不应该单独占据单个内容。3 .text-decoration 应该只适用于元素条件,不适用于之后的内容。)我现在的想法是使用其他方式来模仿文本装饰。


Cél*_*lia 5

我所做的是在 a 元素内添加一个跨度,如下所示:

<a href="http://foo.bar"><span>link text</span></a>
Run Code Online (Sandbox Code Playgroud)

然后在你的 CSS 文件中:

a::after{
  content:" <" attr(href) "> ";
  color: #000000;
}

a {
  text-decoration:none;
}

a span {
  text-decoration: underline;
}
Run Code Online (Sandbox Code Playgroud)