前言

传统CSS的缺陷

css的可重用性差、代码冗余量大、不支持语言特性如变量循环及方法等(虽然css也在慢慢支持,比如现在的css变量等,但明显这些远远不够)。

三大预处理

于是预处理器出现了:

  • 2007年,第一款预处理器Sass诞生。Sass是迄今为止最成熟的预处理器,拥有ruby社区的支持和compass这一最强大的css框架,目前受LeSS影响,已经进化到了全面兼容CSS的SCSS。
  • 2009年,受Sass的影响,Less出现了。与Sass相比,他更简单但可编程性不足。
  • 2010年,Stylus自Node.js社区诞生,主要用于Node项目的预处理支持。因为诞生自Node社区,Stylus看起来更加的“编程化”,他支持变量运算、方法、剩余参数、迭代、条件判断、继承、混入等JS特性,看起来很“JavaScript”。

预处理器趋势对比

npm近五年的下载趋势:

GitHub近五年的活跃状态:

虽然Sass是最早诞生的预处理器,但是最受欢迎的处理器确实Less;同时关注度和社区活跃度最好的也是Less,其次是Stylus,Sass最末。

我们的选择

其实之前已经透露过,我们预处理器选择使用和我们团队同样年轻的Stylus,其原因如下:

  • 功能强大,语法非常“JavaScript”。
  • 语法精简灵活
  • 只需要依赖NodeJS
  • 方便易用
  • 高效

如果你习惯了pug的语法,Stylus使用起来会感觉极度舒适。Stylus的语法和pug一样:基于缩进、省去重复的符号({};:),这让代码看起来很简洁(他俩绝对是抄了Python的作业)

Stylus教程

思来想去,还是决定不做无意义的搬砖了,关于教程这一块张旭鑫大佬已经写得很好的(毕竟是css领域的大佬),相关教程可以参考:

Stylus中文版参考文档

Stylus官网

风格约束

核心思想是,能少按一个键就少按,一个键,毕竟:

所以,代码风格应该是:

  • 不写任何无意义的符号(简洁性)
  • 层级基于嵌套(层次感)
  • 冗余代码抽离成模块或者写成混入(Mixins)
  • 极其相似又有规律可循的代码写成循环或者混入

一个小而不全的例子,例如我页面中有这样的结构:

<template lang="pug">
div(:class="$style.inner")
div(:class="$style.box")
</template>

那么我的样式应该这么写:

<style lang="stylus" rel="stylesheet/stylus" module>
.inner
position relative
color=#41b883
.box
position absolute
left 50%
top 50%
width 200px
height @width
margin-left -(@width/2)
margin-top -(@height/2)
background color
ear(direction=left)
breadth=40px
position absolute
content ''
width breadth
height breadth
{direction} 25%
transform-origin center
transform translate(direction is left?-50%:50%,-50%) rotate(-45deg)
background @background
&::after
ear()
&::before
ear(right)
</style>

Vue项目中使用

创建项目

在Vue项目中使用其实非常简单,直接Vue-ui一把梭

使用Vueui最大的好处是,我们只需要点点鼠标输入必要的内容,VueCli会自动帮我们完成:

完成上面操作创建项目之后,就可以在项目中使用Stylus了;当然,你的标签也要改成下面格式:

<style lang="stylus" rel="stylesheet/stylus" module>

</style>

修改文件模板以获取新建文件支持

以webstrom为例,setting>Editor>File and Code Templates,选中Vue Single File Component,将

<style>

</style>

改为:

<style  lang="stylus" rel="stylesheet/stylus" module>

</style>

此时,创建的Vue组件中默认使用Stylus。

老项目中使用

老项目中使用Stylus只需要下载stylusstylus-loader即可,使用下面的命令安装

yarn add stylus stylus-loader
npm i stylus stylus-loader

然后修改<style>标签

小程序中使用

因为微信小程序一个页面或组件对应wxss、wxml、js三个文件(有时候觉得挺蛋疼的),所以如果想要在小程序项目中使用Stylus,则必须将Stylus文件编译成wxss文件(TypeScript支持也是这么做的)。

解决方法其实也很多,如:webpack、glup等等。但是我们不需要这么麻烦,webstrom已帮你搞定,这也是我推崇webstrom的原因之一。

只需要在webstrom中稍微置一下即可:

当然,前提是你需要全局下载Stylus:

npm install stylus -g

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

