热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CSS预处理器和后处理器

css预处理器和后处理器一、引言二、正文1.CSS预处理器2.CSS后处理器3.开发模式的变化4.优秀的CSS后处理器框架5.最后一、引言因为我是前端刚入门,昨天看


css预处理器和后处理器

  • 一、引言
  • 二、正文
    • 1.CSS 预处理器
    • 2.CSS 后处理器
    • 3.开发模式的变化
    • 4.优秀的 CSS 后处理器框架
    • 5.最后


一、引言

因为我是前端刚入门,昨天看了一个大神写的的初级前端需要掌握的知识,然后我就开始一一搜索,下面是我对css预处理器和后处理器的搜索结果,一是和大家分享下这方面的知识,另一方面方便自己以后翻阅。所以感兴趣的可以看下。

转载自博客园:


二、正文

说到 CSS 预处理器,大家都很熟悉了,本文的重点是介绍从中抽出的 CSS 后处理器,这也是近一年多以来,前端社区的一些新趋势。
将 CSS 后处理器 抽象出来之后,会对 CSS 的 开发模式 带来一些变化,下面从概念开始说起。


1.CSS 预处理器


  1. 广义上说,目标格式为 CSS 的 预处理器 是 CSS 预处理器,但本文 特指 以最终生成 CSS 为目的的 领域特定语言。
    Sass、LESS、cssNext、Stylus 是目前最主流的 CSS 预处理器。
    示例:以 LESS 为例:
    LESS
    在这里插入图片描述
    将以上 DSL 源代码 (LESS),编译成 CSS:
    在这里插入图片描述
    可以看到,编译前 与 编译后 是完全不同的语言。

  2. 实现原理
    取到 DSL 源代码 的 分析树
    将含有 动态生成 相关节点的 分析树 转换为 静态分析树
    将 静态分析树 转换为 CSS 的 静态分析树
    将 CSS 的 静态分析树 转换为 CSS 代码
    现实中的 CSS 预处理器 更复杂一点儿,因为大多功能要同时支持 特有 DSL 与 原生 CSS,一件事情要同时考虑两种情况下的处理。

  3. 优缺点
    优点:语言级逻辑处理,动态特性,改善项目结构
    缺点:采用特殊语法,框架耦合度高,复杂度高
    CSS 后处理器


2.CSS 后处理器

是对 CSS 进行处理,并最终生成 CSS 的 预处理器,它属于广义上的 CSS 预处理器。


  1. 我们很久以前就在用 CSS 后处理器 了,最典型的例子是 CSS 压缩工具(如 clean-css),只不过以前没单独拿出来说过。
    还有最近比较火的 Autoprefixer,以 Can I Use 上的 浏览器支持数据 为基础,自动处理兼容性问题。

示例:以 Autoprefixer 为例:
在这里插入图片描述
将以上 标准 CSS,编译为处理了兼容性的 生产环境 CSS:
在这里插入图片描述
可以看到,编译前 与 编译后 的代码都是 CSS。


  1. 如果你使用 Sublime Text,可以通过 Package Control 安装 Autoprefixer 插件体验一下。

  2. 实现原理
    将 源代码 做为 CSS 解析,获得 分析树
    对 CSS 的 分析树 进行 后处理
    将 CSS 的 分析树 转换为 CSS 代码

  3. 优缺点
    优点:使用 CSS 语法,容易进行模块化,贴近 CSS 的未来标准
    缺点:逻辑处理能力有限


3.开发模式的变化


  1. 原来的开发模式是这样的:
    DSL 源代码 -> 生产环境 CSS
    与原来相比,新的 开发模式 最大的变化是面向 标准 CSS 编程,将 兼容性、优化 部分交给 CSS 后处理器 自动完成:

DSL 源代码 -> 标准 CSS -> 生产环境 CSS
等到众多 CSS 未来标准 在 CSS 后处理器 层面实现之后,部分项目甚至可以回归到使用 标准 CSS 编程的模式:

标准 CSS(包含未来标准的后处理器实现)-> 生产环境 CSS
以下有一些简单对比:
在这里插入图片描述
现在我推荐 CSS 预处理器 与 CSS 后处理器 同时使用,各自做他们最擅长的部分。

我当回神棍,预计以后会有这样的趋势:

