CSS预处理器实战:Sass/Less/Stylus对比与最佳实践

CSS预处理器实战:Sass/Less/Stylus对比与最佳实践

大家好,我是蔓蔓。CSS预处理器能让我们编写更高效、更可维护的CSS代码。今天我来和大家分享Sass、Less和Stylus的对比与最佳实践。

Sass

变量

scss 复制代码
// 定义变量
$primary-color: #1890ff;
$font-size: 14px;

// 使用变量
.button {
  color: $primary-color;
  font-size: $font-size;
}

嵌套

scss 复制代码
.container {
  width: 100%;
  
  .header {
    padding: 20px;
    
    &:hover {
      background-color: #f5f5f5;
    }
    
    .title {
      font-size: 20px;
    }
  }
}

Mixins

scss 复制代码
@mixin flex-center {
  display: flex;
  align-items: center;
  justify-content: center;
}

@mixin responsive($breakpoint) {
  @media (max-width: $breakpoint) {
    @content;
  }
}

.card {
  @include flex-center;
  
  @include responsive(768px) {
    flex-direction: column;
  }
}

函数

scss 复制代码
@function px-to-rem($px, $base-font-size: 16px) {
  @return ($px / $base-font-size) * 1rem;
}

.text {
  font-size: px-to-rem(24px); // 1.5rem
}

Less

变量

less 复制代码
@primary-color: #1890ff;
@font-size: 14px;

.button {
  color: @primary-color;
  font-size: @font-size;
}

嵌套

less 复制代码
.container {
  width: 100%;
  
  .header {
    padding: 20px;
    
    &:hover {
      background-color: #f5f5f5;
    }
  }
}

Mixins

less 复制代码
.flex-center() {
  display: flex;
  align-items: center;
  justify-content: center;
}

.responsive(@breakpoint) {
  @media (max-width: @breakpoint) {
    @content;
  }
}

.card {
  .flex-center();
  
  .responsive(768px) {
    flex-direction: column;
  }
}

Stylus

变量

stylus 复制代码
primary-color = #1890ff
font-size = 14px

.button
  color primary-color
  font-size font-size

嵌套

stylus 复制代码
.container
  width 100%
  
  .header
    padding 20px
    
    &:hover
      background-color #f5f5f5
    
    .title
      font-size 20px

Mixins

stylus 复制代码
flex-center()
  display flex
  align-items center
  justify-content center

responsive(breakpoint)
  @media (max-width: breakpoint)
    {block}

.card
  flex-center()
  
  responsive(768px)
    flex-direction column

最佳实践

文件组织

复制代码
src/
├── styles/
│   ├── variables.scss    # 变量定义
│   ├── mixins.scss       # 混合宏
│   ├── functions.scss    # 函数
│   ├── reset.scss        # 重置样式
│   ├── base.scss         # 基础样式
│   └── components/       # 组件样式
│       ├── button.scss
│       ├── card.scss
│       └── form.scss

模块化导入

scss 复制代码
// main.scss
@import './variables';
@import './mixins';
@import './functions';
@import './reset';
@import './base';
@import './components/button';
@import './components/card';

命名规范

scss 复制代码
// BEM命名
.block {
  &__element {
    &--modifier {
      
    }
  }
}

// 示例
.card {
  &__header {
    &--dark {
      
    }
  }
  
  &__body {
    
  }
}

总结

三种预处理器各有特点:

  • Sass功能最强大,社区最活跃
  • Less语法更接近CSS,学习成本低
  • Stylus语法最简洁,灵活度高

选择适合团队的预处理器,遵循统一的编码规范,能提升CSS代码质量。

技术应当有温度,好的CSS结构能让团队协作更高效。

相关推荐
大模型任我行6 分钟前
阿里:端到端文档解析模型OvisOCR2
人工智能·语言模型·自然语言处理·论文笔记
aixingkong9218 分钟前
Atlas 950 1024卡SuperPoD推测分析
网络·人工智能·硬件架构·硬件工程
触底反弹9 分钟前
🤯 面试被问 AI Workflow 和 Agent 有啥区别?3 张图 + 2 段代码讲清楚!
人工智能·设计模式·面试
步步精BBJconn11 分钟前
从GPU服务器到数据中心:AI服务器高压连接器的应用与发展趋势
大数据·运维·服务器·人工智能·科技·物联网
K姐研究社18 分钟前
Codex 怎么用国产模型?Kimi + CC Switch 接入配置指南
人工智能·aigc
GuWenyue7 小时前
写Agent还要重复封装工具?一套MCP多服务方案,3个能力让AI自动查地图、读写文件、操控浏览器
人工智能·机器学习·开源
GuWenyue7 小时前
90%AI新手不会调参!LangChain双模型流水线实战,一套代码兼顾严谨+创意
人工智能
光锥智能8 小时前
WAIC亮点|兼具泛化能力与作业效率的极智嘉机器人天团
人工智能·机器人
阳光是sunny9 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
甲维斯9 小时前
Kimi K3 重构10000行单文件屎山代码!
人工智能