在前端开发的演进历程中,CSS 从简单的样式表语言,逐步发展为支持编程思维、模块化设计和响应式能力的强大工具。而 Stylus 作为三大主流 CSS 预处理器之一(与 Sass、Less 并列),以其极致简洁的语法和强大的扩展能力,成为提升开发效率的利器。本文将结合你的学习笔记,系统梳理 原生 CSS 的局限、Stylus 的优势、Flex 弹性布局、过渡动画与媒体查询 等核心知识点,助你构建现代化的样式开发体系。
一、原生 CSS 的痛点:为何需要预处理器?
标准 CSS 虽然直观,但在大型项目中暴露诸多问题:
/* 原生 CSS 示例 */
.card {
width: 45px;
height: 45px;
background-color: #3498db;
border-radius: 4px;
}
.card:hover {
background-color: #2980b9;
}
- ❌ 无法定义变量:颜色
#3498db重复出现,修改需全局替换; - ❌ 无嵌套结构:父子选择器必须完整书写,层级深时代码冗长;
- ❌ 无函数/混合(Mixin) :相同样式逻辑无法复用;
- ❌ 手动写浏览器前缀:如
-webkit-,-moz-等,繁琐易错。
💡 结论:原生 CSS 缺乏编程能力,难以支撑复杂项目的可维护性。
二、Stylus:让 CSS 拥有“超能力”
✅ 什么是 Stylus?
Stylus 是一种 CSS 预处理器,它扩展了 CSS 语法,支持变量、函数、嵌套、混合等特性,最终编译为标准 CSS。浏览器无法直接运行 Stylus,必须先编译。
🔧 安装与编译
# 全局安装 Stylus
npm install -g stylus
# 单次编译
stylus style.styl -o style.css
# 监听模式(边写边编译)
stylus style.styl -o style.css -w
-o:output(输出文件)-w:watch(监听文件变化)
三、Stylus 核心特性:告别重复,拥抱简洁
1. 无需大括号与分号
// style.styl
.card
width 45px
height 45px
background-color #3498db
border-radius 4px
&:hover
background-color #2980b9
✅ 缩进代替
{},换行代替;,代码更清爽。
2. 变量与作用域
// 定义主题色
$ primary = #3498db
$ radius = 4px
.card
background-color $ primary
border-radius $ radius
✅ 修改
$ primary即可全局更新配色。
3. 嵌套:模拟 HTML 结构
.panel
padding 20px
&.active // 同级状态 → .panel.active
border 2px solid $ primary
.header // 子元素 → .panel .header
font-weight bold
✅ 嵌套清晰表达 DOM 层级,避免选择器冗长。
4. 混合(Mixin):复用样式块
// 定义圆角混合
rounded(radius = 4px)
border-radius radius
.card
rounded(8px) // 调用混合
✅ 类似函数,支持默认参数,极大提升复用性。
5. 自动补全浏览器前缀
通过插件(如 autoprefixer),Stylus 可自动添加 -webkit- 等前缀,无需手动维护。
四、现代布局基石:Flex 弹性盒子
Flexbox 是移动端和响应式布局的绝对主角,其核心是 “父容器控制子项分布” 。
✅ 基础用法
.container {
display: flex; /* 创建弹性上下文 */
}
🔑 关键属性(父容器)
| 属性 | 作用 | 常用值 |
|---|---|---|
| flex-direction | 主轴方向 | row(默认,水平), column(垂直) |
| justify-content | 主轴对齐 | flex-start, center, flex-end, space-between |
| align-items | 侧轴对齐 | stretch(默认), center, flex-start |
📐 子元素:flex 属性
.item { flex: 1; /* 等比例分配剩余空间 */ }
flex: 0.5→ 占比 0.5 / (总和),常用于非等分布局;- 子元素默认不换行,宽度由内容或
flex决定。
💡 最佳实践:
用flex: 1快速实现自适应列布局,替代浮动或inline-block。
五、优雅动效:Transition 过渡
相比复杂的 @keyframes 动画,transition 专为属性变化设计,简单高效。
.button { transition: all 700ms ease-in 400ms; }
all:监听所有可动画属性;700ms:过渡持续时间;ease-in:缓动函数(先慢后快);400ms:延迟开始时间(即transition-delay)。
✅ 典型场景:悬停效果、状态切换、加载动画。
六、响应式灵魂:媒体查询(Media Query)
通过 @media 为不同设备定制样式:
/* 默认样式(桌面端) */
.container {
width: 1200px;
}
/* 移动端适配 */
@media (max-width: 480px) {
.container {
width: 100%;
padding: 10px;
}
}
max-width: 480px:屏幕宽度 ≤ 480px 时生效;- 常见断点:手机(≤480px)、平板(≤768px)、桌面(≥1024px)。
💡 移动优先策略:先写移动端样式,再用
min-width逐步增强。
七、整合实战:Stylus + Flex + 响应式
// variables.styl
$ mobile-breakpoint = 480px
$ primary = #3498db
// layout.styl
@import 'variables'
.app
display flex
min-height 100vh
@media (max-width $ mobile-breakpoint)
flex-direction column
.sidebar
flex 0.3
background $ primary
@media (max-width $ mobile-breakpoint)
flex none
width 100%
.main
flex 1
padding 20px
&:hover
transition background 300ms
background #f9f9f9
✅ 此代码:
- 使用变量管理断点与颜色;
- 嵌套媒体查询,逻辑集中;
- Flex 实现自适应侧边栏;
- Hover 添加平滑过渡。
结语:从工具到思维
Stylus 不仅是语法糖,更是工程化思维的体现——通过变量、混合、嵌套,我们将 CSS 从“描述性语言”升级为“可编程语言”。配合 Flex 布局、Transition 动效和 Media Query 响应式,我们能以更少的代码、更高的可维护性,构建跨设备的现代 Web 应用。
记住:
工具服务于思想。掌握 Stylus 的本质,不是为了写更少的分号,而是为了写出更清晰、更灵活、更可持续的样式系统。