我目前正在Go - c6中实现一个SASS编译器,当我编写表达式解析器和赋值器时,我发现了一些Ruby SASS编译器的奇怪行为。
SASS参考文献提到了简单的CSS' /'和SASS分部表达式: http://sass-lang.com/documentation/file.SASS_REFERENCE.html#division-and-slash
设计是使SASS与本机CSS语法兼容,如下所示:
font: 10px/8px; // Plain CSS, no division. looks fine.
font: 10px/8px + 3px; // Expression
font: (10px/8px); // Expression
以上似乎没问题,但如果你写:
.foo {
$a: 10px/8px;
font: $a;
}
以上将编译为:
.foo {
font: 1.25; }
以下SASS中的正常表达式将始终为不带括号的表达式:
.foo {
padding: 2px+2px;
padding: 2px*3;
}
输出:
.foo {
padding: 4px;
padding: 6px; }
然而,以下SASS会产生不同的结果:
.foo {
padding: 2px-1px;
padding: 2px - 1px;
}
以上将编译为:
.foo {
padding: 2px-1px; // treated as ident instead of expression
padding: 1px; }
似乎除法运算符是属性值的唯一例外,这使得语法不一致且不明确。 (实际上SASS规范中有太多含糊不清的语法......)
所以这就是问题:
如何使表达式语法保持一致,避免普通CSS' /'之间的隐式行为。划分算子? (如果我们不考虑SASS的兼容性)
你会做什么?
谢谢
答案 0 :(得分:0)
这是一种已知的语法歧义。先前已在Some workarounds上讨论了SASS github page。但是从那里开始,我无法提出更好的建议:(
我该怎么办?它不是特别适合StackOverflow,但让我来看看你提供的if [[ ! $1 =~ ^(1|2|3)$ ]]; then
echo "the number is not 1, 2 or 3"
exit 1
fi
示例。您使用变量,因此我假设它是您打算多次使用的样式值。值本身(font: 10px/8px
)似乎非常明确地用于10px/8px
,因此我会采用稍微不同的方法,并使用font
:
%silent-class
这正确编译,没有分裂:
%font {
font: 10px/8px;
}
.foo {
@extend %font;
// more styling here
}
.bar {
@extend %font;
// etc
}
对于.foo {
font: 10px/8px;
}
.bar {
font: 10px/8px;
}
示例,我认为这只是差的一致性。希望他们能在不久的将来纠正这个问题。如果还没有完成,如果您对此感到强烈,submit an issue对您来说并不是一个坏主意,看看他们说了什么。