<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ SASS - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ freeCodeCamp 是一个免费学习编程的开发者社区，涵盖 Python、HTML、CSS、React、Vue、BootStrap、JSON 教程等，还有活跃的技术论坛和丰富的社区活动，在你学习编程和找工作时为你提供建议和帮助。 ]]>
        </description>
        <link>https://www.freecodecamp.org/chinese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ SASS - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/chinese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Thu, 11 Jun 2026 20:33:11 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/chinese/news/tag/sass/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ SASS 初学者指南 ]]>
                </title>
                <description>
                    <![CDATA[ 原文：The Beginner's Guide to Sass [https://www.freecodecamp.org/news/the-beginners-guide-to-sass/]，作者：Israel Mitolu [https://www.freecodecamp.org/news/author/israelmitolu/] 你是否好奇SASS到底是什么？或者你已经知道SASS，但还没来得及去学习和使用。 不论你是首次学习SASS，还是更新这个主题的知识，这篇文章都很适合你。 在这篇文章中，你将学习到SASS的基础，SASS到底是什么，如果使用SASS超棒的功能来提速书写样式的过程。 前提条件 这本文章默认你：  * 基本了解HTML和CSS  * 安装了代码编辑器（推荐使用VS Code。如果你尚未安装，可以在此处下载 [http://code.visualstudio.com/]  * 安装了浏览器（推荐使用Chrome或者Firefox） 究竟什么是SASS SASS（英文全称是Syntactically Awesome Style Sheets）是一种 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/the-beginners-guide-to-sass/</link>
                <guid isPermaLink="false">626257da99ec7406219e75a0</guid>
                
                    <category>
                        <![CDATA[ SASS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ PapayaHUANG ]]>
                </dc:creator>
                <pubDate>Fri, 22 Apr 2022 05:02:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/04/1_NlqpTTAM8DbGl4paBmjE_g.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>原文：<a href="https://www.freecodecamp.org/news/the-beginners-guide-to-sass/">The Beginner's Guide to Sass</a>，作者：<a href="https://www.freecodecamp.org/news/author/israelmitolu/">Israel Mitolu</a></p><!--kg-card-begin: markdown--><p>你是否好奇SASS到底是什么？或者你已经知道SASS，但还没来得及去学习和使用。</p>
<p>不论你是首次学习SASS，还是更新这个主题的知识，这篇文章都很适合你。</p>
<p>在这篇文章中，你将学习到SASS的基础，SASS到底是什么，如果使用SASS超棒的功能来提速书写样式的过程。</p>
<h2 id="">前提条件</h2>
<p>这本文章默认你：</p>
<ul>
<li>基本了解HTML和CSS</li>
<li>安装了代码编辑器（推荐使用VS Code。如果你尚未安装，可以在此处<a href="http://code.visualstudio.com/">下载</a></li>
<li>安装了浏览器（推荐使用Chrome或者Firefox）</li>
</ul>
<h2 id="sass">究竟什么是SASS</h2>
<p>SASS（英文全称是Syntactically Awesome Style Sheets）是一种CSS预处理器，使用它可以使你的CSS拥有超能力。</p>
<p>你不得不承认：常常你会觉得用CSS写样式很困难，特别是现在用户交互界面（UI）变得越来越复杂。</p>
<p>你会发现自己经常都在做重复的工作。</p>
<p>SASS就可以解决这个问题，在你写样式的时候，帮助你坚守DRY（Do Not Repeat Yourself不重复自己）准则。</p>
<p>SASS的编译器可以让我们用两种语法来写样式表——缩进语法和SCSS。下文会逐个讲解。</p>
<h3 id="">缩进语法</h3>
<p>缩进语法是SASS的原始语法，采用缩进的格式，但是取消了花括号和分号。 其文件扩展名为 <code>.sass</code>。</p>
<pre><code class="language-sass">nav
  ul
    margin: 0
    padding: 0
    list-style: none

  li
    display: inline-block

  a
    display: block
    text-decoration: none
</code></pre>
<h3 id="scss">SCSS语法</h3>
<p>相比缩进语法，这个语法较新也更受欢迎。SCSS语法实质是CSS3语法的子集。这意味着你可以给常规的 CSS 增加一些功能。</p>
<p>由于是在CSS的基础上提供高级功能，所以SCSS语法又被称作 <em>Sassy CSS</em>。其文件扩展名为 <code>.scss</code>。</p>
<pre><code class="language-scss">nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }
  li {
    display: inline-block;
  }

  a {
    display: block;
    text-decoration: none;
  }
}
</code></pre>
<blockquote>
<p>免责声明: 本文使用SCSS语法是因为SCSS语法被更多人使用。</p>
</blockquote>
<h2 id="sass">SASS的工作机制</h2>
<p>当你写了一个扩展名为 <code>.scss</code>的文件，该文件会被编译成正常的CSS文件。然后CSS代码在浏览器加载。<br>
这就是为什么我们称SASS为预处理器。</p>
<h2 id="sass">为什么要使用SASS?</h2>
<ul>
<li><strong>易于学习</strong>: 如果你已经熟悉CSS，你会欣喜地发现SASS和CSS的语法很相似，所以看完这篇教程，你就可以开始使用SASS了;)</li>
<li><strong>兼容性强</strong>: SASS兼容所有版本的CSS，所以你可以使用所有CSS库。</li>
<li><strong>提高效率</strong>: SASS强大的功能可以避免CSS的重复。</li>
<li><strong>可复用的代码</strong>: SASS中可以使用变量和代码块（mixins），并且可以重复使用。这样就节约了时间，提高了编写代码的速度。</li>
<li><strong>有条理的代码</strong>: 在SASS中可以使用片段（partials）来整理代码。</li>
<li><strong>跨浏览器兼容</strong>: SASS会被编译成CSS，并且自动添加浏览器引擎前缀，这样你就不需要手动编写了。</li>
</ul>
<h2 id="sass">SASS的功能</h2>
<p>以下功能使得SASS成为拥有超能力的CSS：</p>
<h3 id="sass">SASS中的变量</h3>
<p>在SASS中可以声明变量，这是SASS其中一个强大的功能，因为我们可以根据各种属性来定义变量，并且在任何文件中使用这些变量。</p>
<p>使用变量的好处是，一旦值发生了变化，你只要编写一行代码进行修改。</p>
<p>具体操作办法是使用美元符号 <code>$</code>来命名变量， 然后在你代码的其他地方引用这个变量。</p>
<pre><code class="language-scss">$primary-color: #24a0ed;

