Less

Less

  • 同类型:Sass 、styuls

一款比较流行的预处理CSS,支持变量、混合、函数、嵌套、循环等特点
官网
中文网
http://www.w3cplus.com/css/less

概要

为什么要有预处理CSS

CSS基本上是设计师的工具,不是程序员的工具。在程序员的眼里,CSS是很头痛的事情,它并不像其它程序语言,比如说PHP、Javascript等等,有自己的变量、常量、条件语句以及一些编程语法,只是一行行单纯的属性描述,写起来相当的费事,而且代码难易组织和维护。

很自然的,有人就开始在想,能不能给CSS像其他程序语言一样,加入一些编程元素,让CSS能像其他程序语言一样可以做一些预定的处理。这样一来,就有了“CSS预处器(CSS Preprocessor)”。

什么是预处理CSS

  • CSS语言的超集,比CSS更丰满

CSS预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为CSS增加了一些编程的特性,将CSS作为目标生成文件,然后开发者就只要使用这种语言进行编码工作。通俗的说,CSS预处理器用一种专门的编程语言,进行Web页面样式设计,然后再编译成正常的CSS文件,以供项目使用。CSS预处理器为CSS增加一些编程的特性,无需考虑浏览器的兼容性问题,例如你可以在CSS中使用变量、简单的逻辑程序、函数等等在编程语言中的一些基本特性,可以让你的CSS更加简洁、适应性更强、可读性更佳,更易于代码的维护等诸多好处。

CSS预处理器技术已经非常的成熟,而且也涌现出了很多种不同的CSS预处理器语言,比如说:Sass(SCSS)、LESS、Stylus、Turbine、Swithch CSS、CSS Cacheer、DT CSS等。如此之多的CSS预处理器,那么“我应该选择哪种CSS预处理器?”也相应成了最近网上的一大热门话题,在Linkedin、Twitter、CSS-Trick、知呼以及各大技术论坛上,很多人为此争论不休。相比过计我们对是否应该使用CSS预处理器的话题而言,这已经是很大的进步了。

到目前为止,在众多优秀的CSS预处理器语言中就属Sass、LESS和Stylus最优秀,讨论的也多,对比的也多。本文将分别从他们产生的背景、安装、使用语法、异同等几个对比之处向你介绍这三款CSS预处理器语言。相信前端开发工程师会做出自己的选择——我要选择哪款CSS预处理器。

如何使用预处理Less

less.js

网页运行阶段解析LESS文件

使用方式:

less compiler

开发阶段编译LESS文件成为CSS

使用方式:

  • cd less文件所在的目录
  • lessc xxx.less生成的css在控制台输出
  • lessc xxx.less > xxx.css生成的css放入xxx.css
安装
  • 安装Node.js
  • 安装less
    • 命令行执行:npm install -g less
编译操作

语法

注释

// 模板注释,这里的注释转换成CSS后将会删除
/* CSS 注释语法 转换为CSS后任然保留 */

定义变量

将需要重复使用或经常修改的值定义为变量,需要使用的地方引用

  • less

    @变量名: 变量值;
    @bgColor: #f5f5f5;
    
    body{
      width: @变量名;
      background-color: @bgColor;
    }
    
  • css

    body{
      width: 变量值;
      background-color: #f5f5f5;
    }
    

嵌套

如果你在CSS中经常使用子代选择器,那LESS的嵌套语法使用起来非常Happy

  • less

/*

:直接子代
&:当级元素
*/
.container {
width: @containerWidth;
.row {
height: 100%;
a{
color: #f40;
&:hover{
color: #f50;
}
}
}
div {
width: 100px;
.hello {
background-color: #00f;
}
}
}


- css

```css
.container {
  width: 1024px;
}
.container > .row {
  height: 100%;
}
.container > .row a {
  color: #f40;
}
.container > .row a:hover {
  color: #f50;
}
.container div {
  width: 100px;
}
.container div .hello {
  background-color: #00f;
}

Mixin

/* 定义一个类 */
.roundedCorners(@radius: 5px) {
  -moz-border-radius: @radius;
  -webkit-border-radius: @radius;
  border-radius: @radius;
}
/* 定义的类应用到另个一个类中 */
#header {
  .roundedCorners;
}
#footer {
  .roundedCorners(10px);
}

Import

我们可以在开发阶段将样式放到多个文件中,最后通过@import 的方式合并

  • less

    // main.less
    @btnColor: red;
    @import url('_buttom.less');
    
    body{
      width: 1024px;
    }
    
    // _buttom.less
    .btn{
      color: @btnColor;
    }
    
  • css

    .btn{
      color: red;
    }
    body{
      width: 1024px;
    }
    

函数

内置函数
  • lighten:将一个颜色变亮
    • lighten(#000, 10%); // #1a1a1a
  • darken:将一个颜色变暗
    • darken(#000, 10%); // #e6e6e6
自定义函数等讲流行框架再说

安装NodeJS

  • 安装node-v5.2.0-x64.msi,我的安装目录:D:\Program Files\nodejs
  • 配置环境变量
  • cd D:\Program Files\nodejs
  • 安装less:npm install -d less
  • 配置环境变量。我的路径如下:D:\Program Files\nodejs\node_modules\.bin

测试源码:

css/_part.less

/*在被导入的less文件中可以使用导入的less中的变量*/
p{
  line-height: @h;
}

css/main.less

//定义变量
@bgColor:#e23922;
@mainColor:#f0f0f0;
@width:100px;

/*
  >直接子代
  &当级元素
*/
body{
  background-color: @bgColor;
}
.container{
  width: 1000px;
  background-color: #ff0;
  .row{
    height: @width;
    div{
      border-left: 1px solid @mainColor;
      >a{
        color: red;
        &:hover{
          color: green;
        }
      }
    }
  }
}

/*
  定义一个类
*/
//定义代码段,()里的内容是参数,参数中:后的内容是参数的默认值(没有传参数)
.roundedCorner(@radius :5px){
  -webkit-border-radius: @radius;
  -moz-border-radius: @radius;
  -o-border-radius: @radius;
  -ms-border-radius:@radius;
  border-radius: @radius;
}

#header{
  .roundedCorner();
}
#footer{
  .roundedCorner(10px);
}

@h:120px;
@import url("_part.less");

Less使用

  • less执行方式一
    使用lessc命令生成.css的代码,在html中引入css文件
  • 使用less.js
    在html中直接引入.less文件,不过需要引入less.js
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet/less" href="css/main.less">
</head>
<body>
    <script type="text/javascript" src="lib/less/less.min.js"></script>
</body>
</html>

在浏览器端生成的代码如下:


如上图可见less.js是将less文件生成css文件,插入到header中

如上图可见浏览器将less转为css需要时间,如上使用21ms,但是less越复杂使用时间越长,没必要让用户等待这个处理时间,所以一般在项目中,测试中使用方式二:less.js,实际上线使用方式一:lessc命令。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容