【问题标题】:Firefox/Gecko adding spacing around inline-block divs?Firefox/Gecko 在行内块 div 周围添加间距?
【发布时间】:2012-03-01 01:36:50
【问题描述】:

我知道我正在寻找的真正目标是 css 圣杯,但在这个非常简单的实验中,我得到了“幻影”间距,我希望有人能解释一下。

以下情况发生在 Firefox 中,但不在 Chrome 中(尽管 Chrome 有它自己的问题,我稍后会解决):

HTML:

<div id="wrapper">
    <div id="div1"></div>
    <div id="div2"></div>
    <div id="div3"></div>
</div>

CSS:

#wrapper {
    width: 760px;
    height: 100px;
    background-color: yellow;
}

#wrapper div {
    display: inline-block;
    padding: 0;
    margin: 0;
    width: 250px;
    height: 90px;
    background-color: red;
}

#wrapper #div1 {
    background-color: red;
}

#wrapper #div2 {
    background-color: green;
}

#wrapper #div3 {
    background-color: red;

}

请注意,我使用了背景色而不是边框​​,因此不会出现任何框间距问题(据我所知)。

如果我在 Firebug 中检查每个 div(外部和内部),宽度是正确的,但每个 div 和第三个 div 之间显然存在间隙。

直到我将宽度设置为 761px,每个 div 在每个内部 div 和最后一个 1-2 像素之间的间隙约为 3-4 像素,才会发生这种情况。

所以在所有边距、填充和边框都关闭的情况下,这个间距是从哪里来的,有没有办法(没有浮动或负边距)将此间距设置为 0?

我认为也许 Firefox 正在应用内联属性,例如 word-spacing 或 letter-spacing,但我也尝试将所有这些都关闭。

有人知道这个空间是从哪里来的吗?

【问题讨论】:

    标签: css firefox gecko


    【解决方案1】:

    font-size:0; 定义为其父级DIV。像这样写:

    #wrapper {
        font-size:0;
        width: 760px;
        height: 100px;
        background-color: yellow;
    }
    
    #wrapper div{
     font-size:15px;
    }
    

    查看http://jsfiddle.net/CXr5A/

    你可以像这样在一行中写下你的内部 div:

    <div id="wrapper">
        <div id="div1"></div><div id="div2"></div><div id="div3"></div>
    </div>
    

    检查这个http://jsfiddle.net/CXr5A/2/

    【讨论】:

    • 这是恕我直言最好的解决方案,如果所有浏览器都支持rem单元,那将是天堂。
    • @FabienMénager 在你提到它之前我没有听说过rem,所以感谢我的武器库中的新成员。但是,我不确定它在这种情况下如何应用。使用rem 会让我不必在每个级别设置字体大小吗?在相关的说明中,我仍然很生气 em 单位有时与浏览器对该元素的默认值相关,而其他时候似乎与浏览器的全局字体大小相关。再次感谢您提供新信息;一封信有什么不同。
    • @sandeep 我在你的回答和 blackpla9ue ftw 之间纠结。您能告诉我将外部 div 字体大小设置为 0 与将每个内部 div 设置为 15px 的好处/区别吗?不是试图开始一场尘埃落定,只是渴望获得更多关于这两种技术及其潜在优点/缺陷的信息。谢谢。
    • @Anthony blackpla9ue 是错误的,因为 OP 要求内联块之间的间距 & 这只是一个技巧检查这个stackoverflow.com/questions/5078239/…
    • @Anthony 还有另一种方法可以改变你的 HTML 结构检查这个jsfiddle.net/CXr5A/2
    【解决方案2】:

    这与font-size 有关。如果您想知道正确的方法来完成您尝试过的事情,请改用此 CSS 并试一试。

    提示:始终养成在启动 CSS 文件之前应用全局重置的习惯。

    CSS:

    *{
        padding: 0px;
        margin: 0px;
    
    }
    
    #wrapper {
        width: 750px;
        height: 100px;
        background-color: yellow;
    
    }
    
    #wrapper div {
        width: 250px;
        height: 90px;
        display: block;
        float: left;
        background-color: red;
        font-size:15px;
    }
    
    #wrapper #div1 {
        background-color: red;
    }
    
    #wrapper #div2 {
        background-color: green;
    }
    
    #wrapper #div3 {
        background-color: red;
    
    }
    

    【讨论】:

      【解决方案3】:

      去掉 HTML 中的空格。那会解决你的问题。

      <div id="wrapper">
      <div id="div1"></div><div id="div2"></div><div id="div3"></div>
      </div>​
      

      您可以改为添加div{margin-right: -4px;}

      this article 中的更多信息。

      fiddle.

      【讨论】:

      • 有趣的解决方案,回复:HTML 中的空格。并不总是一种选择(当然也不应该如此)。负边距技巧的问题在于 1)当宽度以百分比为单位时,它不是那么友好 2)Chrome 和 FF 需要不同的偏移量才能获得相同的效果。通常这是我的第一个技巧,但今天它从来没有在这两个方面都奏效过。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 2018-10-03
      • 2013-03-05
      相关资源
      最近更新 更多