“文字修饰”和“后”伪元素,重新审视
我正在重新问这个问题,因为它的答案在我的情况下是行不通的。
在我的印刷媒体样式表中,我想在每个链接之后使用:after
伪类追加url。
a:after { content: " <" attr(href) ">"; text-decoration: none; color: #000000; }
在Firefox(也可能是Chrome浏览器,但不是IE8)中, text-decoration: none
被忽略,下划线延伸到url的底部。 但是, color
正确设置为黑色的url。 有没有办法使text-decoration
工作?
原始问题附加了固定大小的图像,而不是可变宽度的文本。 它的答案使用填充和背景图像,以避免使用文本修饰属性。 当内容是宽度可变的文本时,我仍然在寻找解决scheme。
IE8的执行:之前和之后:伪元素是不正确的。 Firefox,Chrome和Safari都根据CSS 2.1规范来实现它。
5.12.3:之前和之后:伪元素
可以使用':before'和'after'伪元素在 元素的内容 之前或之后 插入 生成 的内容 。 他们在生成的文本部分解释。
…
层叠样式表级别2修订1(CSS 2.1)规范
该规范指出内容应该在元素的内容之前或之后插入, 而不是元素 (即<element> content:在 content content: 之前 </ element>之前)。 因此,在Firefox和Chrome中,遇到的文本修饰不在插入的内容上,而是在包含插入内容的父锚元素上。
我认为你的select将使用在你以前的问题中提出的背景图像/填充技术,或者可能将你的锚元素包装在span元素中,并将伪元素应用到span元素。
如果在:after
伪代码上使用display: inline-block
,则text-decoration
声明将起作用。
在Chrome 25,Firefox 19上testing
作为替代,您可以使用底部边框而不是文本修饰。 这假定你知道背景的颜色
a { text-decoration: none; border-bottom: 1px solid blue; } a:after { content: "foo"; border-bottom: 1px solid white; /* same color as the background */ }
我有同样的问题,我的解决scheme是设置高度和溢出:隐藏
a { text-decoration: underline; } a:after { content: "»"; display: inline-block; text-decoration: none; height:16px; overflow: hidden; padding-left: 10px; }
它适用于IE,FF,Chrome。
我意识到这不是回答你问的问题,但有没有一个原因,你不能使用以下(基于background
的方法):
a.file_pdf { background-image: url(images/pdf.png); background-position: center right; background-repeat: no-repeat; padding-right: 15px; /* or whatever size your .png image is plus a small margin */ }
据我所知,Firefox的实现:after
观察select器类的属性后,不是伪类。 虽然这可能值得尝试不同的文档types? 过渡性的,而不是严格的,有时允许不同的结果(虽然不总是更好的结果…)。
编辑:
看来,使用
a:after { content: " <" attr(href) ">"; text-decoration: none; color: #000000; background-color: #fff; /* or whatever colour you prefer */ }
覆盖或者至less隐藏text-decoration
。 这并没有提供任何答案,但至less提供了一个解决方法。
唯一对我有用的是声明一个单独的重复select器,它具有相同的文本修饰属性,它从它的父级inheritance,然后在主select器中,将文本修饰设置为无。
IE浏览器显然不知道该怎么做,当你设置text-decoration: none
一个伪元素没有声明文本装饰属性声明(默认情况下,它没有声明默认情况下)没有。 这是没有道理的,因为它显然是从父母inheritance,但唉,现在我们有了现代浏览器。
span.my-text { color: black; font-size: 12px; text-decoration: underline; } span.my-text:after { text-decoration: underline; // Have to set text-decoration here so IE knows it can be overwritten below } span.my-text:after { color: red; text-decoration: none; // In the same repeated selector, we can now overwrite text-decoration in our pseudo element. }
您可以通过以下方式自动select指向pdf文件的链接:
a[href$=".pdf"]:after { content: ... }
通过在html文件的头部实现这个链接,可以启用小于8的IE来正常工作:
<!--[if lt IE 8]><script src="http://ie7-js.googlecode.com/svn/version/2.0(beta3)/IE8.js" type="text/javascript"></script><![endif]-->
当你使用dos-引号后面的内容之前的东西时,它在IE版本中也是非常好的。
内容的绝对位置如下:
a { position: relative; margin: 0 .5em; font-weight: bold; color: #c00; } a:before, a:after { position: absolute; color: #000; } a:before { content: '<'; left: -.5em; } a:after { content: '>'; right: -.5em; }
这适用于我在Firefox 3.6,但没有在任何其他浏览器testing,祝你好运!
嗨,我也遇到了这个问题,碰巧遇到了一个解决方法。
为了解决这个问题,我用div封装了URL,并使用了类似的东西。
.next_page:before { content: '('; } .next_page:after { content: ')'; }
我所做的是我在一个元素内添加一个span,就像这样:
<a href="http://foo.bar"><span>link text</span></a>
然后在你的CSS文件中:
a::after{ content:" <" attr(href) "> "; color: #000000; } a { text-decoration:none; } a span { text-decoration: underline; }