浏览器对边距的支持:自动

Posted

技术标签:

【中文标题】浏览器对边距的支持:自动【英文标题】:Browser support for margin: auto 【发布时间】:2016-07-31 00:39:33 【问题描述】:

像许多设计师一样,我使用margin: 0 auto; 来居中元素。尝试在 http://www.caniuse.com 检查浏览器对此功能的支持时,我找不到任何相关内容。

是否有此功能的浏览器兼容性矩阵?

【问题讨论】:

如果您在caniuse 上找不到它,那么您可能会认为它得到了一切支持。除了可能是 IE6,因为拧 IE6... @NiettheDarkAbsol,我在某处读到过有关旧 android 版本的 Opera 或 Chrome 的一些问题 - 我不记得了。 【参考方案1】:

虽然您可能不想调整代码以在不支持margin: 0 auto; 的老式浏览器中工作,但既然您问了:

支持仅从 IE6 开始。如果要支持早期的浏览器,可以在父元素中添加text-align: center;。这是因为旧浏览器错误地将text-align 也应用于块元素。同时,为现代浏览器保留margin: 0 auto;。如果你想让text-align: center 也能在现代浏览器中工作,你也可以设置display: inline-block; - 那么你就不需要margin: 0 auto;了。

所以假设这是你的 html

<div id="outer">
    <div id="inner"></div>
</div>

您有以下选择:

选项 1

#outer 
    background: pink;
    width: 100%;
    text-align: center; /* for very old browsers */


#inner 
    background: green;
    display: inline-block;
    width: 50px;
    height: 50px;
    margin: 0 auto; /* for >99% of browsers */

选项 2

#outer 
    background: pink;
    width: 100%;
    text-align: center;
    height: 50px; /* height of child - necessary for IE8 and IE9,
    otherwise the height is slightly larger than that of the child */


#inner 
    background: green;
    display: inline-block; /* necessary for modern browsers, IE8+ */
    width: 50px;
    height: 50px;

但正如我所说,在支持这些古老的浏览器之前,您可能真的会考虑是否值得付出额外的努力,或者是否最好放弃对它们的支持。

【讨论】:

很好的答案!谢谢! 另一个问题:width: auto; 的跨浏览器支持怎么样? 你问有什么特别的原因吗?据我所知,所有浏览器都支持width: auto;,而且恰好是the initial value。要计算块元素的自动宽度,请从父元素的宽度中减去水平边距/填充/边框。对于内联元素,自动宽度就是内容的宽度。就好像你根本没有设置任何宽度一样。 是的,这是有原因的。我正在开发一个 HTML5 框架,我非常依赖 margin: 0 autowidth: auto; 规则。我的目标是 Android Browser 2.3+,所以我必须避免使用 calc() 这样方便的东西。 您遇到width: auto; 的问题了吗?据我所知,它应该在所有浏览器中都能正常工作。【参考方案2】:

从https://developer.mozilla.org/en/docs/Web/CSS/margin开始,所有浏览器都完全支持margin: 0 auto;

【讨论】:

答案是错误的。一些旧的浏览器不支持margin: 0 auto;,这在引用的来源中也有说明。有关详细信息,请参阅我的答案。

以上是关于浏览器对边距的支持:自动的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的设置切断了我对边距的限制?

内边距,外边距说明-----壹

内外边距浮动布局相关

带有自动边距的网格 - Windows Phone 8.1 Silverlight

在没有边距的视图中均匀分布

iOS Autolayout:如何显示/隐藏包含边距的视图?