当前位置: 首页 > 面试题库 >

使用“保证金:0自动;” 在Internet Explorer 8中

张卓
2023-03-14
问题内容

我正在进行一些高级IE8测试,似乎旧的使用技巧margin: 0 auto;在IE8中并非在所有情况下都有效。

以下HTML给出了FF3,Opera,Safari,Chrome,IE7和IE8兼容的居中按钮,但在IE8标准中却 没有

<div style="height: 500px; width: 500px; background-color: Yellow;">
    <input type="submit" style="display: block; margin: 0 auto;" />
</div>

(作为一种解决方法,我可以为按钮添加一个显式的宽度)。

所以问题是:哪种浏览器正确?还是这是行为未定义的情况之一?

(我的想法是 所有 浏览器都不正确-如果按钮的“显示:阻止”按钮不应该是100%宽度吗?)

更新:我是笨蛋。 由于输入不是块级元素,因此我应该将其包含在带有“ text-
align:center”的div中。话虽如此,出于好奇的缘故,我仍然想知道按钮是否应该在上面的示例中居中。

赏心悦目的:我知道我在示例中做的很奇怪,正如我在更新中指出的那样,我应该将其居中对齐。 为了悬赏,我希望引用能回答以下问题的规范:

  1. 如果设置为“ display:block”,按钮的宽度应为100%吗? 还是这是不确定的?

  2. 由于显示为块,因此应“ margin:0 auto;” 将按钮居中,还是不居中?


问题答案:

这是IE8中的错误。

从第二个问题开始:“ margin:0 auto”将块居中,但仅当块的宽度设置为小于父对象的宽度时。通常,它们是相同的。因此,以下示例中的文本未居中。

<div style="height: 100px; width: 500px; background-color: Yellow;">    
    <b style="display: block; margin: 0 auto; ">text</b>
</div>

将b元素的显示样式设置为“阻止”后,其宽度默认为父级宽度。CSS规范 10.3.3正常流程 中的 块级不可替换元素
描述了如何:“如果’width’设置为’auto’,则任何其他’auto’值变为‘0’并且’width’从结果相等。” 那里提到的平等是

‘margin-left’+’border-left-width’+’padding-left’+’width’+’padding-
right’+’border-right-width’+’margin-right’=包含块的宽度

因此,通常所有auto都会导致块宽度等于包含块的宽度。

但是,此计算不应应用于被替换的元素INPUT。替换的元素由 10.3.4正常流程中的块级替换元素
覆盖。那里的文字说:“’宽度’的使用值是根据内联替换元素确定的。” 10.3.2内联替换元素
的相关部分是:“如果’width’的计算值为’auto’,并且该元素具有固有宽度,则该固有宽度就是’width’的使用值”。

我猜想CSS关心的场景是IMG元素。本示例中的Stackoverflow徽标将以所有浏览器为中心。

<div style="height: 100px; width: 500px; background-color: Yellow;">    
    <img style="display: block; margin: 0 auto; " border="0" src="http://stackoverflow.com/content/img/so/logo.png" alt="">
</div>

INPUT元素的行为应相同。



 类似资料:
  • 问题内容: 我有一个div,在该div内,我有一个无序列表。我已将其应用于无序列表,但不会在标头div中居中。 有人可以告诉我为什么吗?我认为,如果我定义父div的宽度,那么无序列表应该能够以居中。我想念什么? 这是我的代码: 问题答案: 您需要定义要居中的元素的宽度,而不是父元素。 编辑 :好的,我现在已经看到了测试页,这就是我认为您想要的:

  • 问题内容: 我想要一个组件来保持页面的水平中心(两列),并且我有一个子组件(右列),我希望其位置固定,因此该子组件的位置必须固定,但是整个两列要居中。 问题答案: 您无法使用来做到这一点,但是您可以执行以下操作: 这样,您可以将元素向右移动50%,然后向后移动其宽度的一半。这样,您将获得居中的元素。

  • 问题内容: 有没有一种方法可以完全禁用边距收缩?我发现的唯一解决方案(名称为“ uncollapsing”)需要使用1px边框或1px填充。我发现这是不可接受的:无关紧要的像素无缘无故使计算复杂化。有没有更合理的方法来禁用此保证金倒塌? 问题答案: 保证金崩溃的主要类型有两种: 相邻元素之间的边距崩溃 父元素和子元素之间的折叠边距 仅在后一种情况下,使用填充物或边框可以防止塌陷。另外,应用于父对象

  • 问题内容: 更新 :以下行为在Firefox上不可见。 让我们从以下情况开始: 主体用定义,我们有一个滚动条,让我们可以看到。在这里,我们有一个 margin-colapsing ,边距与主体边距一起折叠,从而在主体和滚动条之后创建此空间。 如果我们参考规范,则有这种情况: 当且仅当以下情况,两个边距相邻: … 最后一个流入子项的底边距及其父项的底边距(如果父级具有“自动”计算的高度) 该元素是

  • 我是API测试的新手。我正在使用Rest保证自动化RestAPI,并且在验证获取请求时遇到了困惑。 API根据从搜索UI接收的搜索参数返回一组结果。网址为

  • 问题内容: CSS教程中通常解释的方法是: 添加边框 添加填充 当您处理带有背景图像和固定填充的像素完美布局时,所有这些副作用都会变得很明显。 有什么方法可以简单地禁用折叠而不用将多余的像素推入布局中吗?对于我来说,必须以视觉方式影响文档以更改这种行为对我来说没有任何意义。 问题答案: 好吧,您需要在两者之间有一些东西来“破坏”崩溃。 我的第一个想法是使用div并在两者之间进行设置,但这似乎不起作