受这个问题的启发,我发现了这个有趣的现象。
由于负宽度是非法的,因此应该被忽略,我期望像width:-200px;
和width:calc(0% - 200px);
这样的样式属性不会产生任何效果。对于第一个样式属性确实如此,但是对于第二个样式属性,它并没有被忽略:而是使用了0的宽度。
请看下面的例子:
div {border:1px solid; background:lime;}
#badwidth {width:-200px;}
#badcalc {width:calc(0% - 200px);}
Div with bad width:
<div id="badwidth"> </div>
Div with bad calc:
<div id="badcalc"> </div>
为了参考,这里有一些其他的 div,以演示 1)
calc(0% - 200px)
本身并不是错误,2) 它们可以正常工作,第一个代码片段是异常情况。
div {border:1px solid; background:lime;}
#calc {margin-right:calc(0% - 200px);}
Plain div:
<div> </div>
With calc(0% - 200px) in a place where it's OK:
<div id="calc"> </div>
那么,为什么普通宽度和计算宽度的行为不同呢?
如果只是一个浏览器,我会称其为错误。但他们都以相同的方式处理这个问题!所以一定有些东西我忽略了。是什么呢?
width: calc(100% - 500px)
在 500px 及以下的宽度结果为0;如果在0到499px之间宽度回到默认的auto
,我会感到恼火!:-) 对于你提到的0%
的例子,我们人类知道它永远不会产生正值,所以它看起来是一种奇怪的行为,但在其他例子中并非如此。CSS WG 和浏览器供应商必须考虑许多情况。 - FelipeAls