我正在进行IE8测试的一些进展,似乎旧的使用技术margin: 0 auto;
在IE8的所有情况下都不起作用.
下面的HTML在FF3,Opera,Safari,Chrome,IE7和IE8 compat中给出了一个居中按钮,但不是 IE8标准:
(作为一种解决方法,我可以为按钮添加显式宽度).
所以问题是:哪些浏览器是正确的?或者这是行为未定义的情况之一?
(我的想法是所有的浏览器都不正确 - 如果它是"display:block",按钮不应该是100%宽度?)
更新:我是个笨蛋.由于输入不是块级元素,我应该将它包含在带有"text-align:center"的div中.话虽如此,为了好奇,我仍然想知道按钮是否应该在上面的例子中居中.
对于BOUNTY:我知道我在这个例子中做了一些奇怪的事情,正如我在更新中指出的那样,我应该把它对准中心.对于赏金,我想参考回答的规格:
如果我设置"display:block",按钮的宽度应该是100%吗?或者这是不确定的?
由于显示是块,应该"margin:0 auto;" 中心按钮,或不,或未定义?
小智.. 155
添加解决了这个问题
添加解决了这个问题
这是IE8中的一个错误.
从第二个问题开始:"margin:0 auto"使块居中,但仅当块的宽度设置为小于父宽度时.通常,他们会变得相同.这就是下面示例中的文本不居中的原因.
text
将b元素的显示样式设置为block后,其宽度默认为父级宽度.CSS规范 10.3.3正常流程中的块级非替换元素描述如何:"如果'width'设置为'auto',则任何其他'auto'值变为'0','width'跟随得到的相等"那里提到的平等
'margin-left'+'border-left-width'+'padding-left'+'width'+'padding-right'+'border-right-width'+'margin-right'=包含块的宽度
因此,通常所有汽车都会导致块宽度等于包含块的宽度.
但是,此计算不应应用于INPUT,它是替换元素.替换元素由正常流程中的10.3.4块级替换元素覆盖.文字说:"'宽度'的使用值是针对内联替换元素确定的." 10.3.2内联的相关部分,替换元素是:"如果'宽度'的计算值为'auto',则element具有固有宽度,然后该固有宽度是'width'"的使用值.
我猜CSS关心的场景是IMG元素.此示例中的Stackoverflow徽标将由所有浏览器居中.
INPUT元素的行为方式应该相同.
是的,您可以阅读规格一百次,并结合不同的点点滴滴,直到您有一个感觉正确的解释 - 但这正是浏览器供应商所做的,这就是为什么我们处于今天的情况.
实质上,当您对元素应用100%的宽度时,如果父元素是块元素,它应该扩展到它的父元素宽度的100%.margin: 0 auto;
因为它已经占用了可用宽度的100%,所以你不能再使它居中.
要使任何内容居中,margin: 0 auto;
您需要定义显式宽度.要使内联元素居中,可以text-align: center;
在父元素上使用,但如果父元素有其他子元素,则可能会产生不必要的副作用.
表单控件是CSS 中的替换元素.
10.3.4正常流程中的块级替换元素
"宽度"的使用值确定为内联替换元素.然后应用未替换的块级元素的规则来确定边距.
因此,窗体控件不应拉伸到100%宽度.
但是,它应该集中.它看起来像IE8中的普通错误.如果设置特定宽度,它会使元素居中: