CSS预处理框架——Stylus


Posted in HTML / CSS onApril 21, 2021

Stylus是一个CSS预处理框架,后缀为.styl 。

一、特征

冒号可选、分号可选、逗号可选、括号可选、变量、插值、混合书写、算术、强制类型转换、动态导入、条件、迭代、嵌套选择、父级参考、变量函数调用、词法作用域、内置函数、内部语言函数、压缩可选、图像内敛可选、可执行Stylus、健壮的错误报告、单行和多行注释、CSS字面量、字符转义、TextMate捆绑、…

二、选择器(Selectors)

1、缩排 ?

基于缩进,使用缩排和凹排代替花括号

body
	color white
2、规则集

与CSS一样,允许使用逗号为多个选择器同时定义属性

textarea,input
	border 1px solid #eee

长得像属性的选择器,尾部加个逗号

foo bar baz,
form input,
>a
	border 1px solid #ccc
3、父级引用

字符&指向父选择器

textarea,input
	color #ccc
	&:hover
		color #aaa    (两个选择器同时改变)
4、消除歧义

类似padding-n 的表达式可能被解释为减法运算,也可能解释为一元负号属性。为避免歧义,用括号包裹表达式:

pad(n)
	padding (-n)
body
	pad(5px)

三、变量(Variables)

1、变量 ?

可以指定表达式为变量,然后在样式中贯穿使用

font-size=14px
body
	font font-size Arial
2、标识符(变量名,函数等)

标识符(变量名,函数等),也可能包括$字符

$font-size=14px
3、属性查找

独特功能-不需要分配值给便来给你就可以定义引用属性,如:

$logo
	position:absolute
	top:50%
	left:50%
	width: w=150px
	height: h=80px
	margin-top: -(@height/2)
	margin-left: -(@weight/2)

属性“向上冒泡”,查找堆栈直到被发现,或者返回null(如果属性未找到)

四、插值(Interpolation)

1、插值 ✏️

支持通过使用{}字符包围表达式来插入值,其会变成标识符的一部分,
  例如-webkit-{'border'+'-radius'}等同于-webkit-border-radius
  如 私有前缀属性扩展:

vendor(prop,args)
	-webkit-{prop} args
	-moz-{prop} args
	{prop} args
2、选择器插值

插值也可以在选择器上起作用:

table
	for row in 1 2 3 4 5
		tr:nth-child(row)
			height:10px * row

五、运算符(Operators)

1、运算符优先级:从高到低 ?
[]
! 	~	 +	 - 
is defined
** 	*	 /	 %
+ 	- 
... 	..
<=   		>= 	  	<>
in
==	is 	!=	is 	not	isnt
is	a
&&	and	||	or
?	:
=	:=	?=	+=	-=	*=	/=	%=
not
if	unless
2、一元运算符
!0					true
!!0					false
!1					false
!!5px				true
-5px				-5px
--5px				5px
not true			false
not not true		true

逻辑运算符not的优先级较低

not a or b		=>		not(a or b)
3、二元运算符

下标运算符 [] 允许通过索引获取表达式内部值。括号表达式可以充当元组(如(15px,15px))
范围:… …
  提供包含界线操作符(…)和范围操作符(…)

1..5				=>		1 2 3 4 5
1...5				=>		1 2  3 4
4、加减法

二元加减法运算其单位会转化,或使用默认字面量值

5、乘除:/ * %

使用 / 时候,必须使用()括号包住。

6、指数:**
2**8			=》			256
7、相等与关系运算:== != >= <= ><

相等运算可以被用来等同单位/颜色/字符串甚至标识符。

8、真与假:

近乎一切都是true。

false:	0	null	false
9、逻辑操作符:&& || or
10、存在操作符:in

检查左边内容是否在右边的表达式中;

11、条件赋值:?= :=

?= (?:),无需破坏值(如果存在)定义变量。

