【问题标题】:Why does an absolutely positioned span not position properly in a relatively positioned span in Firefox unless displayed as inline-block or the like?为什么绝对定位的跨度在 Firefox 中的相对定位的跨度中不能正确定位,除非显示为 inline-block 等?
【发布时间】:2014-08-24 10:05:32
【问题描述】:

我想知道为什么以下代码不能在 FF 中正确呈现,除非我将父级 span 显示为 inline-block 等。如果您在检查器中检查绝对定位跨度的布局,它将在右侧显示数字 184 而不是 197。一旦我们将display:inline-block 添加到父跨度,它就可以正常工作了。

<span style="position:relative; font-size:52px;">FOO BAR
  <span style="position:absolute; top:-17px; right:197px; height:22px; width:22px; background-color:black"></span>
</span>

<span style="position:relative; font-size:52px; display:inline-block">FOO BAR
  <span style="position:absolute; top:-17px; right:197px; height:22px; width:22px; background-color:black"></span>
</span>

其他浏览器可以处理。

Here is the fiddle

【问题讨论】:

  • 请弹琴

标签: html css firefox absolute


【解决方案1】:

嗯,这是错误。正在计算相对框的宽度,包括末尾的空间。但是根据 CSS 空白规则,行尾的空格(它是)应该被丢弃。 您可以看到这一点,因为如果您手动删除空格 - 即使用

<span style="position:relative; font-size:52px;">FOO BAR<span 
  style="position:absolute; top:-17px; right:197px; height:22px; 
  width:22px; background-color:black"></span></span> 

与其他浏览器类似,该框将放置在 FF 中。

http://jsfiddle.net/fg9enk2t/1/


奇怪的是,这个末端空间规则会导致各种各样的问题。我在 Chrome 和 IE 中都看到了在行尾丢弃空格时出现的错误。

【讨论】:

    【解决方案2】:

    问题是html中的空格。

    不同之处在于,inline-block 元素在其开头和结尾去除了空格(根据white-space 属性),但 inline 元素没有。

    假设这个 CSS:

    .outer {
        position:relative;
        font-size:52px;
        outline: 1px solid;
    }
    .inner {
        position:absolute;
        top:-17px;
        right:0px;
        height:22px;
        width:22px;
        background-color:black;
    }
    .ib {
        display: inline-block;
    }
    

    然后,以下内容将看起来相同 (Demo):

    <span class="outer ib">FOO BAR<span class="inner"></span></span>
    
    <span class="outer">FOO BAR<span class="inner"></span></span>
    

    但是,以下内容看起来会有所不同 (Demo):

    <span class="outer ib">FOO BAR
        <span class="inner"></span>
    </span>
    
    <span class="outer">FOO BAR
        <span class="inner"></span>
    </span>
    

    【讨论】:

    • 那么谁在正确实施呢? FF 还是 Chrome 和 Safari?
    • @amayem 不确定。 spec 说“任何直接包含在块容器元素内(而不是内联元素内)的文本都必须被视为匿名内联元素。(...)随后将被折叠掉的空白内容根据white-space 属性不会生成任何匿名内联框。"。我没有发现内联元素中的文本会发生什么。
    • 我想我找到了。他们似乎都是正确的。在section 16.6.1 The 'white-space' processing model of the spec 下提到 "如果'white-space' 设置为'normal' 或'nowrap',则换行字符将被转换为以下字符之一:空格字符、零宽度空格根据基于内容脚本的 UA 特定算法,字符 (U+200B) 或无字符(即不渲染)。"
    猜你喜欢
    • 2012-05-14
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2017-07-27
    • 2016-04-23
    • 1970-01-01
    相关资源
    最近更新 更多