工作记录:Stylus基础教程及应用的更多相关文章

  1. stylus基础教程,stylus实例教程,stylus语法总结

    stylus特点富于表现力.具有健壮性.功能丰富.动态编码不需要写CSS的冒号.分号.大括号和LESS.SASS功能类似,会这些的入手很快stylus特点安装使用stylus语法(一)选择器(二)变量 ...

  2. MongoDB基础教程系列--未完待续

    最近对 MongoDB 产生兴趣,在网上找的大部分都是 2.X 版本,由于 2.X 与 3.X 差别还是很大的,所以自己参考官网,写了本系列.MongoDB 的知识还是很多的,本系列会持续更新,本文作 ...

  3. MongoDB基础教程系列--目录结构

    最近对 MongoDB 产生兴趣,在网上找的大部分都是 2.X 版本,由于 2.X 与 3.X 差别还是很大的,所以自己参考官网,写了本系列.MongoDB 的知识还是很多的,本系列会持续更新,本文作 ...

  4. SpringCloud基础教程学习记录

    这个学习记录是学习自翟永超前辈的SpringCloud的基础教程. 自己写这个教程的目的主要是在于,想要更凝练总结一些其中的一些实用点,顺便做个汇总,这样自己在复习查看的时候更加方便,也能顺着自己的思 ...

  5. 【python基础教程】-10.开箱即用(模块的工作原理,获悉模块的功能以及常用模块)

    资料来源 (1) Python基础教程第三版 1.模块的工作原理 1.1 简单的模块及使用 1.1.1 模块的本质 (1) 模块就是程序,任何python程序都可以作为模块导入; 1.1.2 简单的模 ...

  6. 书籍记录——C++大学基础教程(第五版)

    C++大学基础教程(第五版) Small C++ How to Program,Fifth Edition,H.M.Deitel,P.J.Deitel 第一章 计算机.互联网和万维网简介 第二章 C+ ...

  7. (转)Windows驱动编程基础教程

    版权声明     本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括 ...

  8. 《objective-c基础教程》学习笔记 (一)—— 开发环境配置和简单类型输出

    懒惰是富有最大的敌人,再不前进,我们就out了.最近工作比较轻松,不是很忙.于是想晚上下班回家学习点新东西.看着苹果大军的一天天壮大,心里也是痒痒的.于是就想先系统的学习下Objective-C,为之 ...

  9. RabbitMQ基础教程之基本使用篇

    RabbitMQ基础教程之基本使用篇 最近因为工作原因使用到RabbitMQ,之前也接触过其他的mq消息中间件,从实际使用感觉来看,却不太一样,正好趁着周末,可以好好看一下RabbitMQ的相关知识点 ...

  10. RabbitMq基础教程之基本概念

    RabbitMq基础教程之基本概念 RabbitMQ是一个消息队列,和Kafka以及阿里的ActiveMQ从属性来讲,干的都是一回事.消息队列的主要目的实现消息的生产者和消费者之间的解耦,支持多应用之 ...

随机推荐

  1. NC18987 粉嘤花之恋

    题目链接 题目 题目描述 qn是个特别可爱的小哥哥,qy是个特别好的小姐姐,他们两个是一对好朋友 [ cp (划掉~) 又是一年嘤花烂漫时,小qn于是就邀请了qy去嘤花盛开的地方去玩.当qy和qn来到 ...

  2. NC16611 [NOIP2009]最优贸易

    题目链接 题目 题目描述 C国有n个大城市和m条道路,每条道路连接这n个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这m条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向 ...

  3. STC12C5A56S2和DS12C887做的电子闹铃

    配件信息 控制器: STC12C5A56S2 定时芯片: DS12C887 显示: 4位0.56寸数码管 其它: 无源蜂鸣器, 三极管S9012, 电阻10K*2, 100*1, 电容30p*2, 1 ...

  4. 【Unity3D】固定管线着色器二

    1 前言 ​ 固定管线着色器一 中介绍了 Shader 中外部属性.光照.贴图等基础用法,本文将进一步讲解固定管线着色器,介绍正面与反面剔除.Alpha 测试.深度测试.混合.渲染队列等用法.渲染管线 ...

  5. 【framework】ConfigurationContainer简介

    1 前言 ​ 如图所示,ConfigurationContainer 是 AMS 家族的重要基类:WindowContainer 继承自 ConfigurationContainer,是 WMS 家族 ...

  6. Swoole从入门到入土(11)——HTTP服务器[Request]

    http服务器的本质是应答式的服务器.我们只需关注onRequest事件中的request(请求)和response(响应)对象.让我们一起回顾一下onRequest事件: $http->on( ...

  7. Spring和Spring Boot的区别

    spring Spring 是一个开源轻量级框架,它允许 Java EE 7 开发人员构建简单.可靠和可扩展的企业应用程序.该框架主要侧重于提供各种方法来帮助您管理业务对象.与 Java 数据库连接 ...

  8. 4.1k Star!全面的C#/.NET/.NET Core学习、工作、面试指南

    C#/.NET/.NET Core 学习.工作.面试指南 让现在的自己不再迷茫 . GitHub 开源地址:https://github.com/YSGStudyHards/DotNetGuide D ...

  9. sentry-native 在 windows 平台上搭建

    官方文档:https://github.com/getsentry/sentry-native 虽说官方文档有搭建步骤,奈何我用 git bash 试了 n 遍,最终都会报一大堆错误,白白浪费了我快一 ...

  10. 文心一言 VS 讯飞星火 VS chatgpt (202)-- 算法导论15.3 1题

    一.对于矩阵链乘法问题,下面两种确定最优代价的方法哪种更高效?第一种方法是穷举所有可能的括号化方案,对每种方案计算乘法运算次数,第二种方法是运行RECURSIVE-MATRIX-CHAIN.证明你的结 ...