.text {
  color: $primary-color;
}
button {
  color: $primary-color;
  border: 2px solid $primary-color;
}
</code></pre>
<h3 id="sass">SASS中的嵌套</h3>
<p>在写CSS的时候，大多数情况下需要重复类选择器，在SASS中我们可以在父元素中嵌套来避免这样的重复。</p>
<p>在CSS中：</p>
<pre><code class="language-css">nav {
  height: 10vh;
  width: 100%;
  display: flex;
}

nav ul {
  list-style: none;
  display: flex;
}

nav li {
  margin-right: 2.5rem;
}

nav li a {
  text-decoration: none;
  color: #707070;
}

nav li a:hover {
  color: #069c54;
}
</code></pre>
<p>在SASS，同样的代码可以写作：</p>
<pre><code class="language-scss">nav {
  height: 10vh;
  width: 100%;
  display: flex;

  ul {
    list-style: none;
    display: flex;
  }

  li {
    margin-right: 2.5rem;

    a {
      text-decoration: none;
      color: #707070;

      &amp;:hover {
        color: #069c54;
      }
    }
  }
}
</code></pre>
<h3 id="">父选择器</h3>
<p>在上面SASS的代码片段中你可能注意到了和号 <code>&amp;</code> 搭配了一个悬停的伪类。这就是父选择器。</p>
<blockquote>
<p>父选择器——<code>&amp;</code>是SASS中一个特殊的选择器，一般用于嵌套选择器中，指代外层的选择器。 资源出处 – <a href="https://sass-lang.com/documentation/style-rules/parent-selector">Sass文档</a></p>
</blockquote>
<p>所以在上面的代码片段中， <code>&amp;</code>指代的父元素是锚点标签<code>a</code>。</p>
<blockquote>
<p>你可以查阅我的<a href="https://israelmitolu.hashnode.dev/writing-cleaner-css-using-bem-methodology">文章</a>，该讲解了如何在Sass中应用BEM。</p>
</blockquote>
<h3 id="sass">Sass中片段</h3>
<p>这是SASS众多给你赋能的炫酷功能之一。</p>
<p>随着样式表越来越大，维护变得越来越困难。因此，把样式表拆分成更小的单元块变得有意义。换句话说，片段帮助你更好去组织和构建你的代码。</p>
<p>声明一个片段，我们首先要创建一个文件，以下划线<code>_</code>打头为文件名，然后使用<code>@import</code>指令在其他SASS文件中引用这个片段。</p>
<p>例如，我如果我们有<code>_globals.scss</code>、<code>_variables.scss</code>和<code>_buttons.scss</code>三个文件， 我们可以在 <code>main.scss</code>中引用这三个文件：</p>
<pre><code class="language-scss">@import "globals";
@import "variables";
@import "buttons";
</code></pre>
<p>你可能注意到<code>.scss</code>后缀并没有被加入， 这是因为Sass会默认你添加的是<code>.sass</code>或<code>.scss</code>文件。</p>
<h3 id="sassmixins">SASS中的Mixins</h3>
<p>在CSS中另一个主要的问题是你会经常重复同一组样式，Mixin使你能够封装一组样式，并使用<code>@include</code>关键字在你代码的任意地方应用这组样式。</p>
<p>下面的代码片段是使用Flexbox的时候，使用mixin的例子：</p>
<pre><code class="language-scss">@mixin flex-container {
  display: flex;
  justify-content: space-around;
  align-items: center;
  flex-direction: column;
  background: #ccc;
}

