CSS 預處理器 Sass

目錄

Sass

一、Sass 是什么?

二、核心功能詳解

1. 變量(Variables)

2. 嵌套(Nesting)

3. 混合宏(Mixins)

4. 繼承(Inheritance)

5. 運算(Operations)

6. 函數(Functions)

7. 條件與循環

8. 模塊化(Modules)

三、Sass 工具鏈

1. 安裝與編譯

2. 集成構建工具

3. VS Code 插件

四、最佳實踐

五、Sass 與 Less 對比? ?

Sass 與 Less 核心對比

一、核心對比速覽

二、語法細節對比

1. 變量定義

2. 嵌套語法

3. 混合宏(Mixins)

4. 條件控制

三、功能深度對比

1. 函數與運算

2. 繼承機制

3. 模塊化支持

四、編譯與性能

五、社區與生態

六、遷移策略

七、選型建議

Sass?內置函數

一、顏色函數

1. 顏色調整

2. 顏色混合

3. 顏色通道提取

二、數值函數

三、字符串函數

四、列表函數

五、映射函數(Map)

六、其他實用函數

七、實戰示例

八、總結


Sass

一、Sass 是什么?

Sass(Syntactically Awesome Style Sheets)是一種?CSS 預處理器,通過增強 CSS 的語法(如變量、嵌套、混合宏等)提升代碼的可維護性和開發效率。Sass 最終會編譯為標準的 CSS,兼容所有瀏覽器。

  • 兩種語法

    • SCSS.scss):兼容 CSS 語法,使用?{}?和?;

    • Sass.sass):縮進語法,無?{}?和?;(較少用)。


二、核心功能詳解

1. 變量(Variables)

  • 定義變量:存儲顏色、尺寸、字體等重復使用的值。

    $primary-color: #3498db;
    $font-stack: Helvetica, sans-serif;
  • 使用變量

    body {color: $primary-color;font-family: $font-stack;
    }

2. 嵌套(Nesting)

  • 規則嵌套:簡化層級結構。

    .nav {padding: 1rem;ul {margin: 0;li {display: inline-block;a {color: $primary-color;}}}
    }
  • 父選擇器引用:使用?&?引用父級。

    .button {&:hover { background: darken($primary-color, 10%); }&-large { padding: 20px; }
    }

3. 混合宏(Mixins)

  • 定義可復用代碼塊

    @mixin flex-center {display: flex;justify-content: center;align-items: center;
    }
  • 調用混合宏

    .container {@include flex-center;
    }
  • 帶參數的混合宏

    @mixin box-shadow($x, $y, $blur, $color) {box-shadow: $x $y $blur $color;
    }
    .card {@include box-shadow(2px, 2px, 10px, rgba(0,0,0,0.1));
    }

4. 繼承(Inheritance)

  • 代碼復用:通過?@extend?共享樣式。

    %button-base {padding: 10px 20px;border-radius: 4px;
    }
    .primary-button {@extend %button-base;background: $primary-color;
    }
    .secondary-button {@extend %button-base;background: #2ecc71;
    }

5. 運算(Operations)

  • 數學運算:支持?+,?-,?*,?/,?%

    $container-width: 1200px;
    .sidebar {width: $container-width / 4;
    }

6. 函數(Functions)

  • 內置函數:顏色處理、字符串操作等。

    .dark-bg {background: darken($primary-color, 20%);
    }
  • 自定義函數

    @function em($px, $base: 16px) {@return ($px / $base) * 1em;
    }
    h1 {font-size: em(32px); // 2em
    }

