一、内置方法

  返回各种颜色的比重(如red(color)等)

  颜色函数是CSS预处里器中内置的颜色函数功能,这些功能可以对颜色值进行处理,例如颜色的变亮、变暗、渐变颜色等处理十分的方便。

lighten(color, %); /* 返回的颜色在'color'基础上变亮10% */
darken(color, %); /* 返回的颜色在'color'基础上变暗10% */
saturate(color, %); /* 返回的颜色在'color'基础上饱和度增加10% */
desaturate(color, %); /* 返回的颜色在'color'基础上饱和度降低10% */

  keys(pairs)/values(pairs):返回给定pairs中的键/值

pairs = (one ) (two ) (three )
keys(pairs)
// => one two three
values(pairs)
// => 1 2 3

  typeof(node):字符串形式返回node类型

typeof()
// => 'unit'
typeof(#fff)
// => 'rgba'

  反正很多,不细说,用到的时候再查

二、其余参数(Rest Params)

1、其余参数:Stylus支持name...形式的其余参数(rest风格参数)。这些参数可以消化传递给混写或函数的参数们。这在处理浏览器私有属性,如-moz-webkit的时候很管用。下面这个例子中,所有的参数们(1px, 2px, ...)都被一个args参数给简单消化

box-shadow(args...)
-webkit-box-shadow args
-moz-box-shadow args
box-shadow args #login
box-shadow 1px 2px 5px #eee

2、参数们:arguments变量可以实现表达式的精确传递,包括逗号等等。这可以弥补args...参数的一些不足,见下面的例子:

box-shadow(args...)
-webkit-box-shadow args
-moz-box-shadow args
box-shadow args
#login
box-shadow #ddd 1px 1px, #eee 2px 2px
//结果并非称心如意:
#login {
-webkit-box-shadow: #ddd 1px 1px #eee 2px 2px;
-moz-box-shadow: #ddd 1px 1px #eee 2px 2px;
box-shadow: #ddd 1px 1px #eee 2px 2px;
}
//逗号给忽略了。我们现在使用arguments重新定义这个混合书写。
box-shadow()
-webkit-box-shadow arguments
-moz-box-shadow arguments
box-shadow arguments
body
box-shadow #ddd 1px 1px, #eee 2px 2px
//于是,一下子雨过天晴了:
body {
-webkit-box-shadow: #ddd 1px 1px, #eee 2px 2px;
-moz-box-shadow: #ddd 1px 1px, #eee 2px 2px;
box-shadow: #ddd 1px 1px, #eee 2px 2px;
}

三、注释

  单行和多行注释跟js一样

  多行缓冲注释:跟多行注释类似,不同之处在于开始的时候,这里是/*!,这个相当于告诉Stylus压缩的时候这段无视直接输出。

/*!
* 给定数值合体
*/
add(a, b)
a + b

四、条件

  if / else if / else,没什么好说的

  除非(unless):熟悉Ruby程序语言的用户应该都知道unless条件,其基本上与if相反,本质上是(!(expr))

  后缀条件:Stylus支持后缀条件,这就意味着ifunless可以当作操作符;当右边表达式为真的时候执行左边的操作对象

五、迭代(Iteration)

  Stylus允许你通过for/in对表达式进行迭代形式如下:for <val-name> [, <key-name>] in <expression>

body
fonts = Impact Arial sans-serif
for font, i in fonts
foo i font
//生成为:
body {
foo: Impact;
foo: Arial;
foo: sans-serif;
}

  函数(Functions):Stylus函数同样可以包含for循环。下面就是简单使用示例:

//求和:
sum(nums)
sum =
for n in nums
sum += n
sum( )// => 6 //连接:
join(delim, args)
buf = ''
for arg, index in args
if index
buf += delim + arg
else
buf += arg join(', ', foo bar baz)
// => "foo, bar, baz"

  后缀(Postfix):就跟if/unless可以利用后面语句一样,for也可以。

sum(nums)
sum =
sum += n for n in nums join(delim, args)
buf = ''
buf += i ? delim + arg : arg for arg, i in args