12、实例检查: is a
类型检查 =>	type(#fff)=="rgba"
13、变量定义:is defined

用来检查变量是否已经分配了值

14、三元:

三个操作对象的操作符(条件表达式/真表达式以及假表达式)

15、铸造:

作为替代简洁的内置unit()函数,语法(expr)unit可用来强制后缀;

16、颜色操作:
#0e0 + #0e0		=>		#0f0
17、通过增加或减少百分值调整颜色亮度。
#888 + 50%
18、通过增加或减少色度调整色调。
#f00+50deg
19、格式化字符串:

% 可以用来生成字面量值,通过传参给内置 s() 方法

六、混合书写(Mixins)

1、混入 ?

作为状态调用,而非表达式
  当border-radius() 选择器中调用时候,属性会被扩展并复制在选择器中;

2、父级引用

可以利用父级引用字符 &

stripe(even = #fff, odd = #eee)
 tr
   background-color odd
   &.even
   &:nth-child(even)
       background-color even

七、方法(Functions)

1、函数

内置语言函数定义,其定义与mixins混入一致,却可以返回值

add(a,b)
a + b		=>
body
padding add(10px,5)
2、默认参数
add(a, b = a)
  a + b

add(10, 5)
// => 15

add(10)
// => 20
3、函数体
add(a, b = a)
  a = unit(a, px)
  b = unit(b, px)
  a + b

add(15%, 10deg)
// => 25
4、多个返回值
swap(a, b)
  (b a)

swap(a, b)
  return b a
5、条件
compare(a, b)
  if a > b
    higher
  else if a < b
    lower
  else
    equal
6、别名
plus = add

plus(1, 2)
// => 3
7、变量函数
invoke(a, b, fn)
  fn(a, b)

add(a, b)
  a + b

body
  padding invoke(5, 10, add)
  padding invoke(5, 10, sub)
8、参数
sum()
  n = 0
  for num in arguments
    n = n + num

sum(1,2,3,4,5)
// => 15
9、哈希示例
get(hash, key)
  return pair[1] if pair[0] == key for pair in hash

八、关键字参数(Keyword Arguments)

可以放置关键字参数。其余不键入参数将适用于尚未得到满足的参数

body {
  color: rgba(255, 200, 100, 0.5);
  color: rgba(red: 255, green: 200, blue: 100, alpha: 0.5);
  color: rgba(alpha: 0.5, blue: 100, red: 255, 200);
  color: rgba(alpha: 0.5, blue: 100, 255, 200);
}

九、内置方法(Built-in Functions)

1、red(color)

返回color中的红色比重

2、alpha(color)

返回color中的透明度比重

3、dark(color)

检查color是否为暗色

4、hue(color)

返回给定color的色调

5、更多内置参数(不做罗列,请参考文档)

内置参数参考地址:https://www.zhangxinxu.com/jq/stylus/bifs.php

十、注释(Comment)

1、单行注释://

不输出

2、多行注释:/* */

只有在compress选项未启用的时候才会被输出

3、多行缓冲注释:/*! */

压缩的时候这段无视直接输出

十一、条件(Conditionals)

1、条件

条件提供了语言的流控制,提供的条件有导入/混入/函数以及更多

2、if / else if / else
overload-padding = true

if overload-padding
  padding(y, x)
    margin y x

body
  padding 5px 10px
3、除非(unless)

与if相反

4、后缀条件

挡右边表达式为真的时候执行左边的对象

十二、迭代(iteration)

可以通过for/in 对表达式进行迭代

十三、导入(@import)

1、字面量CSS

任何.css扩展的文件名将作为字面量

@import “reset.css”
2、Stylus导入

当使用@import没有.css扩展,会被认为是Stylus片段

3、Javascript导入API

当使用.import(path)方法,这些导入是被推迟的,直到赋值。

十四、媒体(@media)

需要使用Stylus的块状符号

十五、自定义字体(@font-face)

需要添加块状属性

十六、关键帧(@keyframes)

@keyframes pulse
0%
  background-color red
  opacity 1.0
  -webkit-transform scale(1.0) rotate(0deg)
33%
  background-color blue
  opacity 0.75
  -webkit-transform scale(1.1) rotate(-5deg)
67%
  background-color green
  opacity 0.5
  -webkit-transform scale(1.1) rotate(5deg)
100%
  background-color red
  opacity 1.0
  -webkit-transform scale(1.0) rotate(0deg)

十七、继承(@extend)

.message {
  padding: 10px;
  border: 1px solid #eee;
}

.warning {
  @extend .message;
  color: #E2E21E;
}

十八、函数url()

Stylus捆绑了一个可选函数,名叫url(),其替代了字面上的url()调用(且使用base64 Data URLs有条件的内联)

1、limit

大小默认限制30kb

2、paths

大小默认限制30kb

十九、时不时的小惊喜,这样才有动力

 

注:

主要用于整理笔记以及测试markdown字体、颜色、符号表情等,整篇并无插入图片。

HTML / CSS 相关文章推荐
CSS3 三维变形实现立体方块特效源码
Dec 15 HTML / CSS
Web页面中八种创建多列等高(等高列布局)的实现技术
Dec 24 HTML / CSS
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
Dec 30 HTML / CSS
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
Apr 24 HTML / CSS
HTML5 Canvas绘制文本及图片的基础教程
Mar 14 HTML / CSS
前端canvas动画如何转成mp4视频的方法
Jun 17 HTML / CSS
开发人员所需要知道的HTML5性能分析面面观
Jul 05 HTML / CSS
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
Jan 30 HTML / CSS
HTML5单页面手势滑屏切换原理分析
Jul 10 HTML / CSS
HTML5 Canvas实现360度全景图的示例代码
Jan 29 HTML / CSS
html5 figure和figcaption的使用方法
Sep 10 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
Sep 23 HTML / CSS
基于CSS3画一个iPhone
CSS3 实现NES游戏机的示例代码
css实现文章分割线样式的多种方法总结
Apr 21 #HTML / CSS
html5移动端禁止长按图片保存的实现
Apr 20 #HTML / CSS
CSS3鼠标悬浮过渡缩放效果
纯CSS实现hover图片pop-out弹出效果的实例代码
CSS3实现的文字弹出特效
Apr 16 #HTML / CSS
You might like
php实现html标签闭合检测与修复方法
2015/07/09 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
限制文本框输入N个字符的js代码
2010/05/13 Javascript
读jQuery之五(取DOM元素)
2011/06/20 Javascript
两种常用的javascript数组去重方法思路及代码
2013/03/26 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
2016/06/13 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
Django实现文件上传下载
2019/10/06 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
Python更换pip源方法过程解析
2020/05/19 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
The Kooples美国官方网站:为情侣提供的法国当代时尚品牌
2019/01/03 全球购物
教师个人自我评价范文
2014/04/13 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android
asyncio异步编程之Task对象详解
2022/03/13 Python
Python中的 enumerate和zip详情
2022/05/30 Python