Closed army8735 closed 9 years ago
简而言之,变量声明、函数参数:
$a = ~"margin:0;padding:0";
div {
$fn(~"margin:0")
}
都是去除外层引号,unbox的作用就是如此:字符串中可以出现本来不可出现的,和;等特殊符号——它们会干扰语法解析。
font-family中原本的特殊逻辑:
a{font-family:~"arail, 宋体"}
没有去除引号,而是按,split了下。
a{font-family:"arail", "宋体"}
如果统一unbox逻辑,则会对低版本浏览器造成伤害。
a{font-family:arail,宋体}
当字体出现空格和非英文时,记得低ie下有问题。
@hax 我又来打扰你了
unbox本身的作用我没搞明白。
$a = ~"margin:0;padding:0";
跟没有~
的 $a = "margin:0;padding:0";
的区别是?
普通是
$a : 0;
$a = margin:0;
$a = 1px 2px 3px 4px;
没引号的,引号是字符串了。变量可以是数字等基础变量,也可以是样式的值或整个样式这种复合变量。
变量申明以;结尾,以,分隔。
如果出现;就认为结束了。于是当后面的值中出现;,这样的符号时会影响解析。比如声明了2个样式,中间自然有个;。
同理在fn参数中:
$fn(rgba(0,0,0,0.5))
整个应该是一个参数,但因为参数以,分隔,导致解析到第一个0后发生错误。此时unbox就是把整个用~""包含起来,于是里面可以出现特殊符号不影响解析。
$fn(~"rgba(0,0,0,0.5)")
以我的理解,这本来可以用更简单的 \ 来escape嘛:
$a = margin:0\; padding:0
但就本身这个case而言,我理解为 font-family 的赋值带有特别的 serialize 规则。本身和unbox的行为并不矛盾。
~""为unbox语法。
fn的param、vardecl的赋值都是去除引号,而style的value中则多了split(',')的逻辑,考虑是否保持一致