2012-06-30 38 views
5

考虑这样一个场景,CSS属性缺少单元(PX,EM,PT%):回退的CSS属性没有单位

<body> 
    <div 
     style= "width:170; 
       border:1 dotted PaleGreen; 
       background-color:MistyRose"> 
     The quick brown 
    </div> 
</body> 

问题:

  1. 为什么它会回退到PX?像素始终是首选单位? W3C工作草案或建议中是否定义了任何规则?
  2. 是否有强制让UA退回到首选设备的规则?
  3. 鉴于上述示例,其下面的是一个正确的行为:
    • Internet Explorer中:在怪癖模式(IE6,5,4 ..)宽度和边界宽度用于回退到像素。由于IE7(直到现在,IE10RP)它忽略了整个规则,如果单位丢失。因此两条规则都被忽略了。
    • Firefox 13:在上面的例子中宽度回退到px,但是border-width被忽略。
    • Chrome 19,Opera 12,Safari 5.1.2:宽度和边框宽度均回退到px。

注:在微软连接,他们说:

你举报的问题是由设计。标准模式下的IE10会忽略没有符合CSS标准的单元的宽度或高度。 本机不是可选的。

回答

13

我没有看到你的HTML DOCTYPE声明,所以我只能假设你的测试页面所呈现的怪癖模式。

  1. 它为什么会退回到PX?像素始终是首选单位? W3C工作草案或建议中是否定义了任何规则?

    它只会回落到px怪癖模式(我只相信某些属性)。是的,px是首选的回退单元。这回顾了传统的HTML widthheight属性,它们将像素长度接受为无单位数。

  2. 是否有规则使UA强制退回到首选设备?

    不,因此您观察到的不一致行为。但在标准模式下,UA需要忽略没有单位的长度值;该单元不是可选的,正如您引用的Microsoft Connect中所述。

    In CSS2.1,所有非零长度值都必须有单位。

  3. 鉴于上述示例,其下面的是一个正确的行为:

    • Internet Explorer中:在怪癖模式(IE6,5,4 ..)宽度和边界宽度用于回退到px。由于IE7(直到现在,IE10RP)它忽略了整个规则,如果单位丢失。因此两条规则都被忽略了。
    • Firefox 13:在上面的例子中宽度回退到px,但是border-width被忽略。
    • Chrome 19,Opera 12,Safari 5.1.2:宽度和边框宽度均回退到px。

    同样,基于在你的网页是在特殊模式的假设,我只能说,虽然规格做出古怪行为一提,这种古怪的行为的具体细节未在规定规格(对于明显的和不明显的原因)。

    我猜测微软改变怪癖模式行为在IE7 +,以反映标准无单位值的行为,因为存在怪癖模式所有浏览器(除IE < 6)被触发以相同的不当DOCTYPE或缺乏的文档类型。尽管我知道标准模式下的行为并没有改变。

+2

这是一个正确的答案。当我使用HTML5的文档类型'<!DOCTYPE html>'时,所有上述浏览器忽略宽度和边框。我从来不知道其他浏览器在怪癖模式下也表现不同。谢谢! –

0
  1. “PX”是最常用的单位,因此通常使用的浏览器有“常识”,并使用“PX”,因为它是在网页设计中最常用的单位,如果未指定单位。
  2. 不,没有这样的规则。浏览器只是使用设计中使用最多的单元。
  3. 理想的行为应该是使用px并继续前进而不忽略其他样式,但是没有这样的规则,所以当你看到不同的浏览器不同的东西时,他们实际上实现了自己的逻辑来对付这样的错误,没有一条规则遵循这种情况。它取决于浏览器的功能。

你不应该依靠浏览器来纠正你的错误。总是靠自己更好的跨浏览器兼容

+0

该问题是由于缺乏文档类型。 –