六、导入(@import)

  在CSS中,并不喜欢用@import来导入样式,因为这样的做法会增加HTTP的请求。但是在CSS预处理器中的导入(@import)规则和CSS的有所不同,它只是在语义上导入不同的文件,但最终结果是生成一个CSS文件。如果你是通过“@import 'file.css'”导入“file.css”样式文件,那效果跟普通CSS导入样式文件一样。

  注意:导入文件中定义了变量、混合等信息也将会被引入到主样式文件中,因此需要避免他们的相互冲突。

/* file.{type} */
body {
background: #EEE;
} @import "reset.css";
@import "file.{type}";
p {
background: #0982C1;
}
//转译后
@import "reset.css";
body {
background: #EEE;
}
p {
background: #0982C1;
}

1、导入:Stylus支持字面@import CSS,也支持其他Stylus样式的动态导入。

2、字面CSS:任何.css扩展的文件名将作为字面量。例如:

@import "reset.css"
//渲染如下:
@import "reset.css"

3、Stylus导入

  当使用@import没有.css扩展,会被认为是Stylus片段(如:@import "mixins/border-radius")。

  @import工作原理为:遍历目录队列,并检查任意目录中是否有该文件(类似node的require.paths)。该队列默认为单一路径,从filename选项的dirname衍生而来。 因此,如果你的文件名是/tmp/testing/stylus/main.styl,导入将显现为/tmp/testing/stylus/

  @import也支持索引形式。这意味着当你@import blueprint, 则会理解成blueprint.stylblueprint/index.styl。对于库而言,这很有用,既可以展示所有特征与功能,同时又能导入特征子集。

4、js导入api:

//下面语句:
@import 'mixins/vendor'
//等同于:
.import('mixins/vendor')

七、继承(@extend)

1、继承:Stylus的@extend指令受SASS实现的启发,基本一致,除了些轻微差异。此功能大大简化了继承其他语义规则集的语义规则集的维护。

2、混合书写下的“继承”:尽管你可以使用混写实现类似效果,但会导致重复的CSS。 典型的模式是定义如下的几个类名,然后归结到一个元素中,例如"warning message",该技术实现是没什么问题,但是维护就比较麻烦了。为了应对这个问题,CSS预处理器可以从一个选择继承另一个选择器下的所有样式。

message,
.warning {
padding: 10px;
border: 1px solid #eee;
}
.warning {
color: #E2E21E;
}

3、使用__@extend__:使用__@extend__得到同样的输出,只要把对应的选择器传给@extend即可。然后.warning选择器就会继承已经存在的.message规则。

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

color: #E2E21E;
}

  这儿是个更复杂的例子,演示了__@extend__如何级联。

red = #E33E1E
yellow = #E2E21E .message
padding: 10px
font: 14px Helvetica
border: 1px solid #eee
.warning
@extends .message
border-color: yellow
background: yellow + %
.error
@extends .message
border-color: red
background: red + %
.fatal
@extends .error
font-weight: bold
color: red

4、Stylus与SASS不同之处在于SASS不允许__@extend__嵌套选择器。

form
button
padding: 10px a.button
@extend form button
Syntax error: Can't extend form button: can't extend nested selectors
// 解析错误: 无法继承自 button: 不能继承嵌套选择器
on line of standard input
Use --trace for backtrace.

  Stylus中,只要选择器匹配,就可以生效:

form
input[type=text]
padding: 5px
border: 1px solid #eee
color: #ddd
textarea
@extends form input[type
=text]
padding: 10px
//解析
form input[type=text],
form textarea {
padding: 5px;
border: 1px solid #eee;
color: #ddd;
}
textarea {
padding: 10px;
}

