前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >谈谈 CSS 预处理器

谈谈 CSS 预处理器

原创
作者头像
HZFEStudio
修改于 2021-09-26 09:56:01
修改于 2021-09-26 09:56:01
2.6K10
代码可运行
举报
文章被收录于专栏:HZFEStudioHZFEStudio
运行总次数:0
代码可运行

完整高频题库仓库地址:https://github.com/hzfe/awesome-interview

完整高频题库阅读地址:https://febook.hzfe.org/

相关问题

  • CSS 主要有哪些预处理器
  • 为什么需要用预处理器
  • 各预处理器优缺点

回答关键点

Sass Less Stylus PostCSS 工程化 提升效率

CSS 本身不属于可编程语言,当前端项目逐渐庞大之后 CSS 的维护也愈加困难。CSS 预处理器所做的本质上是为 CSS 增加一些可编程的特性,通过变量嵌套简单的程序逻辑计算函数等特性,通过工程化的手段让 CSS 更易维护,提升开发效率。

目前主流的 CSS 预处理器主要有 Sass、Less、Stylus、PostCSS。

知识点深入

1. PostCSS[1]

PostCSS 是目前最为流行的 CSS 预/后处理器。PostCSS 本体功能比较单一,它提供一种用 JavaScript 来处理 CSS 的方式。PostCSS 会把 CSS 解析成 AST(Abstract Syntax Tree 抽象语法树),之后由其他插件进行不同的处理。

功能

PostCSS 本体功能比较单一,大多数的 CSS 处理功能都由插件提供,下面是一些常用的插件:

优点
  • 插件系统完善,扩展性强。
  • 配合插件功能齐全。
  • 生态优秀。
缺点
  • 配置相对复杂。

2. Sass[2]

Sass 在完全兼容 CSS 语法的前提下,给 CSS 提供了变量、嵌套、混合、操作符、自定义函数等可编程能力。

功能

Sass 常用的有几种功能:

  • 变量:变量中可以存储颜色、字体或任何 CSS 值。
  • 嵌套:可嵌套 CSS 选择器,提供清晰的层次结构。
  • 混合:可以定义&重用代码块。
  • 扩展/集成:可以在一个选择器内继承另一个选择器。
  • 操作符:可以在 CSS 中使用操作符进行计算。
  • 条件/循环语句:可以循环/条件生成 CSS。
  • 自定义函数:可以自定义复杂操作的函数。
优点
  • 使用广泛。
  • 功能支持完善。
  • 可编程能力强。
缺点
  • CSS 的复杂度不可控。
  • node-sass 国内安装不易(非 Sass 本身的缺点,dart-sass 可代替)。

3. Less[3]

Less 和 Sass 类似,完全兼容 CSS 语法,并给 CSS 提供了变量、嵌套、混合、运算等可编程能力。Less 通过 JavaScript 实现,可在浏览器端直接使用。

功能

Less 常用的有几种功能:

  • 变量:变量中可以存储颜色、字体或任何 CSS 值。
  • 嵌套:可嵌套 CSS 选择器,提供清晰的层次结构。
  • 混合:可以定义&重用的代码块。
  • 扩展/集成:可以在一个选择器内继承另一个选择器。
  • 运算:可以在 CSS 中进行计算。
  • 条件/循环语句:可以循环/条件生成 CSS。
优点
  • 使用广泛。
  • 可以在浏览器中运行,容易实现主题定制功能。
缺点
  • 不支持自定义函数(可通过 mixins 实现简单逻辑)。
  • 编程能力相对较弱。

4. Stylus[4]

Stylus 基础功能和 Sass / Less 十分类似。Stylus 的特点是冒号、分号、逗号和括号都是可选项,所以可以写出非常简洁的 CSS,示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
body
  background-color: #000

body::after
  content: 'HZFEStudio'
  color: #fff
  font-size: 20px

扩展阅读

1. CSS Modules[5]

