在锚元素之后使用 :after 伪元素 - 浏览器差异

Posted

技术标签:

【中文标题】在锚元素之后使用 :after 伪元素 - 浏览器差异【英文标题】:Using :after pseudo element after anchor element - browser differences 【发布时间】:2013-11-08 09:13:26 【问题描述】:

我有一个<a> 元素,之后我想显示一个> 符号,使用:after 伪元素。

<a> 元素的内容是动态的,因此其宽度会发生变化,并且有时内容事件会跨越几行(因为此 <a> 元素位于宽度固定的 <div> 内)。

我希望> 的水平位置从最长行的末尾开始。也就是说,当我给它right:0; 规则时,它应该在元素的最右边(垂直位置现在无关紧要):

这是它在 FF 中的行为方式,但在 Chrome 和 IE 中,> 出现在最短行的末尾:

我想了解导致浏览器之间差异的原因,但更重要的是,我希望所有浏览器的行为都像 FF - 将 :after 放在最长行的末尾。这可能吗?

我把the above code 放在小键盘上

【问题讨论】:

您的a 元素是一个相对定位的内联元素,它是绝对定位的:after 伪元素的包含块。问题是a 中的文本是多行的,spec 表示在这种情况下它没有定义包含块的形状或尺寸。这就是您看到浏览器行为差异的原因 - 换句话说,浏览器不知道在这种情况下该做什么,所以他们会做他们认为最好的事情。 【参考方案1】:

这是因为您的 a 元素默认设置为显示 inline,而 Firefox 处理 inline 元素内的定位与 Chrome 和 IE 略有不同。

要在 Chrome 和 IE 中解决此问题(同时保留 Firefox 中的外观),只需为您的 a 元素添加一个 inline-block 显示:

a 
    position:relative;
    display:inline-block;

Modified Dabblet demo.

【讨论】:

非常感谢!但是,我对这个解决方案有两个问题:1)> 的位置仍然存在浏览器差异。 Chrome 将其定位在 FF 的右侧。 2)这意味着链接文本很短,> 将远离它的结尾。我希望 > 位于链接文本的末尾... @LeaCohen 这似乎是由文本呈现的差异引起的。在 Firefox 中,“hkfjg sdfg dsfjg jsdflgj ldsfjgl”部分在进入新行之前几乎填充了 200px 容器,但在 Chrome 中,该部分大约有 20px 不同。我不知道有什么建议可以解决这个问题,因为这是由浏览器(以及用户可能启用的任何基于浏览器字体的设置)控制的,而不是计算的 CSS。

以上是关于在锚元素之后使用 :after 伪元素 - 浏览器差异的主要内容,如果未能解决你的问题,请参考以下文章

CSS清除浮动 ③ ( 清除浮动 - 使用 after 伪元素 | 语法简介 | 兼容低版本浏览器 | 原理分析 )

前端伪元素选择器 after和before伪元素

伪元素

可以在媒体查询中删除 ::after 伪元素吗?

关于伪类元素:before和:after

对于之前、之后、首字母和第一行伪元素,我应该使用单冒号 (:) 还是双冒号 (::)?