【问题标题】:What's the difference between SCSS and Sass?SCSS 和 Sass 有什么区别?
【发布时间】:2011-08-04 23:54:48
【问题描述】:

根据我的阅读,Sass 是一种通过变量和数学支持使 CSS 更强大的语言。

与 SCSS 有什么区别?它应该是同一种语言吗?相似的?不一样?

【问题讨论】:

标签: css sass


【解决方案1】:

Sass 是一个具有语法改进的 CSS 预处理器。高级语法中的样式表由程序处理,变成常规的 CSS 样式表。但是,它们不会扩展 CSS 标准本身。

CSS 变量受支持并且可以使用,但不如预处理器变量。

关于 SCSS 和 Sass 的区别,Sass documentation page 上的这段文字应该回答了这个问题:

Sass 有两种可用的语法。第一个,称为 SCSS (Sassy CSS),在本参考资料中使用,是 CSS 语法的扩展。这意味着每个有效的 CSS 样式表都是具有相同含义的有效 SCSS 文件。这个语法通过下面描述的 Sass 特性得到了增强。使用此语法的文件具有 .scss 扩展名。

第二种也是较旧的语法,称为 indented syntax (or sometimes just “Sass”),提供了一种更简洁的 CSS 编写方式。它使用缩进而不是括号来表示选择器的嵌套,使用换行符而不是分号来分隔属性。使用此语法的文件具有 .sass 扩展名。

但是,all this works only with the Sass pre-compiler 最终创建了 CSS。它不是 CSS 标准本身的扩展。