CSS Modules 和前文介绍的预处理器不同,不是可编程化的 CSS,而仅是给 CSS 文件加入了作用域和模块依赖,主要是为了解决 CSS 全局污染的痛点以及为了解决全局污染而嵌套过深的问题。使用示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* style.css */
.hzfeTitle {
  color: #666;
  font-size: 20px;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import style from "./style.css";

document.body.innerHTML = `<h1 class="${style.hzfeTitle}">HZFEStudio</h1>`;

2. CSS-in-JS

如名字所见,CSS-in-JS 是一种在 JavaScript 里写 CSS 的方式。利用 JS 的优势可实现非常灵活的可扩展的样式。CSS-in-JS 有很多实现,目前比较流行的是 Styled-components

通过 Styled-components 写 CSS 的示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from "react";
import styled from "styled-components";

function hzfe() {
  const Title = styled.h1`
    font-size: 1.5em;
    text-align: center;
    color: #666;
  `;
  return <Title>HZFEStudio</Title>;
}

3. Tailwind 和 Utility-first CSS

近几年随着 Tailwind 的流行,功能类优先(Utility-first CSS)的理念也再次流行起来。这里简单介绍一下 Tailwind CSS。

3.1 Tailwind[6]

Tailwind CSS 是一个功能类优先的 CSS 框架,通过组合不同的类名实现页面设计。Tailwind 主要优势如下:

  1. 不用考虑 class 的命名。
  2. CSS 文件大小增长可控,通过 purge 可生成非常小的 CSS 文件。
  3. 统一设计系统下的样式与布局。
  4. IDE 集成优秀。

参考资料

  1. PostCSS - A tool for transforming CSS with JavaScript
  2. Sass - CSS with superpowers
  3. Less - It's CSS, with just a little more
  4. Stylus - Foresight has never been so crucial
  5. CSS Modules
  6. Tailwind CSS

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
好文不火系列
好文不火系列
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
CSS Modules VS. styled-components,哪个才是解决 CSS 不足之处的更好方案?
CSS 是一门标记语言,用于元素布局及样式定义。它存在很多问题,例如书写效率和维护性低;缺乏模块机制、变量、函数等概念;容易出现全局样式污染和样式冲突等。目前前端社区存在很多解决上述问题的方案,主要包括 CSS Module以及 styled-components💅(CSS-in-JS 的代表)。 styled-components 在我的日常开发中用得很多,并且用得非常顺手。它的 CSS-in-JS 思想以及通过 props 来动态更改样式跟 React 的开发理念一脉相承,并且还基于 React Con
玖柒的小窝
2021/10/31
8.1K1
CSS Modules VS. styled-components,哪个才是解决 CSS 不足之处的更好方案?
scss,less,stylus这些css处理器该怎么选择
css作为前端三剑客,从诞生以来很少变化,css3都已经诞生了20年,和js的框架层出不穷相比,似乎css就不需要框架,就不需要更优化的写法。然而在追求极致的程序员面前,代码的可维护性,代码的优雅性有着迫切希望改进css代码的编写,于是css预处理器诞生了。
程序那些事儿
2023/03/07
8580
scss,less,stylus这些css处理器该怎么选择
CSS-Next : CSS预处理器简单写法的替代者, 想了解下么?
借助相关的插件我们可以把新的特性降级到 css3乃至一些特性降级到css2.1...无缝过渡
CRPER
2018/08/28
9910
Vue中使用CSS预处理器 stylus以及配置全局变量的方法
不得不说CSS预处理器(Sass/Less/Stylus)极大的方便了前端研发攻城狮编写CSS样式,提供了变量定义、可嵌套的选择器、mixins混合书写、函数定义等诸多便捷的能力。
胡哥有话说
2019/07/25
3.4K0
CSS进阶 - CSS Modules与预处理器简介
在前端开发领域,随着项目规模的扩大,CSS管理变得日益复杂。为了提高代码的可维护性、可重用性及避免全局命名冲突,CSS Modules与预处理器(如Sass、Less)应运而生。本文将深入浅出地介绍这两项技术的基本概念、优势、常见问题、易错点以及如何避免这些问题,同时提供实用的代码示例,帮助开发者更好地掌握这些进阶工具。
Jimaks
2024/06/18
1.3K0
技术天地 | CSS-in-JS:一个充满争议的技术方案
为了解决传统CSS在现代前端应用开发中遇到的痛点,FreeWheel评估了大量新一代的CSS框架/工具/方案。在本文中,作者以评估过程为线索,介绍了CSS-in-JS的背景、现状、开发特点和趋势。
用户6543014
2020/08/07
2.7K0
技术天地 | CSS-in-JS:一个充满争议的技术方案
【CSS】470- 是时候开始用 CSS 自定义属性了
自定义属性(有时候也被称作CSS变量或者级联变量)是由CSS作者定义的,它包含的值可以在整个文档中重复使用。由自定义属性标记设定值(比如:--main-color: black;),由var() 函数来获取值(比如:color: var(--main-color);)
pingan8787
2020/08/04
1.1K0
【CSS】470- 是时候开始用 CSS 自定义属性了
CSS 预处理器中的循环
本文由 nzbin 翻译,黄利民 校稿。未经许可,禁止转载! 英文出处:Loops in CSS Preprocessors 发表地址:http://web.jobbole.com/91016/ 如果你看过老的科幻电影,你一定知道循环的强大之处。给你的机器人克星设置无限循环,它就会爆炸,然后机器人灰飞烟灭了。 预处理器的循环并不会在太空中发生剧烈爆炸(我希望),但是它有利于书写 DRY CSS(译者注:详细介绍可以参考这篇文章 http://vanseodesign.com/css/dry-princ
叙帝利
2018/01/17
4.5K1
React 设计模式 0x4:样式
在每个 Web 应用程序中,样式化非常重要,因为样式使其对用户非常有吸引力,并为用户提供良好的体验。在 React 中有不同的方法来实现这一点。
Cellinlab
2023/05/17
1.4K0
【React】:CSS 模块化
以下是 CSS Guidelines 中的一个示例,这个示例展示了一个问题:除了写这段代码的人,没有人知道这段代码是干什么的。
WEBJ2EE
2020/07/14
1.3K0
【React】:CSS 模块化
7. 精读《请停止 css-in-js 的行为》
styled-components 利用 ES6 的 tagged template 语法创建 react 纯样式组件。消除了人肉在 dom 和 css 之间做映射和切换的痛苦,并且有大部分编辑器插件的大力支持(语法高亮等)。此外,styled-components 在 ReactNaive 中尤其适用。
黄子毅
2022/03/14
2K0
7. 精读《请停止 css-in-js 的行为》
再见,CSS-in-JS
大家好,我 ssh。在过去的开发中,我一直在用 styled-component 库作为 CSS 的解决方案。它有很多优点,灵活、可复用性强、功能强大、可以接受动态 JS 变量传入组件等等…… 但今天我看到一篇文章,说都是 Spot 团队的人已经决定抛弃 CSS-in-JS 的方案了,因为对他们来说,性能损耗已经远远超过其灵活性的优势了。接下来,我来和大家分享一下这篇Why We're Breaking Up with CSS-in-JS
ssh_晨曦时梦见兮
2023/10/14
6680
再见,CSS-in-JS
CSS预处理器的对比 — sass、less和stylus
本文根据Johnathan Croom的《sass vs. less vs. stylus: Preprocessor Shootout》所译,整个译文带有我们自己的理解与思想,如果译得不好或不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://net.tutsplus.com/tutorials/html-css-techniques/sass-vs-less-vs-stylus-a-preprocessor-shootout/,以及作者相关信息 ——作者:Johnathan Croom
laixiangran
2018/04/11
4.7K0
CSS预处理器的对比 — sass、less和stylus
CSS技术入门
CSS (Cascading Style Sheets) 其实并不是编程语言,CSS可以直接运行在浏览器中,浏览器就是它们的运行环境,CSS 中文名为层叠样式表,也就是一些样式的配置。
码之有理
2023/02/13
3K0
SASS相关知识
Sass(Syntactically Awesome Style Sheets)是一种CSS预处理器,用于增强CSS的功能和灵活性。它扩展了CSS,并引入了许多有用的功能,如变量、嵌套、混合、继承以及模块化的结构。
FGGIT
2024/12/20
980
CSS Modules与Styled Components:提升CSS可维护性
CSS Modules和Styled Components都是现代Web开发中用于提升CSS可维护性的解决方案,它们通过不同的方式解决了传统CSS的一些问题,如样式冲突、命名约定和全局作用域。
天涯学馆
2024/08/17
1500
理解CSS | 青训营笔记
CSS,全称为层叠样式表(Cascading Style Sheets),是一种用于描述网页展示效果的语言。它可以定义字体、颜色、布局、边框、背景等方面的样式,使得网页看起来更加美观、规范、易读。
心安事随
2024/07/29
1680
理解CSS | 青训营笔记
改善CSS的10种最佳做法
CSS似乎是一种非常简单的语言,很难在其中犯错误。你只需添加样式规则,就可以对网站进行样式设置了,对吗?对于只需要几个CSS文件的小型网站,情况可能就是这样。但是在大型应用程序中,样式可能会迅速失控。你如何使它们易于管理?
winty
2020/06/01
7330
CSS样式组件:为什么你应该(或不应该)使用它
选择完全适合您需求的样式模块就像选择 JavaScript 框架一样困难。您的最终选择可能取决于项目的规模、公司现有的堆栈或仅仅是品味问题。如果 React 是您的框架,那么样式组件就不能从您的可能性列表中排除。Bas Bastiaans - PanCompany 的前端开发人员 - 最近从“更少”组件迁移到样式化组件,并分享了他之后经历的好处。接下来,他还讨论了在采取他所做的迁移步骤之前必须考虑的一些谈话要点。
哈德森sir
2024/05/16
1780
CSS模块化的演进
| 导语 CSS 做为 Web 技术的基石,从一开始就展示出了巨大的潜力。它的入门非常简单,你只需为元素定义好样式属性和值。然而 CSS 特性随着规范的升级越来越丰富,前端业务复杂性的增加也使得工程愈加庞大。在大型 Web 应用里面,CSS 的组织是一件复杂和凌乱的事情,你更改页面上任意一个元素的一行CSS样式都有可能影响到其他页面上的元素。 由于 CSS 本身并不编程特性,因此在演变过程中出现了很多优秀的编程思想,本文会带领大家探讨 CSS 模块化的演变历程。 CSS 预处理器 CSS 预处理器是什
腾讯NEXT学位
2018/08/29
1.8K0
CSS模块化的演进
相关推荐
CSS Modules VS. styled-components,哪个才是解决 CSS 不足之处的更好方案?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验