← CSS 背景模糊与滤镜 CSS Margin 与 Padding 属性 →

SASS CSS预处理器

原创 2025-09-10 CSS 已有人查阅

SASS CSS预处理器教程

概述

SASS(Syntactically Awesome Style Sheets)是一种功能强大的CSS预处理器,它扩展了CSS的功能并提供了更高效的样式表编写方式。通过SASS,开发者可以使用变量、嵌套规则、混合宏等高级特性,大大提升了CSS代码的可维护性和开发效率。

什么是CSS预处理器?

CSS预处理器是一种脚本语言,通过特殊的编程语法生成标准的CSS代码。它允许开发者使用变量、函数、嵌套等编程概念来编写样式表,然后通过编译器将其转换为浏览器可识别的CSS文件。

SASS核心特性

变量功能

SASS允许使用变量存储颜色、字体、尺寸等常用值:

// 定义变量
$primary-color: #3498db;
$secondary-color: #e74c3c;
$font-stack: Helvetica, sans-serif;
$base-spacing: 20px;

// 使用变量
.header {
  background-color: $primary-color;
  font-family: $font-stack;
  padding: $base-spacing;
}

.button {
  background-color: $secondary-color;
  color: white;
  padding: $base-spacing / 2;
}

嵌套结构

SASS支持选择器嵌套,使代码结构更清晰:

.navigation {
  background-color: #f8f9fa;
  padding: 1rem;

  ul {
    list-style: none;
    margin: 0;
    padding: 0;

    li {
      display: inline-block;
      margin-right: 15px;

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

        &:hover {
          color: $primary-color;
        }
      }
    }
  }
}

混合宏(Mixins)

混合宏可以重用样式代码块:

// 定义混合宏
@mixin button-style($bg-color, $text-color) {
  background-color: $bg-color;
  color: $text-color;
  padding: 10px 20px;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  transition: background-color 0.3s ease;

  &:hover {
    background-color: darken($bg-color, 10%);
  }
}

// 使用混合宏
.primary-btn {
  @include button-style(#3498db, #fff);
}

.secondary-btn {
  @include button-style(#e74c3c, #fff);
}

继承功能

通过继承可以共享样式规则:

// 基础样式
%message-shared {
  border: 1px solid #ccc;
  padding: 15px;
  margin: 10px 0;
  border-radius: 4px;
}

// 扩展基础样式
.success-message {
  @extend %message-shared;
  background-color: #d4edda;
  color: #155724;
}

.error-message {
  @extend %message-shared;
  background-color: #f8d7da;
  color: #721c24;
}

运算功能

SASS支持数学运算:

$base-font-size: 16px;
$container-width: 960px;

.article {
  font-size: $base-font-size * 1.125; // 18px
  line-height: $base-font-size * 1.5; // 24px
  width: $container-width * 0.75; // 720px
  margin: 0 auto;
}

实际应用示例

项目结构组织

styles/
├── base/
│   ├── _variables.scss
│   ├── _reset.scss
│   └── _typography.scss
├── components/
│   ├── _buttons.scss
│   ├── _cards.scss
│   └── _navigation.scss
├── layouts/
│   ├── _header.scss
│   ├── _footer.scss
│   └── _grid.scss
└── main.scss

主文件引入

// main.scss
@use 'base/variables';
@use 'base/reset';
@use 'base/typography';
@use 'components/buttons';
@use 'components/cards';
@use 'layouts/header';
@use 'layouts/footer';

响应式设计示例

// _variables.scss
$breakpoints: (
  'small': 576px,
  'medium': 768px,
  'large': 992px,
  'xlarge': 1200px
);

// _mixins.scss
@mixin respond-to($breakpoint) {
  @if map-has-key($breakpoints, $breakpoint) {
    @media (min-width: map-get($breakpoints, $breakpoint)) {
      @content;
    }
  }
}

// 使用示例
.container {
  width: 100%;
  padding: 1rem;

  @include respond-to('medium') {
    width: 90%;
    margin: 0 auto;
  }

  @include respond-to('large') {
    width: 80%;
    max-width: 1200px;
  }
}

代码号学习编程实践案例

示例1:按钮组件系统

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="styles.css">
    <title>代码号学习编程 - SASS按钮系统</title>
</head>
<body>
    <div class="container">
        <button class="btn btn-primary">主要按钮</button>
        <button class="btn btn-secondary">次要按钮</button>
        <button class="btn btn-success">成功按钮</button>
        <button class="btn btn-danger">危险按钮</button>
    </div>
</body>
</html>
 
// _variables.scss
$colors: (
  primary: #007bff,
  secondary: #6c757d,
  success: #28a745,
  danger: #dc3545
);

// _buttons.scss
.btn {
  display: inline-block;
  padding: 0.75rem 1.5rem;
  border: none;
  border-radius: 0.25rem;
  font-size: 1rem;
  font-weight: 500;
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  transition: all 0.3s ease;

  &:hover {
    transform: translateY(-2px);
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
  }

  &:active {
    transform: translateY(0);
  }
}

@each $name, $color in $colors {
  .btn-#{$name} {
    background-color: $color;
    color: #fff;

    &:hover {
      background-color: darken($color, 10%);
    }
  }
}

示例2:卡片布局系统

// _cards.scss
.card {
  background: #fff;
  border-radius: 8px;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  overflow: hidden;
  margin-bottom: 2rem;
  transition: transform 0.3s ease, box-shadow 0.3s ease;

  &:hover {
    transform: translateY(-4px);
    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15);
  }

  &-header {
    padding: 1.5rem;
    border-bottom: 1px solid #eee;
  }

  &-body {
    padding: 1.5rem;
  }

  &-footer {
    padding: 1rem 1.5rem;
    background-color: #f8f9fa;
    border-top: 1px solid #eee;
  }
}