.card {
  @include flex-container;
}

.aside {
  @include flex-container;
}
</code></pre>
<h3 id="sass">SASS中的函数和运算符</h3>
<p>SASS提供一套工具帮助你编写更程序话的代码。</p>
<p>SASS提供内置函数，可以实现计算和运算，并返回特定的值。</p>
<p>内置函数的功能包含从颜色计算到数学运算，包括获取随机数、计算尺寸甚至是条件式。</p>
<p>SASS还提供数学运算符号，包括 <code>+</code>、 <code>-</code>、 <code>\</code>、<code>*</code>、 <code>/</code> 和 <code>%</code>，可以搭配<code>calc</code>函数使用。</p>
<p>以下代码片段是使用函数将像素转换成rem的例子：</p>
<pre><code class="language-scss">@function pxToRem($pxValue) {
  $remValue: ($pxValue / 16) + rem;
  @return $remValue;
}

div {
  width: pxToRem(480);
}
</code></pre>
<blockquote>
<p>但一定要强调的是，不推荐使用除法运算符 <code>/</code>， 在Dart Sass 2.0.0.中除法运算符会被去除。 更多内容可以阅读<a href="https://sass-lang.com/documentation/breaking-changes/slash-div">文档</a>。</p>
</blockquote>
<p>所以更推荐的写法是：</p>
<pre><code class="language-scss">@use "sass:math";

@function pxToRem($pxValue) {
  @return math.div($pxValue, 16px) * 1rem;
}

div {
  width: pxToRem(480px); // gives 30rem
}
</code></pre>
<p>以下代码片段是在mixin里使用条件逻辑：</p>
<pre><code class="language-scss">@mixin body-theme($theme) {
  @if $theme == "light" {
    background-color: $light-bg;
  } @else {
    background-color: $dark-bg;
  }
}
</code></pre>
<p>SASS也提供<code>lighten</code>和<code>darken</code>函数实现按照百分比调整颜色</p>
<p>如：</p>
<pre><code class="language-scss">$red: #ff0000;