7. 條件與循環

  • @if?/?@else

    @mixin theme($dark: false) {@if $dark {background: #333;color: white;} @else {background: white;color: #333;}
    }
  • @for?循環

    @for $i from 1 through 5 {.col-#{$i} {width: 20% * $i;}
    }
  • @each?遍歷

    $colors: red, green, blue;
    @each $color in $colors {.icon-#{$color} {fill: $color;}
    }
  • @while?循環(較少用):

    $i: 1;
    @while $i < 6 {.item-#{$i} { width: 20px * $i; }$i: $i + 1;
    }

8. 模塊化(Modules)

  • 分文件管理:通過?@use?或?@import?導入模塊。

    // _variables.scss
    $primary-color: #3498db;// main.scss
    @use 'variables' as vars;
    .header {color: vars.$primary-color;
    }

三、Sass 工具鏈

1. 安裝與編譯

  • 安裝 Sass(需 Node.js):

    npm install -g sass
  • 命令行編譯

    sass input.scss output.css
    sass --watch input.scss:output.css  # 監聽文件變化

2. 集成構建工具

  • Webpack:使用?sass-loader

    // webpack.config.js
    module: {rules: [{test: /\.scss$/,use: ['style-loader', 'css-loader', 'sass-loader']}]
    }
  • Gulp:使用?gulp-sass

    const gulp = require('gulp');
    const sass = require('gulp-sass')(require('sass'));
    gulp.task('sass', () => {return gulp.src('src/scss/*.scss').pipe(sass().on('error', sass.logError)).pipe(gulp.dest('dist/css'));
    });

3. VS Code 插件

  • Live Sass Compiler:實時編譯?.scss?文件為?.css


四、最佳實踐

  1. 變量命名規范:使用語義化命名(如?$brand-primary)。

  2. 模塊化拆分:按功能分文件(如?_variables.scss_mixins.scss)。

  3. 避免深層嵌套:嵌套層級不超過 3 層,防止選擇器冗余。

  4. 慎用?@extend:過度繼承可能導致 CSS 文件體積膨脹。

  5. 注釋與文檔:使用?//?或?/* */?標注關鍵邏輯。


五、Sass 與 Less 對比

特性SassLess
語法支持 SCSS 和縮進語法類似 CSS,使用?@?符號
功能復雜度更強大(條件、循環、自定義函數)較簡單
社區生態更廣泛(Bootstrap 5+ 使用 Sass)逐漸被 Sass 替代
編譯速度較快(Dart Sass)較慢

? ?

Sass 與 Less 核心對比

一、核心對比速覽

特性Sass/SCSSLess
語法支持?.scss(類CSS)和?.sass(縮進語法)類似 CSS,使用?@?符號定義變量等
變量符$@
混入(Mixins)支持參數傳遞、內容塊(@content支持參數傳遞,功能相對簡單
條件/循環支持?@if@for@each@while支持條件守衛(Guards)、循環功能較弱
函數擴展支持自定義函數,內置函數庫豐富內置函數較少,不支持自定義函數
繼承通過?@extend?實現通過混入模擬繼承,無原生繼承語法
模塊化通過?@use@forward?管理依賴(推薦)通過?@import?導入(可能重復代碼)
編譯方式Dart Sass(快)、LibSass(棄用)基于 JavaScript(速度較慢)
社區生態更廣泛(Bootstrap 5+、主流框架優先支持)逐漸被 Sass 替代,維護更新較少
瀏覽器編譯不支持支持(通過?<script>?引入?less.js

二、語法細節對比

1. 變量定義

  • Sass

    $primary-color: #3498db;
    $font-size: 16px;
  • Less

    @primary-color: #3498db;
    @font-size: 16px;

2. 嵌套語法

  • Sass(支持屬性嵌套):

    .box {border: {width: 1px;style: solid;color: #ddd;}
    }
  • Less(僅支持選擇器嵌套):

    .box {border-width: 1px;border-style: solid;border-color: #ddd;
    }

3. 混合宏(Mixins)

  • Sass(支持內容塊?@content):

    @mixin media($width) {@media (min-width: $width) {@content;}
    }
    .container {@include media(768px) {padding: 20px;}
    }
  • Less(無內容塊支持):

    .mixin(@color) {color: @color;
    }
    .text {.mixin(#333);
    }

4. 條件控制

  • Sass(完整邏輯控制):

    @if lightness($color) > 50% {background: black;
    } @else {background: white;
    }
  • Less(通過守衛條件):

    .mixin(@color) when (lightness(@color) > 50%) {background: black;
    }

三、功能深度對比

1. 函數與運算

  • Sass
    支持復雜數學運算和自定義函數:

    @function em($px, $base: 16px) {@return ($px / $base) * 1em;
    }
    .title { font-size: em(24px); } // 1.5em
  • Less
    僅支持內置函數(如?lighten()darken()),無法自定義函數。

2. 繼承機制

  • Sass(高效繼承):

    %button-base { padding: 10px; }
    .primary-btn { @extend %button-base; }

    編譯后合并相同樣式,減少 CSS 體積。

  • Less(通過混入模擬):

    .button-base() { padding: 10px; }
    .primary-btn { .button-base(); }

    編譯后重復代碼,體積較大。

3. 模塊化支持

  • Sass(現代模塊系統):

    // _variables.scss
    $primary-color: #3498db;// main.scss
    @use 'variables' as vars;
    .header { color: vars.$primary-color; }
  • Less(傳統導入):

    // variables.less
    @primary-color: #3498db;// main.less
    @import "variables";
    .header { color: @primary-color; }

四、編譯與性能

維度SassLess
編譯器Dart Sass(官方推薦,速度快)less.js(基于 JavaScript)
編譯速度快(Dart 引擎優化)較慢(大型項目明顯)
實時編譯需工具(如?sass --watch、構建工具)瀏覽器端可實時編譯
生產環境必須預編譯可預編譯或瀏覽器端運行

五、社區與生態

生態項SassLess
主流框架Bootstrap 5+、Vuetify、Material-UI 等優先支持Bootstrap 3~4 主要支持
插件工具Webpack、Gulp、Vite 深度集成支持但更新較少
學習資源文檔完善,社區活躍資源較少,更新滯后
NPM 下載量每周約 2500 萬次(2023)每周約 700 萬次(2023)

六、遷移策略

  • 從 Less 遷移到 Sass

    1. 重命名文件為?.scss

    2. 替換語法(如?@?→?$)。

    3. 逐步替換 Less 特有功能(如 Guards →?@if)。

    4. 使用工具轉換(如?less2sass)。


七、選型建議

選擇 Sass 的場景

  • 項目復雜,需要高級功能(條件、循環、自定義函數)。

  • 團隊協作,需模塊化管理和樣式復用。

  • 長期維護,依賴活躍社區和工具鏈支持。

  • 使用現代框架(如 React、Vue)和組件庫(如 Bootstrap 5+)。

選擇 Less 的場景

  • 小型項目或快速原型開發,無需復雜邏輯。

  • 遺留項目維護(如舊版 Bootstrap)。

  • 需要瀏覽器端實時編譯(如簡單靜態頁面)。

  • Sass:功能全面、性能優越、生態完善,現代開發首選

  • Less:簡單易學、瀏覽器兼容性佳,適合輕量級場景

根據項目需求和團隊熟悉度選擇,優先推薦?Sass?應對未來挑戰。


? ?

Sass?內置函數


一、顏色函數

1. 顏色調整

函數作用示例
lighten($color, $amount)增加顏色亮度(0%~100%)lighten(#336699, 20%)?→?#6699cc
darken($color, $amount)降低顏色亮度(0%~100%)darken(#336699, 10%)?→?#1a4d80
saturate($color, $amount)增加飽和度(0%~100%)saturate(#336699, 20%)?→?#2b5c8c
desaturate($color, $amount)降低飽和度desaturate(#ff0000, 50%)?→?#808080
opacify($color, $amount)增加不透明度(0~1)opacify(rgba(255,0,0,0.5), 0.2)?→?rgba(255,0,0,0.7)
transparentize($color, $amount)降低不透明度transparentize(#ff0000, 0.3)?→?rgba(255,0,0,0.7)

2. 顏色混合

函數作用示例
mix($color1, $color2, $weight)混合兩種顏色(權重 0%~100%)mix(red, blue, 50%)?→?#800080(紫色)
grayscale($color)轉為灰度顏色grayscale(#ff0000)?→?#808080

3. 顏色通道提取

函數作用示例
red($color)提取紅色通道值(0~255)red(#ff3366)?→?255
green($color)提取綠色通道值green(#ff3366)?→?51
blue($color)提取藍色通道值blue(#ff3366)?→?102
alpha($color)提取透明度(0~1)alpha(rgba(255,0,0,0.5))?→?0.5

二、數值函數

函數作用示例
percentage($number)轉為百分比(0.5?→?50%percentage(0.3)?→?30%
round($number)四舍五入取整round(3.7)?→?4
ceil($number)向上取整ceil(3.2)?→?4
floor($number)向下取整floor(3.7)?→?3
abs($number)取絕對值abs(-10)?→?10
min($numbers...)取最小值min(5, 3, 8)?→?3
max($numbers...)取最大值max(5, 3, 8)?→?8
random($limit?)生成隨機數(0~1 或 0~$limit)random(100)?→?42

三、字符串函數

函數作用示例
quote($string)添加引號quote(text)?→?"text"
unquote($string)移除引號unquote("text")?→?text
to-upper-case($string)轉為大寫to-upper-case(abc)?→?ABC
to-lower-case($string)轉為小寫to-lower-case(ABC)?→?abc
str-length($string)獲取字符串長度str-length("hello")?→?5
str-index($string, $substring)查找子串位置str-index("hello", "e")?→?2

四、列表函數

函數作用示例
length($list)獲取列表長度length(1px 2px 3px)?→?3
nth($list, $n)獲取第?$n?個元素nth(a b c, 2)?→?b
join($list1, $list2, $separator)合并列表join(a b, c d)?→?a b c d
append($list, $value, $separator)追加元素到列表append(a b, c)?→?a b c
index($list, $value)查找元素位置index(a b c, b)?→?2

五、映射函數(Map)

函數作用示例
map-get($map, $key)根據鍵獲取值map-get((a:1, b:2), a)?→?1
map-merge($map1, $map2)合并兩個映射map-merge((a:1), (b:2))?→?(a:1, b:2)
map-keys($map)獲取所有鍵的列表map-keys((a:1, b:2))?→?a, b
map-values($map)獲取所有值的列表map-values((a:1, b:2))?→?1, 2

六、其他實用函數

函數作用示例
if($condition, $if-true, $if-false)條件判斷if(true, 10px, 20px)?→?10px
unique-id()生成唯一 ID(如?u0daxxunique-id()?→?u0daxx
inspect($value)返回值的字符串表示形式inspect(10px)?→?10px

七、實戰示例

1. 動態生成顏色漸變

$base-color: #3498db;
$steps: 5;@for $i from 1 through $steps {.color-step-#{$i} {background: lighten($base-color, $i * 10%);}
}

2. 響應式斷點管理

$breakpoints: (small: 480px,medium: 768px,large: 1024px
);@mixin respond-to($key) {$width: map-get($breakpoints, $key);@media (min-width: $width) {@content;}
}.container {@include respond-to(medium) {padding: 20px;}
}

八、總結

  • 顏色處理lightendarkenmix?快速生成配色方案。

  • 數值計算percentageround?簡化布局計算。

  • 字符串操作to-upper-casestr-index?增強動態內容處理能力。

  • 列表與映射map-getnth?管理復雜數據結構。

  • 條件與循環:結合?@if@for?實現動態樣式生成。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79640.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79640.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79640.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

信息收集新利器:SSearch Chrome 插件來了

SSearch 下載地址 SSearch &#x1f623;用途 每次谷歌語法搜索時還得自己寫&#xff0c;我想省事一點&#xff0c;弄了一個插件&#xff0c;先加了幾個常用的語法&#xff0c;點擊后會跳轉到對應搜索頁面&#xff0c;也可以直接在搜索框微調 后續也會加些其他語法 &#…

Docker搭建SFTP

在這個教程中&#xff0c;我們將通過一個簡單的例子來展示如何使用 Docker 和 atmoz/sftp 鏡像設置一個基本的 SFTP 服務。這個服務將允許用戶通過 SFTP 安全地訪問和管理文件。我們將配置一個名為 ops 的用戶&#xff0c;其密碼為 123456&#xff0c;并限定用戶只能訪問特定的…

正態分布習題集 · 答案與解析篇

正態分布習題集 答案與解析篇 與題目篇編號一致,如有其他解題思路,歡迎在評論區交流。 1. 基礎定義與性質 1.1 密度函數 X ~ N ( μ , σ 2 ) X \sim N(\mu,\sigma^2) X~N(μ,σ2) 的 PDF: [ f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left(-\frac{(x-\mu)2}{2\sigma2}\…

Java學習手冊:SQL 優化技巧

一、SQL 查詢優化 選擇合適的索引列 &#xff1a;索引可以顯著提高查詢速度&#xff0c;但需要選擇合適的列來創建索引。通常&#xff0c;對于頻繁作為查詢條件的列、連接操作的列以及排序或分組操作的列&#xff0c;應該考慮創建索引。例如&#xff0c;在一個訂單表中&#xf…

(02)Redis 的訂閱發布Pub/Sub

我們為了自己實現一個MQ功能&#xff0c;就要深入底層挖掘現有開源產品的實現過程。 Redis 發布訂閱底層結構解析 Redis 不存儲消息&#xff0c;僅作為“實時中轉”&#xff1b;只有訂閱者在線時才能收到消息&#xff1b;消息是廣播給所有訂閱此頻道的客戶端。 1. 核心數據結…

使用Docker一鍵安裝SigLens:簡單快捷的日志分析解決方案

在當今復雜的IT環境中,高效的日志管理和分析變得越來越重要。SigLens作為一款強大的開源日志分析工具,為開發者和運維人員提供了直觀、高效的日志處理體驗。本文將介紹如何使用Docker快速安裝SigLens,讓您在幾分鐘內就能開始進行日志分析。 為什么選擇Docker安裝SigLens? Do…

C#與西門子PLC通信:S7NetPlus和HslCommunication使用指南

西門子S7協議是用來和PLC進行通訊的一個協議&#xff0c;默認端口是102&#xff0c;數據會保存在一個個DB塊中&#xff0c;比較經典的用法是一個DB塊專門用來讀取&#xff0c;一個用來寫入。 DB&#xff08;數據塊&#xff09; {塊號}.DBX/DBD/DBW{字節地址}.{位偏移} 1、數據…

【中間件】brpc_基礎_remote_task_queue

文章目錄 remote task queue1 簡介2 核心功能2.1 任務提交與分發2.2 無鎖或低鎖設計2.3 與 bthread 深度集成2.4 流量控制與背壓 3 關鍵實現機制3.1 數據結構3.2 任務提交接口3.3 任務竊取&#xff08;Work Stealing&#xff09;3.4 同步與喚醒 4 性能優化5 典型應用場景6 代碼…

C語言實現數據結構:堆排序和二叉樹_鏈式

一.堆的應用 1.堆排序 void test01() {int arr[] { 17,20,10,13,19,15 };int n sizeof(arr) / sizeof(arr[0]);HP p;HPInit(&p);for (int i 0; i < n; i){HPPush(&p, arr[i]);}int i 0;while (!HPEmpty(&p)){arr[i] HPTop(&p);HPPop(&p);}for (i…

C和指針——預處理

預處理是編譯前的過程&#xff0c;主要對define&#xff0c;include以及一些編譯器定義的內容進行替換 #define的本質就是替換 1、例子 #define FOREVER for(;;) 2、例子 #define TEMPD "1231231231\ 123123123" \\如果太長了&#xff0c;可以用\換行 3、例子——可…

C++ set和map

目錄 一、關聯式容器 1.1 鍵值對 1.1.1 概念 1.1.2 pair 1.2 樹形結構的關聯式容器 二、set 2.1 set 的介紹 2.2 set 的使用 2.2.1 set 的構造 2.2.2 set 的迭代器 2.2.3 set 的容量操作 2.2.4 set 的修改操作 2.2.5 set 的查找操作 三、multiset 3.1 multiset …

「Mac暢玩AIGC與多模態07」開發篇03 - 開發第一個 Agent 插件調用應用

一、概述 本篇介紹如何在 macOS 環境下,基于 Dify 平臺自帶的網頁爬蟲插件工具,開發一個可以提取網頁內容并作答的 Agent 應用。通過使用內置插件,無需自定義開發,即可實現基本的網頁信息提取與智能體回答整合。 二、環境準備 1. 確認本地部署環境 確保以下環境已搭建并…

cline或業務系統集成n8n的工作流(MCP Server Trigger、Call n8n Workflow Tool node)

1.成果展示 1.1n8n的主工作流 1.2n8n的子工作流 1.3cline集成效果 2.實操過程 2.1Call n8n Workflow Tool node節點 Call n8n Workflow Tool節點是一個工具&#xff0c;它允許代理運行另一個n8n工作流并獲取其輸出數據。 在此頁面上&#xff0c;您將找到“調用n8n工作流工具…

深入了解Linux系統—— 環境變量

命令行參數 我們知道&#xff0c;我們使用的指令它本質上也是一個程序&#xff0c;我們要執行這個指令&#xff0c;輸入指令名然后回車即可執行&#xff1b;但是對于指令帶選項&#xff0c;又是如何實現的呢&#xff1f; 問題&#xff1a;main函數有沒有參數&#xff1f; 在我…

pip安裝包時網絡不暢,替換國內PyPI鏡像源

1、PyPI 鏡像源 1.1、定義 PyPI 鏡像源是對 Python Package Index&#xff08;PyPI&#xff09;官方倉庫的復制。 PyPI 是 Python 社區中最大的軟件包倉庫&#xff0c;存儲著大量的 Python 包&#xff0c;供開發者們下載和使用。 然而&#xff0c;由于 PyPI 服務器位于國外&a…

貪心算法解決會議安排問題

文章目錄 前言 一、什么是貪心算法&#xff1f; 貪心算法的基本概念&#xff1a;貪心算法并不從整體最優上加以考慮&#xff0c;所做的選擇只是在某種意義上的局部最優選擇。 二、會議安排題目 1.題目理解 2.思路剖析 總結 前言 本文將主要介紹貪心算法需要注意的地方以…

從入門到登峰-嵌入式Tracker定位算法全景之旅 Part 4 |IMU 死算與校正:慣性導航在資源受限環境的落地

Part 4 |IMU 死算與校正:慣性導航在資源受限環境的落地 本章聚焦 ESP32-S3 平臺上如何利用 LSM6DS3 IMU 實現 死算(Dead Reckoning),并結合 零速更新(ZUPT) 或 磁力計輔助 進行 漂移校正,最終通過 EKF/UKF 融合提升定位精度。 一、傳感器簡介與校準 LSM6DS3 主要參數 加速…

力扣1128題解

記錄 2525.5.4 題目&#xff1a; 思路&#xff1a; 先將dominoes[i]的二元全部變為前大后小的形式&#xff0c;再遍歷該數組&#xff0c;用數組來記錄。 代碼&#xff1a; class Solution {public int numEquivDominoPairs(int[][] dominoes) {int [] [] cnt new int [10…

with的用法

Python SQLite 操作詳解 本文檔詳細解釋了使用 Python 操作 SQLite 數據庫時涉及的關鍵概念和代碼實踐&#xff0c;包括 with 語句、事務處理、批量插入以及相關的優化建議。 一、with 語句的作用&#xff08;自動關門的保險庫&#xff09; with sqlite3.connect(city_1301.d…

力扣解題匯總(困難)

文章目錄 技巧42_接雨水 技巧 42_接雨水 class Solution {public int trap(int[] height) {int LMax 0, RMax 0;int len height.length;int[] L2R new int[len];int[] R2L new int[len];//計數每一個格的左右邊最高柱for (int i 0; i < len; i) {LMax Math.max(LMa…