Haskell 想用卢修斯或卡修斯取代萨斯,但遇到了问题

Haskell 想用卢修斯或卡修斯取代萨斯,但遇到了问题,haskell,yesod,Haskell,Yesod,我想用Lucius或Cassius替换我的sass(scss格式)文件,但我遇到了问题 我更喜欢对空格敏感的Cassius,但它的功能不如Lucius。似乎没有人支持卡修斯。只在卢修斯 Lucius中的mixin支持比Sass中的功能更少。使用sass,mixin可以有属性和选择器。它基本上是一个带有可选替换的替换宏。对于卢修斯,我只能使用属性。其他选择器将被静默忽略 这在Sass中是合法的: @mixin addMarkup{ 颜色:#FF00CC; a{ 文字装饰:无; @包括修改父项; }

我想用Lucius或Cassius替换我的sass(scss格式)文件,但我遇到了问题

我更喜欢对空格敏感的Cassius,但它的功能不如Lucius。似乎没有人支持卡修斯。只在卢修斯

Lucius中的mixin支持比Sass中的功能更少。使用sass,mixin可以有属性和选择器。它基本上是一个带有可选替换的替换宏。对于卢修斯,我只能使用属性。其他选择器将被静默忽略

这在Sass中是合法的:

@mixin addMarkup{
颜色:#FF00CC;
a{
文字装饰:无;
@包括修改父项;
}
}
@mixin修饰亲本{
&.某些类{float:right};
}
身体{
@包括添加标记;
}
也就是说:

body { color: #FF00CC; }
body a { text-decoration: none; }
body a.some-class { float: right; }
有没有一种简单的方法可以用Lucius替换这种语法?卢修斯可以处理第一次混音的第一行,但它会默默地忽略其他行。在第二个mixin中,我没有看到一种简单的方法来替换引用父选择器的“&”,这样您就可以跨选择器重用属性

我在卢修斯身上试过

{-#语言准语言}
导入文本。卢修斯
将限定的Data.Text.Lazy.IO导入为TLIO
渲染器=未定义
添加标记=
[卢修斯标记]|
颜色:#FF00CC;
a{
文字装饰:无;
^{modifyParent}
}
|]
修改父项=
[卢修斯米辛|
.某个班级{
浮动:对;
}
|]
多年电价标准=
[卢修斯|
身体{
^{addMarkup}
}
|]
main=TLIO.putStrLn$renderCss$myCSS渲染器
但它只显示

body{color:#FF00CC}

在Lucius中,一组CSS属性可以作为mixin创建,并在多个声明中重用。因此,当您想要重用某些属性时,我会这样做:

  • 将要重复使用的一组属性分组。使用
    luciusMixin
    将它们创建为mixin
  • 将混合器添加到
    lucius
    quasiqouter中所需的适当位置
此代码将生成所需的CSS

{-# LANGUAGE QuasiQuotes #-}
import Text.Lucius
import qualified Data.Text.Lazy.IO as TLIO

renderer = undefined

colorMixin = [luciusMixin|
              color: #FF00CC;
|]

anchorMixin = [luciusMixin|
               text-decoration:none;
|]

floatMixin = [luciusMixin|
              float:right;
              |]

myCSS =
    [lucius|
        body {
          ^{colorMixin}
          a {^{anchorMixin}}
          a.some-class { ^{floatMixin}
}
   } |]

main = TLIO.putStrLn $ renderCss $ myCSS renderer

换句话说,不,没有简单的方法来替换。基本上你必须自己做SASS所做的转换。@Cubic是的,我想是的。但是,如果您正在使用SAAS,请坚持使用它。没有必要把它变回卢修斯或卡修斯。只需将它生成的CSS包含在您的Yesod模板中。