stylus是 CSS 的预处理框架。CSS 预处理,顾名思义,预先处理 CSS。那 stylus 咋预先处理呢?stylus 给 CSS 添加了可编程的特性,也就是说,在 stylus 中可以使用变量、函数、判断、循环一系列 CSS 没有的东西来编写样式文件,执行这一套骚操作之后,这个文件可编译成 CSS 文件。

(1)安装

首先,安装 stylus(确保之前已经安装 nodejs )。

$ npm install stylus

安装之后,运行 stylus -h 可查看帮助。

运行 stylus example.styl 可将 demo.styl 文件编译成 example.css 文件。

(2)基本使用

一段简单的 stylus 代码:

$background-color = lightblue

add (a, b = a)

a = unit(a, px)

b = unit(b, px)

a + b

.list-item

.text-box

span

background-color: $background-color

margin: add(10)

padding: add(10, 5)

&:hover

background-color: powderblue

编译后生成的 CSS 代码:

.list-item span,

.text-box span {

background-color: #add8e6;

margin: 20px;

padding: 15px

}

.list-item:hover,

.text-box:hover {

background-color: #b0e0e6;

}

由此可以看到了 stylus 代码以及由它编译而成的 CSS 代码,下面来一步一步看一看为啥编译成这样。

变量    $background-color = lightblue

上面的代码声明了变量 $background-color,并为其赋值 lightblue。

声明之后,就可以使用这个变量了:

span

background-color: $background-color

翻译成 CSS 就是:

span{

background-color: lightblue;

}

函数

add (a, b = a)

a = unit(a, px)

b = unit(b, px)

a + b

代码声明了函数 add, add 接受两个参数 a 和 b,其中 b 的默认值是 a。

add 中调用了 stylus 的内置函数 unit,此处,unit 函数为 a 和 b赋予了单位 px。

最后将 a 和 b 相加,并返回结果,是的,你没有看错,没有 return,但是返回了结果。

return 居然是可以省略的,很任性了。

函数调用:

span

margin: add(10)

padding: add(10, 5)

翻译成 CSS 就是:

span {

margin: 20px;

padding: 15px;

}

选择器

.list-item

.text-box

span

background-color: $background-color

margin: add(10)

padding: add(10, 5)

&:hover

background-color: powderblue

这一段是与 CSS 代码长得最像的了,虽说最为相像,可有些差别还是一眼就能看出的。比如没有了 CSS 的花括号,没有了 CSS 的分号,却多了一些奇奇怪怪的缩进,还有那个 & 是什么鬼?还 &:hover ???

先说符号,这里提到的花括号和分号在stylus中是可以省略的,不仅如此,冒号也是可以省略的,color: powderblue 你可以写成 color powderblue,没有问题。

再说缩进,先提出两个有缩进关系的选择器,上面代码片段第二行的 .text-box 和第三行的 span,其实很容易理解,这哥俩写到 CSS 里面是这样的:

.text-box span{ ... }

即 span 是 .text-box 的子选择器,stylus 中以缩进表示这种关系,更加清晰明了,好看。

还有 &,这是个新鲜东西。它是父级的引用,还是来看代码。

stylus这样写:

.list-item

.text-box

&:hover

background-color: powderblue

翻译成 CSS 是这样:

.list-item:hover,

.text-box:hover {

background-color: #b0e0e6;

}

相信代码中已经能很明确地体现出 & 父级引用的角色了。

同时不难看出,.list-item 和 .text-box 这两个同一级的选择器在 stylus 中是可以换行写的,只要保证缩进相同,它们就属于同一级的选择器。当然,沿用 CSS 的方式,将同一级的选择器用逗号分隔开在 stylus 中也是可以的。

