没有单位的CSS属性的后备

vul*_*ven 7 html css w3c cross-browser

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

<body>
    <div 
        style=  "width:170;
                border:1 dotted PaleGreen;
                background-color:MistyRose">
        The quick brown
    </div>
</body>
Run Code Online (Sandbox Code Playgroud)

问题:

  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.

注意:在Microsoft-Connect上,他们说:

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

Bol*_*ock 16

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

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

    它只会回到px怪癖模式(我相信只有某些属性).是的,px是首选的后备单位.这可以追溯到传统的HTML widthheight属性,它们将像素长度视为无单位数.

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

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

    在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.

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

    我猜测微软改变了IE7 +中的怪癖模式行为,以反映无单位值的标准行为,因为所有浏览器存在怪癖模式(IE <6除外)并且由相同的不正确的doctype或缺少doctype触发.据我所知,标准模式下的行为并没有改变.

  • 这是一个正确的答案.当我使用HTML5的doctype` <!DOCTYPE html>`时,所有上述浏览器都会忽略宽度和边框.我从来不知道其他浏览器在怪癖模式下的行为也不同.谢谢! (3认同)