a:visited {
  color: darken($red, 25%);
}
</code></pre>
<h2 id="sass">如果在本地设置好SASS</h2>
<p>真棒！我们已经学习了SASS的“理论”部分，接下来我们用代码来深入理解SASS是如何工作的。</p>
<p>在这个部分，你将要学习到如何设置一个本地环境，并且一步一步练习我准备好的登陆页。</p>
<p>实例在<a href="https://codesandbox.io/s/currying-river-44d7zr?file=/index.html">Codesandbox</a> 代码库在<a href="https://github.com/israelmitolu/Getting-Started-with-SASS">GitHub</a>.</p>
<h3 id="sass">编译SASS的方法</h3>
<p>编译SASS的方法如下：</p>
<ul>
<li>VS Code扩展</li>
<li>使用NPM全局安装</li>
<li>使用开源app安装如：Compass.app、Live Reload、 and Koala</li>
<li>使用Homebrew安装（MacOs用户）</li>
</ul>
<p>本教程将使用VS Code扩展，因为这是最容易的方法。</p>
<h3 id="vscodesass">在VS Code中设置好SASS</h3>
<h4 id="livesasscompiler">第一步：安装Live SASS Compiler</h4>
<p>首先启动VS Code，启动完毕后，在左手边的侧栏找到扩展选择栏。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2022/04/1.PNG" alt="VS Code中的扩展选择栏" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>VS Code中的扩展选择栏</figcaption>
</figure>
<p>在搜索框中查找 “Live Sass Compiler“并安装，这个扩展会帮助我们编译SASS文件 — <code>.scss</code> (或<code>.sass</code>)成<code>.css</code>文件。</p>
<h4 id="">第二步：设置保存地址</h4>
<p>然后修改文件路径，这样SASS才能在<code>styles</code>文件夹内变异。</p>
<p>这一步需要在 <code>settings.json</code>文件中操作。</p>
<p>在VS Code中，选择File &gt; Preferences &gt; Settings。然后查找<code>live sass compile</code>来改变全局设置。</p>
<p>点击<code>Edit settings.json</code>。</p>
<p>然后在该文件内的头几行你会看到：</p>
<pre><code class="language-json">{
  "liveSassCompile.settings.formats": [
    {
      "format": "expanded",
      "extensionName": ".css",
      "savePath": "/"
    }
  ],
</code></pre>
<p>改变<code>"savePath": "/"</code>为<code>"savePath": "/styles"</code>，如下面的代码片段：</p>
<pre><code class="language-json">{
  "liveSassCompile.settings.formats":[
    {
      "format": "expanded",
      "extensionName":".css",
      "savePath":"/styles",
    },

    //你同样可以在生产中使用缩小扩展，这样可以减少文件大小

    {
      "format": "compressed",
      "extensionName":".min.css",
      "savePath":"/styles",
    }
  ],
</code></pre>
<h4 id="sass">第三步：编译SASS</h4>
<p>保存好设置后，回到SASS文件，点击窗口的最低端"Watch Sass"按钮。</p>
<figure class="kg-card kg-card-image kg-card-hascaption">
    <img src="https://www.freecodecamp.org/news/content/images/2022/04/2.PNG" alt="点击“Watch SASS”" class="kg-image" width="600" height="400" loading="lazy">
    <figcaption>点击“Watch SASS”</figcaption>
</figure>
<p>点击按钮后，会在<code>styles</code>文件夹中生成两个文件： <code>.css</code>和<code>.css.map</code>。</p>
<p>你不要随意更改这两个文件，因为他们帮助你在每次更新样式的时候把SASS编译成CSS。</p>
<h4 id="css">第四步：链接CSS文件</h4>
<p>然后将CSS文件链接到<code>index.html</code>，在我们例子中就是：</p>
<pre><code class="language-html">    &lt;link rel="stylesheet" href="/styles/main.css" /&gt;
</code></pre>
<p>在你的浏览器中运行代码，得出的布局如下：</p>
<h2 id="">代码详解</h2>
<p>以下是对上一部分代码的详细解释：</p>
<ul>
<li>
<p>在 <code>index.html</code>基本标记文件中包含一个header和一个home/hero部分</p>
<ul>
<li>包含了一个链接引入CSS文件，这个文件是VS Code扩展帮我们编译完成的</li>
<li>以及一些JavaScript来实现菜单的响应切换</li>
</ul>
</li>
<li>
<p><code>main.scss</code>被编译， 编译结果为CSS文件 <code>main.css</code>并被引入到<code>index.html</code>：</p>
<pre><code class="language-html">&lt;link rel="stylesheet" href="/styles/main.css" /&gt;
</code></pre>
</li>
<li>
<p><code>main.scss</code>引用了所有片段 <code>_base.scss</code>、<code>_components.scss</code>、<code>_home.scss</code>、<code>_layout.scss</code>、 <code>_responsive.scss</code>、 <code>_variables.scss</code>。</p>
<pre><code class="language-scss">@import "variables";
@import "base";
@import "layout";
@import "components";
@import "home";
@import "responsive";
</code></pre>
</li>
<li>
<p>基础的片段包含了 <code>flex</code>和<code>grid</code>mixin，并在需要的时候重复引用。</p>
</li>
</ul>
<h2 id="">总结</h2>
<p>恭喜你！如果你读到了这儿，说明你已经学习了SASS是如何工作的，SASS一些炫酷的功能，希望你可以马上开始使用SASS。</p>
<p>如果你想要学习更多SASS的知识，我推荐你使用<a href="https://www.youtube.com/watch?v=aoQ6S1a32j8&amp;t=3323s">freeCodeCamp 的课程</a>。</p>
<p>如果你认为这篇文章帮助到了你（我确定帮助到了你😉），请分享给你的朋友或者到社交网络上，欢迎在 <a href="https://twitter.com/israelmitolu">Twitter</a> 或者<a href="https://israelmitolu.hashnode.dev">blog</a> 上联系我，我会在这个上面分享文章和资源，帮助你成为更好的开发者。</p>
<p>感谢阅读，祝你编程愉快！</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