stylus使用文档总结:内置方法+参数+条件+迭代+导入+继承的更多相关文章

  1. JavaScript基础:BOM的常见内置方法和内置对象

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. BOM的介绍 JavaScript的组成 JavaScript基础分为三 ...

  2. python-day4装饰器、生成器、迭代器、内置方法、序列化、软件目录

    @生成器generator a=(i*2 for i in range(10)) a.__next__()#等同于next(a),基本都不用,多用for循环a.send(m)#将m传为yield的值 ...

  3. Python之路(第二十六篇) 面向对象进阶:内置方法

    一.__getattribute__ object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__g ...

  4. NO.4:自学python之路------内置方法、装饰器、迭代器

    引言 是时候开始新的Python学习了,最近要考英语,可能不会周更,但是尽量吧. 正文 内置方法 Python提供给了使用者很多内置方法,可以便于编程使用.这里就来挑选其中大部分的内置方法进行解释其用 ...

  5. python基础之反射内置方法元类

    补充内置函数 isinstance(obj,Foo)   # 判断obj是不是foo的实例 issubclass()      # 判断一个类是不是另一个类的子类 反射 什么是反射? 通过字符串来操作 ...

  6. python第四周:装饰器、迭代器、内置方法、数据序列化

    1.装饰器 定义:本质是一个函数,(装饰其他函数)就是为其他函数添加附加功能 原则:不能修改被装饰函数的源代码,不能修改被装饰函数的调用方式 实现装饰器的知识储备: 函数即“变量”.每当定义一个函数时 ...

  7. 浏览器(BOM)对象的一些内置方法总结

    浏览器(BOM)对象的一些内置方法总结 一.总结 1.bom就是浏览器那端执行的代码,dom就是服务器那端操作html的代码 2.记好bom的几个对象,那就很好理解很多代码了,也很好写很多代码了 二. ...

  8. 4月17日 python学习总结 反射、object内置方法、元类

    一.反射 下述四个函数是专门用来操作类与对象属性的,如何操作? 通过字符串来操作类与对象的属性,这种操作称为反射 class People: country="China" def ...

  9. 产品需求文档(PRD)的写作方法之笔记一

    1.写前准备(思维导图): http://www.woshipm.com/?p=80070 1.在写之前,请先很区分清楚什么是MRD文档(市场需求文档),BRD文档(商业需求文档),什么是PRD文档( ...

随机推荐

  1. 自定制Form组件

    代码 import re import copy class ValidateError(Exception): def __init__(self,detail): self.detail = de ...

  2. 关于Sphinx中使用 RealTime Index的问题

    我们有了完整索引和增量索引,为什么还需要研究实时索引? 1.完整索引每个晚上空闲时执行一次,时间较长,但问题不大,因为IO慢,CPU累,但那个时间段基本没有人使用平台,比如凌晨2点. 2.增量索引:目 ...

  3. AC日记——文化之旅 洛谷 P1078

    文化之旅 思路: 暴搜,倒搜: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 105 #define max ...

  4. 360杀毒导致的 VS 报扩展错误,请查看 ActiveLog.xml

    360杀毒将 TypeScript的 tsserver.js 列为木马,结果导致VS2017启动时,总是报错,将其加为信任即可解决.

  5. 使用php后台给自己做一个页面路由,配合ajax实现局部刷新。

    今天就要放假了,把近来囤积的小玩意儿总结整理一下. 在请求一个html页面来嵌入到当前页会有一个问题,就是跟随请求过来的html他的样式表和脚本会失效.是因为文档加载的先后顺序等问题造成的.因此,加载 ...

  6. CentOS7单机部署lamp环境和apache虚拟主机

    (1)apache介绍 apache : httpd.apache.org 软件包:httpd 端口服务:80/tcp(http) 443/tcp(https,http+ssl) 配置文件: /etc ...

  7. oracle 11g安装教程

    oracle 11g安装教程 第1步 第2步 第3步 第4步 第5步 第6步 第7步 第8步 第9步 第10步 第11步 第12步 第13步 第14步 第15步 第16步 第17步 第18步 第19步 ...

  8. 对TDD原则的理解

    1,在编写好失败的单元测试之前,不要编写任何产品代码    如果不先写测试,那么各个函数就会耦合在一起,最后变得无法测试    如果后写测试,你也许能对大块大块的代码进行测试,但是无法对每个函数进行测 ...

  9. 经典算法-最长公共子序列(LCS)与最长公共子串(DP)

    public static int lcs(String str1, String str2) { int len1 = str1.length(); int len2 = str2.length() ...

  10. [POJ1980]Unit Fraction Partition(搜索)

    Unit Fraction Partition Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4571   Accepted ...