【讨论】:

  • 在选择语法时,请记住只有 scss 允许从 stackoverflow 和浏览器的开发工具中复制和粘贴 css,而在 sass 中您总是需要调整语法
  • 另一个问题:截至 2019-05-10,SASS 仍然不支持多行表达式,因此大型列表/映射必须是单行的,使用大量函数调用定义,或者在 SCSS 文件中定义。它似乎仍然是一个计划中的功能,但我不确定是否真的有任何实施进展。
  • @0x1ad2 如今,scsssass 之间的选择不仅仅是个人喜好。 scss 更为普遍 - 用于最流行的 CSS 框架,如 BootstrapFoundationMaterialize 等。主要的 UI 框架默认支持 scss 而不是 sass - Angular、React、Vue。任何教程或演示通常都会使用scss 例如create-react-app facebook.github.io/create-react-app/docs/…
  • 到今天为止,它说“除了一些小例外,它是 CSS 的超集,这意味着基本上所有有效的 CSS 都是有效的 SCSS也一样。” ...如果不提供有关“小例外”的更多详细信息的链接,您根本无法编写类似的内容:(
【解决方案2】:

来自homepage of the language

Sass 有两种语法。 新的主线 语法(从 Sass 3 开始)被称为 “SCSS”(代表“Sassy CSS”),是 CSS3 语法的超集。这意味着 每个有效的 CSS3 样式表都是 有效的 SCSS 也是如此。 SCSS 文件使用 扩展名 .scss。

第二种较旧的语法称为 缩进的语法(或只是“Sass”)。 受 Haml 简洁的启发,它是 适合喜欢的人 简洁性优于与 CSS 的相似性。 代替括号和分号,它 使用行的缩进来 指定块。虽然不再是 主要语法,缩进语法 将继续得到支持。文件 在缩进语法中使用 扩展名 .sass。

SASS 是一种解释 语言,它可以输出 CSS。 Sass 的结构 看起来 像 CSS(远程),但在我看来,描述有点误导;它不是 CSS 的替代品或扩展。它是一个最终吐出 CSS 的解释器,所以 Sass 仍然有普通 CSS 的局限性,但它用简单的代码掩盖了它们。

【讨论】:

    【解决方案3】:

    我是帮助创建 Sass 的开发人员之一。

    区别在于语法。在文字外观之下,它们是相同的。这就是为什么 sass 和 scss 文件可以相互导入的原因。实际上,Sass 有四种语法解析器:scss、sass、CSS 和 less。所有这些都将不同的语法转换为 Abstract Syntax Tree,然后通过 sass-convert 工具将其进一步处理为 CSS 输出,甚至转换为其他格式之一。

    使用您最喜欢的语法,两者都得到完全支持,如果您改变主意,您可以在以后更改它们。

    【讨论】:

    • 请问?我没看错吗? Sass 真的可以正确导入 Less 文件吗? mixins/变量之间有什么协同作用吗?
    • 与标准 CSS 的相似性在小组环境中可能更重要,因为人们需要阅读您的代码,但只是偶尔,而且他们没有时间/兴趣来学习全新的语法。
    • “UI”是指“语言”吗?
    • @djechlin - 是的,我在这里对“UI”的解释是文件的面向程序员的语法。例如分号与否等
    • 是否应该按照@orionelenzil 的建议将答案中的“UI”替换为更普遍理解的术语?
    【解决方案4】:

    基本区别在于语法。虽然 SASS 的语法松散,带有空格且没有分号,但 SCSS 更像 CSS。

    【讨论】:

      【解决方案5】:

      Sass .sass 文件在视觉上与 .scss 文件不同,例如

      Example.sass - sass 是旧语法

      $color: red
      
      =my-border($color)
        border: 1px solid $color
      
      body
        background: $color
        +my-border(green)
      

      Example.scss - sassy css 是 Sass 3 的新语法

      $color: red;
      
      @mixin my-border($color) {
        border: 1px solid $color;
      }
      
      body {
        background: $color;
        @include my-border(green);
      }
      

      只要将扩展名从 .css 更改为 .scss,任何有效的 CSS 文档都可以转换为 Sassy CSS (SCSS)。

      【讨论】:

      • @Novocaine +1,我同意。作为一名 C++ 程序员,我更喜欢括号和分号。顺便说一句,我有一个问题,从.scss.css 的转换是否与.css.scss 相同?
      • 与上面的答案相比,我更关心的是……懒得看;-)
      • @JW.ZG,这不是转换,原生.css 恰好是有效的.scss。一旦您添加了特定于 scss 的代码,将文件名改回最终将成为无效的 css 文件。 css 是正方形,scss 是矩形。所有正方形都是矩形,但并非所有矩形都是正方形。
      • @Grant 除了一些矩形需要修改才能转换为正方形。 CSS 不需要修改就可以转换成 SCSS,它就是这样。
      • 赞成提供代码 sn-ps。其他答案提供了更多背景信息,但这个答案让我快速识别出我过去见过的语法以及看起来很熟悉的语法。
      【解决方案6】:

      Sass 是第一个,语法有点不同。 例如,包含一个 mixin:

      Sass: +mixinname()
      Scss: @include mixinname()
      

      Sass 忽略了大括号和分号并放在嵌套上,我发现它更有用。

      【讨论】:

        【解决方案7】:

        它的语法不同,这是主要的优点(或缺点,取决于您的观点)。

        我会尽量不重复其他人所说的内容,您可以轻松地在 google 上搜索,但相反,我想根据我使用这两种方法的经验说几件事,有时甚至是在同一个项目中。

        SASS 专业版

        • 更简洁——如果你来自 Python、Ruby(你甚至可以用类似符号的语法编写道具)甚至是 CoffeeScript 世界,这对你来说会很自然——在 @ 中编写 mixins、函数和通常任何可重用的东西987654321@ 比.scss 更“容易”和可读(主观)。

        SASS 缺点

        • 空格敏感(主观),我不介意在其他语言中,但在 CSS 中它只是困扰我(问题:复制、制表符与空间战争等)。
        • 没有内联规则(这对我来说是游戏破坏),你不能像在 .scss 中那样 body color: red body {color: red}
        • 导入其他供应商的东西,复制原版 CSS sn-ps - 不是不可能,但一段时间后会很无聊。解决方案是在您的项目中包含.scss 文件(以及.sass 文件)或将它们转换为.sass

        除此之外 - 他们做同样的工作。

        现在,我喜欢在 .sass 中编写 mixins 和变量,如果可能的话,将在 .scss 中实际编译为 CSS 的代码(即 Visual Studio 不支持 .sass,但每当我在 Rails 项目上工作我通常将其中两个组合在一起,而不是在一个文件中 c)。

        最近,我正在考虑给 Stylus 一个机会(作为全职 CSS 预处理器),因为它允许您在一个文件中组合两种语法(以及其他一些功能)。对于团队来说,这可能不是一个好的方向,但是当你独自维护它时 - 没关系。当有语法问题时,手写笔实际上是最灵活的。

        最后是 .scss.sass 语法比较:

        // SCSS
        @mixin cover {
          $color: red;
          @for $i from 1 through 5 {
            &.bg-cover#{$i} { background-color: adjust-hue($color, 15deg * $i) }
          }
        }
        .wrapper { @include cover }
        
        
        // SASS
        =cover
          $color: red
          @for $i from 1 through 5
            &.bg-cover#{$i}
              background-color: adjust-hue($color, 15deg * $i)
        .wrapper
          +cover
        

        【讨论】:

        • @cimmanon 它具有优点和缺点,清楚地说明。这就是这个答案和其他答案的区别。我赞成退出红色。我认为它很有用,即使它具有其他所有 SO 帖子都有的常见的答案重叠维恩图。这对于仅在两条路径上做出选择的人可能更有用。我也认为它比公认的答案好一点,因为它实际上显示了语言的差异,而不是仅仅说“Sass 不同,因为它不是 SCSS”,这对我来说是无用的。我可以不用个人使用的东西,但仍然:)
        【解决方案8】:

        SassSyntactically Awesome StyleSheets)有两种语法:

        • 更新:SCSS (Sassy CSS)
        • 还有一种较旧的原始:缩进语法,即原始 Sass,也称为 Sass

        所以它们都是 Sass 预处理器的一部分,具有两种不同的可能语法。

        SCSS和原版Sass最重要的区别:

        SCSS

        • 语法类似于 CSS(以至于每个常规有效的 CSS3 也是有效的 SCSS,但显然相反的关系不会发生)

        • 使用大括号{}

        • 使用分号;

        • 分配符号是:

        • 要创建一个mixin,它使用@mixin 指令

        • 要使用 mixin,它前面有 @include 指令

        • 文件具有 .scss 扩展名。

        原创Sass

        • 语法类似于 Ruby
        • 没有大括号
        • 没有严格的缩进
        • 没有分号
        • 分配符号是= 而不是:
        • 要创建一个 mixin,它使用 = 符号
        • 要使用 mixin,它前面带有 + 符号
        • 文件具有 .sass 扩展名。

        有些人更喜欢 Sass,这是原始语法 - 而其他人则更喜欢 SCSS。无论哪种方式,但值得注意的是Sass’s indented syntax has not been and will never be deprecated。 (存档)

        使用 sass-convert 进行的转化:

        # Convert Sass to SCSS
        $ sass-convert style.sass style.scss
        
        # Convert SCSS to Sass
        $ sass-convert style.scss style.sass
        

        The Sass and SCSS documentation

        【讨论】:

        • 奇怪的是,如此清晰简洁的答案比其他人的得票少。我一直在通过大量资源来了解 Sass 和 Scss 之间的区别,最终发现这一点立即启发了我。干得好,除了一些拼写/语法错误。
        • @TonyNg 谢谢。我很高兴能帮助你。关于要点,这是非常肯定的,因为我回答得很晚——大约是在提问后 6 年。如有拼写或语法错误,请随时纠正我。
        • 添加一个简单的例子来展示不同的语法,这个答案将是完美的。
        【解决方案9】:

        sass是ruby语法,类似于ruby、jade等...

        在这些语法中,我们不使用{},而是使用空格,也没有使用;...

        scss 中的语法更像CSS,但有更多选项,例如:嵌套、声明等,类似于less 和其他预处理CSS ...

        他们基本上做同样的事情,但我放了几行来看看语法差异,看看{};spaces

        SASS:

        $width: 100px
        $color: green
        
        div
          width: $width
          background-color: $color
        

        SCSS:

        $width: 100px;
        $color: green;
        
        div {
          width: $width;
          background-color: $color;
        }
        

        【讨论】:

        • Ruby Sass 是 Sass 的原始实现,但它在 2019 年 3 月 26 日达到了生命周期的尽头。Dart Sass 现在是 Sass 的主要实现。
        【解决方案10】:

        Difference between SASS and SCSS 文章详细解释了差异。不要对 SASS 和 SCSS 选项感到困惑,虽然我最初也是,.scss 是 Sassy CSS 并且是 .sass 的下一代。

        如果这没有意义,您可以在下面的代码中看到不同之处。

        /* SCSS */
        $blue: #3bbfce;
        $margin: 16px;
        
        .content-navigation {
          border-color: $blue;
          color: darken($blue, 9%);
        }
        
        .border {
          padding: $margin / 2; margin: $margin / 2; border-color: $blue;
        }
        

        在上面的代码中我们使用 ;将声明分开。我什至将 .border 的所有声明添加到一行中以进一步说明这一点。 相比之下,下面的 SASS 代码必须在不同的行上并带有缩进,并且没有使用;。

        /* SASS */
        $blue: #3bbfce
        $margin: 16px
        
        .content-navigation
          border-color: $blue
          color: darken($blue, 9%)
        
        .border
          padding: $margin / 2
          margin: $margin / 2
          border-color: $blue
        

        您可以从下面的 CSS 中看到,与旧的 SASS 方法相比,SCSS 样式更类似于常规 CSS。

        /* CSS */
        .content-navigation {
          border-color: #3bbfce;
          color: #2b9eab;
        }
        
        .border {
          padding: 8px;
          margin: 8px;
          border-color: #3bbfce;
        }
        

        我认为这些天大多数时候,如果有人提到他们正在使用 Sass,他们指的是使用 .scss 而不是传统的 .sass 方式进行创作。

        【讨论】:

          【解决方案11】:

          简洁的答案:

          SCSS 指的是 Sass CSS 预处理器支持的主要语法

          • .scss 结尾的文件代表Sass 支持的标准语法。 SCSS 是 CSS 的超集。
          • .sass 结尾的文件代表源自 Ruby 世界的 Sass 支持的“旧”语法。

          【讨论】:

          • Ruby Sass 是 Sass 的原始实现,但它在 2019 年 3 月 26 日达到了生命周期的尽头。Dart Sass 现在是 Sass 的主要实现。
          【解决方案12】:

          SASS 代表 Syntactically Awesome StyleSheets。这是一个扩展 CSS 为基本语言增添了力量和优雅。 SASS 是 新命名为 SCSS 有一些变化,但旧的 SASS 也是 那里。在使用 SCSS 或 SASS 之前,请先查看以下区别。

          一些 SCSS 和 SASS 语法的示例:

          SCSS

          $font-stack:    Helvetica, sans-serif;
          $primary-color: #333;
          
          body {
            font: 100% $font-stack;
            color: $primary-color;
          }
          
          //Mixins
          @mixin transform($property) {
            -webkit-transform: $property;
                -ms-transform: $property;
                    transform: $property;
          }
          
          .box { @include transform(rotate(30deg)); }
          

          SASS

          $font-stack:    Helvetica, sans-serif
          $primary-color: #333
          
          body
            font: 100% $font-stack
            color: $primary-color
          
          //Mixins
          =transform($property)
            -webkit-transform: $property
            -ms-transform:     $property
            transform:         $property
          
          .box
            +transform(rotate(30deg))
          

          编译后输出 CSS(两者相同)

          body {
            font: 100% Helvetica, sans-serif;
            color: #333;
          }
          //Mixins
          .box {
            -webkit-transform: rotate(30deg);
            -ms-transform: rotate(30deg);
            transform: rotate(30deg);
          }
          

          更多攻略可以看官方website

          【讨论】:

          • Ruby Sass 是 Sass 的原始实现,但它在 2019 年 3 月 26 日达到了生命周期的尽头。Dart Sass 现在是 Sass 的主要实现。
          【解决方案13】:

          SASS 是语法上很棒的样式表,是 CSS 的扩展,它提供了嵌套规则、继承、混合等功能,而 SCSS 是类似于 CSS 的 Sassy 级联样式表,填补了 CSS 和 SASS 之间的空白和不兼容性.它是在麻省理工学院许可下获得许可的。 这篇文章有更多关于差异的内容:https://www.educba.com/sass-vs-scss/

          【讨论】:

            【解决方案14】:

            SCSS 是 Sass 的新语法。在扩展方面,.sass 用于 SASS,而 .scss 用于 SCSS。在这里,SCSS 比 SASS 具有更合乎逻辑和更复杂的编码方法。 因此,对于软件领域的新手来说,更好的选择是 SCSS。

            【讨论】:

              【解决方案15】:

              发现自己也在想同样的事情,并在Harvard's CS50 中偶然发现了一个直截了当的解释:

              一种称为 Sass 的语言 ...(是)本质上是 CSS 的扩展 ...它为 CSS 添加了额外的功能 ...只是为了让它更强大一点供我们使用。

              Sass 的一个关键特性是能够使用变量

              Sass 扩展名是 .scss(相对于常规 CSS 文件的 .css)。

              所以,当我们问“scss 和 sass 有什么区别?”时- 答案可能只是 .scss 只是希望使用 Sass 而不是常规 CSS 时使用的文件扩展名。

              【讨论】:

                猜你喜欢
                • 2017-04-20
                • 2017-02-12
                • 2013-05-28
                • 2018-03-06
                • 1970-01-01
                • 2020-10-26
                • 2017-01-08
                • 2017-11-13
                相关资源
                最近更新 更多