// 响应式卡片布局
.card-grid {
  display: grid;
  gap: 1.5rem;
  grid-template-columns: 1fr;

  @include respond-to('medium') {
    grid-template-columns: repeat(2, 1fr);
  }

  @include respond-to('large') {
    grid-template-columns: repeat(3, 1fr);
  }
}

编译SASS代码

安装SASS编译器


npm install -g sass

编译命令

# 单文件编译
sass input.scss output.css

# 监听文件变化
sass --watch input.scss:output.css

# 编译整个目录
sass --watch styles/:css/

编译选项

# 压缩输出
sass --style=compressed input.scss output.css

# 生成sourcemap
sass --source-map input.scss output.css

本节课程知识要点

  1. 变量系统:使用$符号定义变量,提高代码复用性

  2. 嵌套结构:通过嵌套组织代码,提高可读性

  3. 混合宏:使用@mixin@include创建可重用代码块

  4. 继承机制:通过@extend共享样式规则

  5. 模块化:使用@use@forward组织代码结构

  6. 运算功能:支持数学运算和颜色操作

  7. 流程控制:使用@if@for@each等控制指令

开发建议

  1. 命名规范:采用BEM命名约定保持一致性

  2. 文件组织:按功能模块拆分SASS文件

  3. 注释规范:为混合宏和函数添加详细注释

  4. 性能优化:避免过度嵌套和复杂选择器

  5. 浏览器兼容:注意编译后的CSS兼容性

常见问题解答

问:SASS与SCSS有什么区别?
答:SASS有两种语法格式:SASS(缩进语法)和SCSS(类似CSS的语法)。SCSS更接近标准CSS,学习曲线更平缓。

问:如何在项目中使用SASS?
答:可以通过命令行工具、构建工具(Webpack、Gulp)或编辑器插件来编译SASS文件。

问:SASS变量有什么优势?
答:SASS变量允许集中管理样式值,便于维护和主题切换,支持计算和颜色操作。

← CSS 背景模糊与滤镜 CSS Margin 与 Padding 属性 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号