SASS:表达式还是纯CSS斜杠?

时间:2015-05-07 09:40:18

标签: css parsing compiler-construction sass

我目前正在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规范中有太多含糊不清的语法......)

所以这就是问题:

  1. 如何使表达式语法保持一致,避免普通CSS' /'之间的隐式行为。划分算子? (如果我们不考虑SASS的兼容性)

  2. 你会做什么?

  3. 谢谢

1 个答案:

答案 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对您来说并不是一个坏主意,看看他们说了什么。