2013-10-29 61 views
7

我有一个<a>元素,之后我想显示一个>符号,使用:after伪元素。使用:在伪元素后锚元素 - 浏览器差异

<a>元素的内容是动态的,因此它的宽度的变化,有时内容事件跨越几行(因为这<a>元件是<div>谁的宽度是固定的内侧)。

我想>的水平位置,开始在最长行的末尾。也就是说,当我给它right:0;规则,它应该是在元素的最右侧边缘(垂直位置并不重要,现在):

enter image description here

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

enter image description here

我想了解是什么原因导致了浏览器之间的差异,但更重要的是,我想所有浏览器表现得像FF - 放置:after在最长的行的末尾。那可能吗?

我把the above code上dabblet

+1

你'A'元件,作为一个相对定位的内联元件,是其'包含块:after'伪元素,这是绝对定位。问题在于'a'中的文本是多行的,[spec](http://www.w3.org/TR/CSS21/visudet.html#containing-block-details)表示它没有定义在这种情况下包含块的形状或尺寸。这就是为什么你会看到浏览器行为的差异 - 换句话说,浏览器不知道在这种情况下该怎么做,以便他们做出他们认为最好的事情。 – BoltClock

回答

5

那是因为你的a元素被设置为默认显示inline,和Firefox处理定位中inline元素略有不同,以Chrome和IE。

在两个Chrome和IE修复这个(同时保留在Firefox中的样子),只需给你的a元素的inline-block显示:

a { 
    position:relative; 
    display:inline-block; 
} 

Modified Dabblet demo

+0

非常感谢!然而,这个解决方案有两个问题:1)'>'的位置仍然存在浏览器差异。 Chrome的定位远远超出了FF的权利。 2)这意味着链接文本很短,'>'将远离它的结尾。我希望将'>'定位在链接文本的末尾...... –

+1

@LeaCohen这似乎是由文本呈现的差异造成的。在Firefox中,“hkfjg sdfg dsfjg jsdflgj ldsfjgl”部分几乎填满了200px的容器,然后进入新行,但在Chrome中,该部分约有20px不同。我不知道该如何解决这个问题,因为这是由浏览器控制的(以及用户可能启用的任何浏览器基于字体的设置)超过计算出的CSS。 –