初识less

 

1 less 安装使用

安装

sudo npm install node-less

使用

mkdir less

cd /less

lessc demo1.less > test1.css

lessc -x demo1.less > test1.css (压缩)


2 为什么使用less

面向对象思想很重要的是继承和封装,我们也可以使用这种思想考虑css编写。

页面上的css从页面功能上来说,一般分为2类:结构性和装饰性的。

结构性:比如表格,列表,布局,定位。装饰性:比如字体,块内容,背景,边框,方框。

我们在根据设计图构建html结构时,考虑的css首先是结构性,比如布局,定位。我们一般会把整个页面分成几个部分,从设计角度来说就是模块。大模块的布局定位搞定之后,再到深入到模块里面。这个分层分块的思路其实就是封装的概念,每个模块看成一个黒盒子,先不管,把几个大的黑子拍整齐后,在深入大盒子里面。盒子里面也可以这么处理。

但是盒子和盒子之间可能有些相同部分,比如背景,比如字体,比如定位。如果把相同的部分拿出来,就有继承概念了。

使用模块化的方式构建htmlcss时,会使整个页面结构清晰,样式条理,方便后续的维护,但是有时候我们会遇到这样的情况:

(1) div1包含div2div3,div2宽度固定,div3宽度=div1宽度-div2的宽度。设计样式时,我们针对每个div设计了样式,我们需要手动计算div3的宽度。如果设计有变更div2的宽度变了,或者div1的宽度变了,于是我们不得不重新计算div3的宽度,于是我们的工作量来了。

(2)  div1包含div2div3div2div3的结构性样式不同,但是有部分修饰性样式相同,比如字体和背景相同,于是们设计了一个类font-Bg加在div2div3class上,可以这样的话,你不得不面对这样一种风险,当div2div3的字体和背景不同时,你要修改div2div3class,新增样式。为了减少这种修改,div2div3各自设计一个class,但是他们之间确实有相同的样式,所以这个css的设计比较纠结,要么维护困难,要么费事费力。

遇到类似以上这些问题,我们有没有好的办法解决呢?

3 怎么使用less

less可以较好的解决上面遇到问题。

less主要的特性:变量及运算,混入(mixin),嵌套。

针对上述中第一个问题,我们使用变量就可以解决。

@div1Width:500;
@div2Width:200px;

.div1cls
{
  width:@div1Width;
}

.div2cls
{
  width:@div2Width;
}

.div3cls
{
  width:(@div1Width)-(@div2Width);
}

如果有div1div2width有变动,只需要修改@div1Width@div2Width就可以了。

编译后:

.div1cls {
  width: 500;
}
.div2cls {
  width: 200px;
}
.div3cls {
  width: 300px;
}

针对第二个问题,可以使用混入的方法:

.font-bg
{
  font-size:12px;
  background-image:url('demo.png');
}

.div2cls
{
   float:left;
  .font-bg
   
}

.div3cls
{
   float:right;
  .font-bg
   
}

如果有变动只需要修改css文件,编译就可以,而不需要修改html文件。这个继承的意思。公共样式都可以抽出来,需要的话,直接混入就可以。和extjsapply类似。

编译后:

.font-bg {
  font-size: 12px;
  background-image: url('demo.png');
}
.div2cls {
  float: left;
  font-size: 12px;
  background-image: url('demo.png');
}
.div3cls {
  float: right;
  font-size: 12px;
  background-image: url('demo.png');
}

还有一种比较复杂的应用就是嵌套,考虑这样的场景:

div1包含div2div3div1背景图片是image1.png, div2背景变为白色,字体变成12pxdiv3背景为黄色,字体变成8px。当鼠标移动到div1上时,div1背景图片变成image2.png,div2背景变成红色,字体变成16pxdiv3背景变成绿色,字体变成8px

我们会这样设计:

.div1{
     background-image:url('image1.png'); 
}
.div1 .div2{
     font-size:12px; 
     background-color:white; 
}
.div1 .div3{
     font-size:8px;
     background-color:yellow; 
}

.div1hover{
     background-image:url('image2.png'); 
}
.div1hover .div2{
    font-size:16px;
    background-color:red;
}
.div1hover .div3{
   font-size:8px;
   background-color:green; 

}

这样看着是不是有点乱,是的,略显得不简洁。我们用less的方法改造一下:

.div1 
{
   background-image:url('image1.png'); 
   .div2{
     font-size:12px; 
     background-color:white; 
   }
   .div3{
     font-size:8px;
     background-color:yellow; 
   }
}

.div1hover{
   background-image:url('image2.png'); 
   .div2{
    font-size:16px;
    background-color:red;
  }
  .div3{
   font-size:8px;
   background-color:green; 
  }
}

这样是不是感觉很简洁,嵌套关系很清晰?

less还有其他很多用法,可以帮助你编写更易维护,更清晰的css。大家去探索吧。

posted @ 2014-04-02 18:42  daoyuly  阅读(278)  评论(0编辑  收藏  举报