前端学习笔记系列一:6 一种新的css预编译器stylus的更多相关文章

  1. 前端学习笔记系列一:5 在项目中引入阿里图标icon

    进入到阿里的图标库网站,里面有上百万种icon,https://www.iconfont.cn,需要注册一个帐号,然后进入到这个页面,在这里点击右下角的带加号的图标,创建一个新的项目,名称与你要使用图 ...

  2. (转)Python学习笔记系列——Python是一种纯粹的语言

    此文出自知乎灵剑,原文传送门:https://zhuanlan.zhihu.com/p/23926957. 在摸索适合自己的语言学习方法,看到一篇好文章,转之,侵删. Python的语法范式相当多.知 ...

  3. 前端学习笔记系列一:15vscode汉化、快速复制行、网页背景图有效设置、 dl~dt~dd标签使用

    ctrl+shift+p,调出configure display language,选择en或zh,若没有则选择安装使用其它语言,则直接呼出扩展程序搜索界面,选择,然后安装,重启即可. shift+a ...

  4. 前端学习笔记系列一:13new Date()的参数

    前两天发现手机页面的倒计时在Android上正常显示,在iPhone却不能显示. 后来又发现在ff和ie里也不显示.(以前只在chrome里看过,显示正常). 后来同事改了new Date()里字符串 ...

  5. 前端学习笔记系列一:12 js中获取时间new date()的用法

    获取时间: 1  var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.get ...

  6. 前端学习笔记系列一:9 js中数组的拷贝

    拷贝分为浅拷贝和深拷贝,在JavaScript中能够实现这两种拷贝的方式也是多种多样.以下是一维数组实现深拷贝和浅拷贝的各种方式. 一.浅拷贝 1.赋值 赋值是最直接的一种浅拷贝. let arr3 ...

  7. 前端学习笔记系列一:11@vue/cli3.x中实现跨域的问题

    由于浏览器的同源访问策略,vue开发时前端服务器通常与后端api服务器并非是相同的服务器,因此需要使用一个代理服务器实现跨域访问.在@vue/cli3.x根目录下创建一个vue.config.js文件 ...

  8. 前端学习笔记系列一:14 vue3.X中alias的配置

    第一步: 第二步: // vue.config.js module.exports = { configureWebpack: { resolve: { alias: { 'assets': '@/a ...

  9. 前端学习笔记系列一:10整体移动vscode代码块、VSCode 使用 stylus,配置格式化设置、在vue项目中引入bootstrap

    1.整体移动vscode代码块 凭借操作的经验我们能够轻松地知道将代码整体往右移只需选中代码按Tab键即可.其实往左移也很简单: 选中之后按下 shift+Tab键 即可. 2.VSCode 使用 s ...

随机推荐

  1. java操作nginx

    一,判断程序的部署环境是nginx还是windows /** * 判断操作系统是不是windows * * @return true:是win false:是Linux */ public stati ...

  2. nyoj 57

    6174问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替 ...

  3. php封装的mysqli类完整实例

    本文实例讲述了php封装的mysqli类.分享给大家供大家参考,具体如下:类: <?php header('content-type:text/html;charset=utf-8'); /* ...

  4. 深入JAVA注解-Annotation(学习过程)

    JAVA注解-Annotation学习 本文目的:项目开发过程中遇到自定义注解,想要弄清楚其原理,但是自己的基础知识不足以支撑自己去探索此问题,所以先记录问题,然后补充基础知识,然后解决其问题.记录此 ...

  5. Intellij IDEA 快捷键 与 环境设置

    快捷键 Ctrl+Shift+F10,运行 Ctrl+Alt+O,导入包,自动修正 Ctrl+Alt+L,格式化代码 Ctrl+Y,删除一整行 Alt + Insert,生成get/set方法 Ctr ...

  6. HTML5模板引擎 Thymeleaf 教程(转)

    原文:http://www.open-open.com/lib/view/open1383622135586.html Thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非 ...

  7. docker基础镜像ubuntu添加jdk1.8

    首先pull ubuntu18.04 docker pull ubuntu:18.04 下载jdk1.8 jdk-8u191-linux-x64.tar.gz 创建Dockerfile文件 编写文件如 ...

  8. 2月送书福利:ASP.NET Core开发实战

    大家都知道我有一个公众号“恰童鞋骚年”,在公众号2020年第一天发布的推文<2020年,请让我重新介绍我自己>中,我曾说到我会在2020年中每个月为所有关注“恰童鞋骚年”公众号的童鞋们送一 ...

  9. 「Luogu P5494 【模板】线段树分裂」

    (因为没有认证,所以这道题就由Froggy上传) 线段树分裂用到的地方确实并不多,luogu上以前也没有这道模板题,所以就出了一道,实在是想不出怎么出模板了,所以这道题可能可以用一些其他的算法水过去. ...

  10. 个人相关API - 行驶方向判断函数

    calculateDrivingDirection(newCoordinates,oldCoordinates){ let o = { direction: '', deviation:null, i ...