在什么情况下,简写CSS属性要求用空格分隔纵向组件?

时间:2017-09-22 17:18:33

标签: css shorthand

我99%确定没有必要在CSS属性的值中使用浮点数的前导零,但我想确定,所以我在Codepen(here is the JSFiddle上测试了以下动画,因为我不知道拥有Codepen帐户)。 CSS就是这样:

div {animation:xxx infinite .99s; width: 100px; height: 100px; background: linear-gradient(to right,gold,green,blue,red,black)}
@keyframes xxx {from {margin-left: 10px} to {margin-left: 1000px}}

然后我做了一个拼写错误 - 在这个过程中学到了一些关于CSS的东西!我删除了"无限"之间的空格。 animation-iteration-count属性值和" .99s"对于animation-duration,并注意到它没有打破动画(see this JSFiddle):

div {animation:xxx infinite.99s; width: 100px; height: 100px; background: linear-gradient(to right,gold,green,blue,red,black)} // deleted space between infinite and .99s
@keyframes xxx {from {margin-left: 10px} to {margin-left: 1000px}}

我转到W3文档获取css动画 - 特别是the animation property,即使示例(示例#6)显示<single-animation>具有空格分隔的longhand属性值,也无处(我发现)它是否说空格是必需的(我抬起double bar ||并且我没有看到任何必要的空格。)

值得注意的是,以下内容(在.99的小数点之前插入&#34; 0&#34;)会中断动画(Fiddled here):

div {animation:xxx infinite0.99s; width: 100px; height: 100px; background: linear-gradient(to right,gold,green,blue,red,black)} // added a "0" between infinite and .99s
@keyframes xxx {from {margin-left: 10px} to {margin-left: 1000px}}

我想测试某种普遍性,并使用简写border属性找到another case

div {animation: xxx infinite0.99s; width: 100px; height: 100px; background: green; border: solid red.99px}
@keyframes xxx {from {margin-left: 10px} to {margin-left: 1000px}}

我使用&#34; 0&#34;重复上述相同的操作。并得到了相同的结果。

在什么情况下,简写CSS属性 REQUIRE 用空格分隔长手组件?

1 个答案:

答案 0 :(得分:3)

从CSS2规范链接到:

  

组件值以令牌的形式指定,如Appendix G.2中所述。由于语法允许expr生成的组件中的标记之间存在空格,因此空格可能出现在属性值的标记之间。

简而言之,在遗漏空间会导致两个令牌被解析为一个令牌的情况下,需要空格。当然,明显的例子是border: 1px solid red,其中省略空格将导致单个维度令牌1pxsolidred,这是无效的,因为没有这样的单位&#34; pxsolidred&# 34 ;.几乎所有时间都是如此,这就是为什么你几乎一直看到分隔元素值的空间。

在CSS语法中,infinite.99s始终可以解析为两个令牌:ident,infinite和数量.99s,因为句点通常不会出现在ident中(除非逃脱)。因此,没有必要用空格分隔这两个值。