没有单位的CSS属性的后备

时间:2012-06-30 14:33:34

标签: html css cross-browser w3c

考虑CSS属性缺少单位的场景(px,em,pt,%):

<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:在Quirks模式下(IE6,5,4 ..)宽度和边框宽度用于回退到px。从IE7(直到现在,IE10RP)开始,如果缺少单元,它将忽略整个规则。因此,这两条规则都被忽略了。
    • Firefox 13:在上面的示例中,宽度回退到px,但忽略了border-width。
    • Chrome 19,Opera 12,Safari 5.1.2:宽度和边框宽度都回退到px。
  4. 注意:在Microsoft-Connect上,他们说:

      

    您报告的问题是设计问题。标准模式下的IE10忽略宽度或高度,没有符合CSS标准的单元。 该单位不是可选的。

2 个答案:

答案 0 :(得分:15)

我在HTML中看不到doctype声明,所以我只能假设你的测试页面是以怪癖模式呈现的。

  1.   

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

    它只会在怪癖模式下回落到px(我相信只适用于某些属性)。是的,px是首选的后备单位。这可以追溯到遗留的HTML widthheight属性,这些属性将像素长度视为无单位数。

  2.   

    是否有规则要求UA必须回退到首选单位?

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

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

  3.   

    鉴于以上示例,以下哪项是正确的行为:

         
        
    • Internet Explorer:在Quirks模式下(IE6,5,4 ..)宽度和边框宽度用于回退到px。从IE7(直到现在,IE10RP)开始,如果缺少单元,它将忽略整个规则。因此,这两条规则都被忽略了。
    •   
    • Firefox 13:在上面的示例中,宽度回退到px,但忽略了border-width。
    •   
    • Chrome 19,Opera 12,Safari 5.1.2:宽度和边框宽度都回退到px。
    •   

    同样,基于您的页面处于怪癖模式的假设,我只能说虽然规范提到了古怪的行为,但这些古怪行为的具体细节并未在规范中定义(对于明显的和不那么明显的原因)。

    我猜测Microsoft改变了IE7 +中的怪癖模式行为以反映无单位值的标准行为,因为所有浏览器(IE&lt; 6除外)中存在怪癖模式并被触发使用相同的不正确的doctype或缺少doctype。但是,据我所知,标准模式下的行为没有改变。

答案 1 :(得分:0)

  1. px是最常用的单位,因此通常浏览器使用其“常识”并使用px,因为如果未指定单位,它是网页设计中使用最多的单位。
  2. 没有这样的规则。浏览器只使用设计中最常用的单元。
  3. 理想的行为应该是使用px并继续前进而不忽略其他样式,但是没有这样的规则,所以当你看到不同的浏览器不同的东西时,他们实际上有自己的逻辑来对抗这些错误。在这种情况下没有人遵守规则。这取决于浏览器的功能。
  4. 您永远不应该依赖浏览器来纠正您的错误。始终依靠自己以获得更好的跨浏览器兼容性