【发布时间】:2011-08-04 23:54:48
【问题描述】:
根据我的阅读,Sass 是一种通过变量和数学支持使 CSS 更强大的语言。
与 SCSS 有什么区别?它应该是同一种语言吗?相似的?不一样?
【问题讨论】:
-
任何想知道 scss 和 sass 语法有什么区别的人,请参阅stackoverflow.com/a/55254450/8810941
根据我的阅读,Sass 是一种通过变量和数学支持使 CSS 更强大的语言。
与 SCSS 有什么区别?它应该是同一种语言吗?相似的?不一样?
【问题讨论】:
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 和 sass 之间的选择不仅仅是个人喜好。 scss 更为普遍 - 用于最流行的 CSS 框架,如 Bootstrap、Foundation、Materialize 等。主要的 UI 框架默认支持 scss 而不是 sass - Angular、React、Vue。任何教程或演示通常都会使用scss 例如create-react-app facebook.github.io/create-react-app/docs/…
Sass 有两种语法。 新的主线 语法(从 Sass 3 开始)被称为 “SCSS”(代表“Sassy CSS”),是 CSS3 语法的超集。这意味着 每个有效的 CSS3 样式表都是 有效的 SCSS 也是如此。 SCSS 文件使用 扩展名 .scss。
第二种较旧的语法称为 缩进的语法(或只是“Sass”)。 受 Haml 简洁的启发,它是 适合喜欢的人 简洁性优于与 CSS 的相似性。 代替括号和分号,它 使用行的缩进来 指定块。虽然不再是 主要语法,缩进语法 将继续得到支持。文件 在缩进语法中使用 扩展名 .sass。
SASS 是一种解释 语言,它可以输出 CSS。 Sass 的结构 看起来 像 CSS(远程),但在我看来,描述有点误导;它不是 CSS 的替代品或扩展。它是一个最终吐出 CSS 的解释器,所以 Sass 仍然有普通 CSS 的局限性,但它用简单的代码掩盖了它们。
【讨论】:
我是帮助创建 Sass 的开发人员之一。
区别在于语法。在文字外观之下,它们是相同的。这就是为什么 sass 和 scss 文件可以相互导入的原因。实际上,Sass 有四种语法解析器:scss、sass、CSS 和 less。所有这些都将不同的语法转换为 Abstract Syntax Tree,然后通过 sass-convert 工具将其进一步处理为 CSS 输出,甚至转换为其他格式之一。
使用您最喜欢的语法,两者都得到完全支持,如果您改变主意,您可以在以后更改它们。
【讨论】:
基本区别在于语法。虽然 SASS 的语法松散,带有空格且没有分号,但 SCSS 更像 CSS。
【讨论】:
Sass .sass 文件在视觉上与 .scss 文件不同,例如
$color: red
=my-border($color)
border: 1px solid $color
body
background: $color
+my-border(green)
$color: red;
@mixin my-border($color) {
border: 1px solid $color;
}
body {
background: $color;
@include my-border(green);
}
只要将扩展名从 .css 更改为 .scss,任何有效的 CSS 文档都可以转换为 Sassy CSS (SCSS)。
【讨论】:
.scss 到.css 的转换是否与.css 到.scss 相同?
.css 恰好是有效的.scss。一旦您添加了特定于 scss 的代码,将文件名改回最终将成为无效的 css 文件。 css 是正方形,scss 是矩形。所有正方形都是矩形,但并非所有矩形都是正方形。
Sass 是第一个,语法有点不同。 例如,包含一个 mixin:
Sass: +mixinname()
Scss: @include mixinname()
Sass 忽略了大括号和分号并放在嵌套上,我发现它更有用。
【讨论】:
它的语法不同,这是主要的优点(或缺点,取决于您的观点)。
我会尽量不重复其他人所说的内容,您可以轻松地在 google 上搜索,但相反,我想根据我使用这两种方法的经验说几件事,有时甚至是在同一个项目中。
SASS 专业版
.scss 更“容易”和可读(主观)。SASS 缺点
body color: red body {color: red}
.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
【讨论】:
Sass(Syntactically Awesome StyleSheets)有两种语法:
所以它们都是 Sass 预处理器的一部分,具有两种不同的可能语法。
SCSS和原版Sass最重要的区别:
SCSS:
语法类似于 CSS(以至于每个常规有效的 CSS3 也是有效的 SCSS,但显然相反的关系不会发生)
使用大括号{}
使用分号;
分配符号是:
要创建一个mixin,它使用@mixin 指令
要使用 mixin,它前面有 @include 指令
文件具有 .scss 扩展名。
原创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
【讨论】:
原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;
}
【讨论】:
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 方式进行创作。
【讨论】:
简洁的答案:
SCSS 指的是 Sass CSS 预处理器支持的主要语法。
.scss 结尾的文件代表Sass 支持的标准语法。 SCSS 是 CSS 的超集。.sass 结尾的文件代表源自 Ruby 世界的 Sass 支持的“旧”语法。【讨论】:
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。
【讨论】:
SASS 是语法上很棒的样式表,是 CSS 的扩展,它提供了嵌套规则、继承、混合等功能,而 SCSS 是类似于 CSS 的 Sassy 级联样式表,填补了 CSS 和 SASS 之间的空白和不兼容性.它是在麻省理工学院许可下获得许可的。 这篇文章有更多关于差异的内容:https://www.educba.com/sass-vs-scss/
【讨论】:
SCSS 是 Sass 的新语法。在扩展方面,.sass 用于 SASS,而 .scss 用于 SCSS。在这里,SCSS 比 SASS 具有更合乎逻辑和更复杂的编码方法。 因此,对于软件领域的新手来说,更好的选择是 SCSS。
【讨论】:
发现自己也在想同样的事情,并在Harvard's CS50 中偶然发现了一个直截了当的解释:
一种称为 Sass 的语言 ...(是)本质上是 CSS 的扩展 ...它为 CSS 添加了额外的功能 ...只是为了让它更强大一点供我们使用。
Sass 的一个关键特性是能够使用变量
Sass 扩展名是 .scss(相对于常规 CSS 文件的 .css)。
所以,当我们问“scss 和 sass 有什么区别?”时- 答案可能只是 .scss 只是希望使用 Sass 而不是常规 CSS 时使用的文件扩展名。
【讨论】: