less
less是一种动态的样式表语言,less扩展了css,使得我们可以像写程序一样,写css,提高css的扩展性、重用性,可以运行在客户端,也可以运行在服务端nodejs。
less提供了变量定义,mixins,函数等等常见的程序元素。
mixins是一种组合的方式,提高重用,极大提高css编写效率。
sass
less的使用
首先我们写一段less,保存为style.less文件。
@base: #f938ab;
body{
color: @base;
}
代码很简单,就是定义一个变量@base,然后在body的color中使用这个变量。
<link type="text/css" rel="stylesheet/less" href="style.less" />
<script type="text/javascript" src="less.min.js" ></script>
在浏览器中查看这个页面,就会发现,效果出来了,和我们写css是一个效果。
也就是在客户端用js将less文件动态解释为css。如果对性能有较高要求,就用node或者是一些第三方工具先将less编译为css,然后引用编译好的css就可以了,这样就不用下载less.js文件,也不用在客户端动态解释了。
$ npm install -g less
$ lessc styles.less
$ lessc styles.less > styles.css
#-x,压缩文件
$ lessc -x styles.less > styles.css
变量variables
从前面这个简单的变量就可以看出来less的好处了,一个颜色的值被重用。在原来,我们要使用一个颜色,会在多个地方写这个颜色的值,需要改,就批量的替换,需要替换一部分,噩梦就来了。
现在好多了,定义一个变量,然后在需要的地方引用这个变量,部分替换,就定义两个变量。这不就重用了吗!
组合Mixins
mixins就是一种组合的方式,有点像写个工具类,静态方法,对于字符串进行某种处理,比如格式化函数,格式化日期之类的。
我们经常在css中对边框进行设置solid 1px这类设置,然后把这些信息写到很多地方,div,table,总之不少。
利用mixins的方式,我们只定义一个class,然后在其他class中引用它。
其实也有点像组件编程,把大组件差分成小组件,然后在需要的地方组合起来,给后期的维护也带来好处。
.border{
border-top: dotted 1px black;
border-bottom: solid 2px black;
table{
.border;
}
.container{
.border;
上面的less产生的css是下面的样子。
.border {
border-bottom: 2px solid black;
border-top: 1px dotted black;
table {
.container {
很不错吧。
嵌套Nested Rules
我们的html可能是div里面有div,然后有ul,ul里面有a,a里面有span,如果我们对这几个分别设置样式,就会在css中写div一个,div ul一个,div ul a一个,div ul span一个。
在css中,空格代表下一级别。
这样写又繁琐,又不直观。
less的写法很奇特,样子很直观,一眼看上去就知道怎么回事了,很有层次感。
//less
#header {
h1 {
font-size: 26px;
font-weight: bold;
}
p { font-size: 12px;
a { text-decoration: none;
&:hover { border-width: 1px }
}
生成的css,也就是我们普通的写法就是下面的样子。
#header h1 {
font-size: 26px;
font-weight: bold;
#header p {
font-size: 12px;
#header p a {
text-decoration: none;
#header p a:hover {
border-width: 1px;
函数Functions & Operations
我们先看一段less代码,然后在说说这个用法的场景。
@the-border: 1px;
@base-color: #111;
@red: #842210;
color: (@base-color * 3);
border-left: @the-border;
border-right: (@the-border * 2);
#footer {
color: (@base-color + #003300);
border-color: desaturate(@red, 10%);
下面是生成的css内容。
color: #333;
border-left: 1px;
border-right: 2px;
color: #114411;
border-color: #7d2717;
我觉得上面的这种用法的场景就是,我们先定义一些基线,然后其他的是相对于基线进行调整。可以有一种渐进的感觉,相对的概念。
本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/1037632,如需转载请自行联系原作者