速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

使用 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:131651

评论

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

原创 | 使用JPA实现DDD持久化- O:对象的世界(3/3)

编程道与术

Java hibernate DDD JDBC jpa

微服务的认识

chenzt

第四届IMC再起烽烟 极致性能助战力升级!

最新动态

第十周作业

晨光

Oracle常用命令

阡陌r

低/零代码的认知误区有哪些?

代码制造者

编程语言 低代码 零代码 信息化 开发应用

即大数据后-贵阳能否成为区块链的机遇之城?

CECBC

区块链 大数据 贵阳

AndroidStudio解决Unknown host 'd29vzk4ow07wi7.cloudfront.net'. You may need to adjust the proxy settings in Gradle

小菜鸟学php

中国计算机软件开发合同纠纷分析报告(2019-2)

朱又生

大数据 项目管理 计算机软件开发合同纠纷 风险管理

快速学习秘诀:费曼学习法

池建强

学习

SpreadJS 纯前端表格控件应用案例:生产采购管理软件

葡萄城技术团队

丢弃掉那些BeanUtils工具类吧,MapStruct真香!!!

Hollis

Java 程序员 后端

Linux神器strace的使用方法及实践

华为云开发者联盟

Linux 运维 工具 后端 Strace

娱乐至穷

北柯

学习 互联网 娱乐 抖音

如何通过electron构建桌面跨平台音视频应用

ZEGO即构

音视频 Electron RTC

央行清算总中心与三家银行签署区块链福费廷交易平台合作协议

CECBC

区块链技术 人民银行

华为阿里下班时间曝光:所有的光鲜,都有加班的味道

程序员生活志

华为 加班 阿里

架构师训练营第10周

大丁💸💵💴💶🚀🐟

第十周总结

晨光

软件规模扩张与其组织粒度的进化

superman

中台 微服务 服务化改造

SpreadJS 纯前端表格控件应用案例:医疗行业智能报表系统

葡萄城技术团队

最右JS2Flutter框架——动画、小游戏的实现(四)

刘剑

flutter 大前端 探索与实践

信息管理软件需求分析阶段的实践经验及论述(2010年)

朱又生

项目管理 产品经理 需求分析 用户需求调研

中国计算机软件开发合同纠纷分析报告(2019-3)

朱又生

大数据 项目管理 计算机软件开发合同纠纷 风险管理

RushPlayer“一键下马”系列之-JavPlayer

flow

不断壮大的电竞生态——英特尔大师挑战赛携手李宁中国选手等你来战!

最新动态

中国计算机软件开发合同纠纷分析报告(2019-1)

朱又生

大数据 项目管理 计算机软件开发合同纠纷 风险管理

5招详解linux之openEuler /centos7防火墙基本使用指南

华为云开发者联盟

centos7 网络安全 防火墙 openEuler 网络环境

获奖名单公布 | 写作平台八月宠粉福利来袭,参与创作领取限时大奖~

InfoQ写作社区官方

写作平台 征稿 热门活动

IMC御用设备到底有多强?英特尔携手掠夺者呈现“飞”一般5GHz电竞盛宴

最新动态

将设计模式应用到日常的curd中-模板方法和装饰器

LSJ

Java 设计 设计模式 装饰器 模板方法

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