越来越多专注于 单一功能 的小型 CSS 工具库
CSS 样式库 从 整体方案 到 模块化组合方案 转变
部分 CSS 未来标准 在 CSS 预处理器 中得到支持
原生 CSS 和 CSS 后处理器 的组合成为新选择


4.优秀的 CSS 后处理器框架


  1. Rework
    Rework 是一个 高效、简单、易扩展 并且 模块化 的 CSS预处理器。
    它在 2012 年 9 月才发布了第一个版本,是 Stylus 的作者 TJ Holowaychuk 大神挖的新坑。
    实际上,他采用的是 CSS 后处理器 的模型,在其之上有一个模仿 Stylus 风格缩进嵌套的工具 styl,其 CSS 预处理器 部分功能是在 Rework 开始工作之前通过 css-whitespace 实现的。
    有一些基于 Rework 的样式库,参考了 CSS 标准草案 或 CSS 标准提案,相当于支持了 CSS 的未来标准,如 rework-vars、rework-font-variant、rework-calc、rework-color-function 等。

是不是听起来有点晕?这正说明它的模块化做的非常好,你可以按照实际需要,组合 CSS 框架,比如 Myth。

概括一下 Rework 的特点:

Javascript 中直接操作 CSS 解析对象,扩展方便
可以 自由组合模块,按需定制 CSS 工具库
CSS 后处理器 的模型决定它的模块倾向 CSS 未来标准
除 服务器 端外,也支持在 浏览器 环境运行
Rework 还很年轻,还需要更多的时间积累。


  1. PostCSS
    PostCSS 是一个 CSS 后处理器 框架,允许你通过 Javascript 对 CSS 进行修改。
    它的第一个版本发布于 2013 年 11 月,是从 Autoprefixer 项目中抽象出的框架。

PostCSS 有以下特点:
用js实现的css的抽象语法树AST(Abstract Syntax Tree)
它和 Rework 非常相似,但提供了 更高级的 API,更易扩展
它可以在现有 Source Map 的基础上生成新的 Source Map
在 原有 CSS 格式 的保留方面做的更好,便于开发 编辑器插件
比 Rework 更年轻,还只有 Autoprefixer 一个成功案例
其实 Autoprefixer 最初是基于 Rework 做的,但后来作者有更多需求(上面的列表),就造了 PostCSS 这个轮子。


5.最后


  1. CSS 后处理器 的出现让 CSS 工作流 更清晰,但现在他们还远未成熟,还有很多地方能够做的更好。

  2. 比如 Autoprefixer 只做语法 Prefix 层面的兼容,还需要一些专门处理如 IE 滤镜兼容 这些问题的小模块配合使用。
    比如可以针对 CSS 中单独使用的 图片 自动做 CSS Sprites 归类与合并 的工作。
    比如可以根据项目对 图标字体 字形的实际使用情况自动对字体进行 体积优化。

  3. 当每个模块都专注于特定的问题时,那他多数情况下要比一个大而全的集中式框架更靠谱。

或许你也可以考虑基于 Rework 或 PostCSS 写个 CSS 后处理器 玩玩?


推荐阅读
  • 近期,微信公众平台上的HTML5游戏引起了广泛讨论,预示着HTML5游戏将迎来新的发展机遇。磊友科技的赵霏,作为一名HTML5技术的倡导者,分享了他在微信平台上开发HTML5游戏的经验和见解。 ... [详细]
  • javax.mail.search.BodyTerm.matchPart()方法的使用及代码示例 ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 优化Vite 1.0至2.0升级过程中遇到的某些代码块过大问题解决方案
    本文详细探讨了在将项目从 Vite 1.0 升级到 2.0 的过程中,如何解决某些代码块过大的问题。通过具体的编码示例,文章提供了全面的解决方案,帮助开发者有效优化打包性能。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 探索Web 2.0新概念:Widget
    尽管你可能尚未注意到Widget,但正如几年前对RSS的陌生一样,这一概念正逐渐走入大众视野。据美国某权威杂志预测,2007年将是Widget年。本文将详细介绍Widget的定义、功能及其未来发展趋势。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 深入解析 Synchronized 锁的升级机制及其在并发编程中的应用
    深入解析 Synchronized 锁的升级机制及其在并发编程中的应用 ... [详细]
author-avatar
锋仔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有