写点什么

使用 Restyle.js 简化 CSS 预处理

  • 2014-02-19
  • 本文字数:1306 字

    阅读完需:约 4 分钟

Andrea Giammarchi 的 restyle.js 是一个新的,基于 JavaScript 的 CSS 预处理器,能够运行在服务端(通过 Node.js)或者浏览器中。它宣称自己是“一种简化的 CSS 方法”,能够生成 CSS 规则和属性的所有前缀变化,如果合适的话,自动插入到 DOM 中。

关于 CSS 预处理器基本没有什么不足之处,但 Andrea 表示还没有哪种轻量级的预处理器能够同时适用于服务端和客户端:

在你认为“又一个 CSS 预处理器”之前,我想告诉你,我问过周围一些常见的、知名的 CSS 或者普通 Web 开发人员,似乎还没有这样的小脚本……一旦你了解它,你也许会想“怎么之前没人做这个呢?”我的想法是可能人有做了,但我不确定它能小到 0.8KB 而且同时兼容服务端和甚至 IE 6 这样的客户端……因此,我们正在谈论的是 restyle。

该库暴露了一个单独的方法 restyle(),它有两个参数。第一个参数是 JavaScript 对象,其语法接近于 CSS 和 DOM 样式编辑。示例如下:

复制代码
restyle({
'body > div.my-div': {
backgroundColor: 'goldenrod',
backgroundImage: 'url(mybg.png)'
}
});

它将生成以下 CSS:

复制代码
body > div.my-div {
background-color: goldenrod;
background-url: url(mybg.png);
}

我们也可以用不同的方式指定 JavaScript 对象,达到相同的结果:

复制代码
restyle({
'body > div.my-div': {
background: {
color: 'goldenrod',
image: 'url(mybg.png)'
}
}
});

当然,到目前为止,这没什么特别的而且也没有减少标记,即使有,也很细微。但是当你在处理更繁琐的 CSS 时,例如供应商前缀,restyle 将发挥其强大功能。第二个参数允许你指定供应商前缀,用于生成结果,示例如下:

复制代码
restyle({
'.my-div': {
transition: 'background-color 500ms ease';
backgroundColor: '#00f';
}
}, ['moz', 'webkit']);

将生成以下 CSS:

复制代码
.my-div {
-webkit-transition: background-color 500ms ease;
-moz-transition: background-color 500ms ease;
transition: background-color 500ms ease;
background-color: #00f;
}

在编写动画规则时,这就显得非常方便。少量代码就能转换成大量包含供应商前缀的规则和 CSS 属性代码,而这只需要很少的付出。在服务端,省略第二个参数将不生成前缀。而在客户端,不论当前执行代码的是哪种客户端,restyle.js 都将生成所有常见供应商前缀。

根据不同的环境,restyle() 方法将返回不同的结果。在 Node.js 中,它返回包含 CSS 结果的字符串。而在浏览器中,会将 CSS 自动插入到 DOM 中,让其立即生效,返回值是一个方便的小对象,包括属性结点(结果样式元素)、CSS(包括 CSS 结果的字符串)和一个单独的方法 remove(),该方法用于从 DOM 中删除已经插入的样式。

这个简单的示例网页,让你能够编写代码并通过restyle.js 生成结果。正如Andrea 的博客中一些评论所指出的,restyle.js 与类似的库 AbsurdJS 基于相同的思想,但后者更大且功能更全。Restyle.js 只有十分之一的大小,真的是一个轻量级,有趣的 CSS 预处理器,值得一看。你可以查看 readme 开始学习如何使用。

原文英文链接: Simplified CSS Preprocessing with restyle.js

2014-02-19 04:131635

评论

发布
暂无评论
发现更多内容

阿里onedate分层思想

奔向架构师

数据中台 7月月更

查策,查策,python字体反爬再一次实践

梦想橡皮擦

Python 爬虫 7月月更

D1-H 开发板——哪吒 开发入门

贾献华

7月月更

CentOS 7 常用的 11 个小技巧

耳东@Erdong

Linux 7月月更

开源分布式链路追踪对比

穿过生命散发芬芳

链路追踪 7月月更

ES6箭头函数的使用

bo

JavaScript 前端 ES6 7月月更

通过http请求启动jenkins任务

程序员欣宸

Java jenkins 7月月更

微信朋友圈的高性能架构设计

张立奎

JAVA编程规范之建表规约

源字节1号

后端开发

在openEuler社区开源的Embedded SIG,来聊聊它的多 OS 混合部署框架

openEuler

Linux 开源 操作系统 嵌入式 openEuler

架构实战营模块二作业

zhihai.tu

使用 Vue + Three.js 构建交互式 WEB 作品展示集(一)

devpoint

Vue three.js 7月月更

【函数式编程实战】(四)流-Stream API原理解析

小明Java问道之路

Java 后端 stream 函数式编程 7月月更

1000个Okaleido Tiger首发上线Binance NFT,引发抢购热潮

鳄鱼视界

视频号加强打击低俗内容:对违背公序良俗的内容必须赶尽杀绝

石头IT视角

计算机网络之初识网络

未见花闻

7月月更

汇编语言伪指令详解(附实例)

timerring

汇编语言 7月月更 伪指令

节流和防抖的说明和实现

南极一块修炼千年的大冰块

7月月更

接口测试

Xd

接口测试工具

最新的swoole-cli已可以支持Windows,手把手带你在windows体验swoole

迷彩

swoole 服务器开发 7月月更 swoole-cli

LibcarePlus 用户态热补丁技术那些事

openEuler

安全 openEuler 漏洞 #开源

openEuler 资源利用率提升之道 01:概论

openEuler

开源 openEuler 内核 资源管理

python干货——函数

Java学术趴

7月日更

什么是 Rest 动词

宇宙之一粟

REST API 7月月更

1000个Okaleido Tiger首发上线Binance NFT,引发抢购热潮

股市老人

STM32+ESP8266+MQTT协议连接阿里云物联网平台

DS小龙哥

7月月更

1000个Okaleido Tiger首发上线Binance NFT,引发抢购热潮

BlockChain先知

Redis管道技术/分区

恒山其若陋兮

7月月更

strncat() strncmp()

謓泽

7月月更

Qt | 设置部件大小 sizeHint、minimumSizeHint、sizePolicy、stretch factor

YOLO.

qt 7月月更

使用Restyle.js简化CSS预处理_JavaScript_Andy Earnshaw_InfoQ精选文章