前端利器之less入门

less 是什么?

Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展。
less,是方便我们快速编写CSS的工具,它增强了CSS代码的扩展性和复用性。
Less 可以运行在 Node 或浏览器端。

less能为我们做什么?

下边让我们来看一段我们经常写的代码

/**
我们经常写浏览器的兼容,假设我们写icon
**/
nav a.home.active i {
    background: url('images/nav-home-on.png') no-repeat center;
    background-size: contain;
    -webkit-background-size: contain;
    -moz-background-size: contain;
    -o-background-size: contain;
}
nav a.home i {
    background: url('images/nav-home-off.png') no-repeat center;
    background-size: contain;
    -webkit-background-size: contain;
    -moz-background-size: contain;
    -o-background-size: contain;
}
nav a.topics.active i {
    background: url('images/nav-circle-on.png') no-repeat center;
    background-size: contain;
    -webkit-background-size: contain;
    -moz-background-size: contain;
    -o-background-size: contain;
}
nav a.topics i {
    background: url('images/nav-circle-off.png') no-repeat center;
    background-size: contain;
    -webkit-background-size: contain;
    -moz-background-size: contain;
    -o-background-size: contain;
}

  • 一遍一遍写一大段一大段一样的代码,有木有很乏味,如果要换一个contain为cover呢?
    改疯了有木有

让我们看看less会怎么做


//相当于新建一个函数 Mixins(混入)
.border-radius(@radius:10px){
border-radius:@radius;
 -webkit-border-radius:@radius;
 -moz-border-radius:@radius;
  -o-border-radius:@radius;
}
.background-size(@type){
  background-size: @type;
  -webkit-background-size: @type;
  -moz-background-size: @type;
  -o-background-size: @type;
}

//用法
.orderList{
    background-color:#E36264;
    width:100px;
    height:200px;
    .border-radius(15px);//利用函数可以省去很多的重复兼容代码
  .border-radius;//利用函数可以省去很多的重复兼容代码
  .background-size(contain);
}


//这么写整个世界都美好了
nav a.topics i {
    background: url('images/nav-circle-off.png') no-repeat center;
    .background-size(contain);
}
  • 说明 像 JavaScript 中 arguments一样,Mixins 也有这样一个变量:@arguments。
    @arguments 在 Mixins 中具是一个很特别的参数,当 Mixins 引用这个参数时,
    该参数表示所有的变量,很多情况下,这个参数可以省去你很多代码。
.boxShadow(@x:0,@y:0,@blur:1px,@color:#000){
 -moz-box-shadow: @arguments;
 -webkit-box-shadow: @arguments;
 box-shadow: @arguments;
 }
 #header {
 .boxShadow(2px,2px,3px,#f36);
 }

变量写法

less代码

/**
  大家都遇到过这样的问题
  我们做换肤功能的时候都有一个主色调,
  我们写完了代码设计师说我想更换个主色调,
  这时候你就会发现,我有100个地方用了主色调,
  然后只能苦逼的改100次
  太难受了!!有木有??有一个变量直接提出来多好?

**/
//定义一个变量
@colorFff:#fff;

//用法
footer{
  background-color: @colorFff
}
nav{
  color: @colorFff;
}
header{
  border-right:1px solid  @colorFff;
}

最终生成的代码

footer {
  background-color: #ffffff;
}
nav {
  color: #ffffff;
}
header {
  border-right: 1px solid #ffffff;
}

代码片段写法

less代码

//又是重复代码,less告诉你可以这么写 有没有觉得自己很会过日子,原来可以这么省

//定义一个公共样式
.icon20{
  width: 20px;
  height: 20px;
  display: inline-block;
}

//用起来
.icon-my{
  .icon20;
  background: url('images/nav-my-off.png') no-repeat center;
  .background-size(contain);
}
.icon-car{
  .icon20;
  background: url('images/nav-car-off.png') no-repeat center;
  .background-size(contain);
}

对应生成的css
又是重复代码,less告诉你可以这么写 有没有觉得自己很会过日子,原来可以这么省

.icon-my{
  width: 20px;
  height: 20px;
  display: inline-block;
  background: url('images/nav-my-off.png') no-repeat center;
}

.icon-car{
  width: 20px;
  height: 20px;
  display: inline-block;
  background: url('images/nav-car-off.png') no-repeat center;
}

有时候我们需要引用一段less文件

写法

/* LESS Document */
//引入一个公共的less文件
@import "base.less";

嵌套写法

//这样的css代码你该不陌生
.shopcar-item {
    font-size: 1.5rem;
    background-color: #ffffff;
    position: relative;
    padding: 10px 10px 10px 70px;
    border-bottom: 1px solid #ededed;
}
.shopcar-item img {
    width: 100%;
}
//我要选img必须加上前边的那个,好吧 这样还可以接受,那么这样呢?
.shopcar-item .item-con .add-btn,
.shopcar-item .item-con .mul-btn {
    display: inline-block;
    padding: 5px 10px;
    background-color: #ff4354;
    color: #ffffff;
    border-radius: 5px;
    margin: 0 5px;
}


我们来看看less怎么写


//看看 嵌套关系清晰明了  告别冗长的选择器
.shopcar-item {
    font-size: 1.5rem;
    background-color: #ffffff;
    position: relative;
    padding: 10px 10px 10px 70px;
    border-bottom: 1px solid #ededed;

    img {
        width: 100%;
    }

    .item-con{
      position: relative;

      .add-btn,.mul-btn{
          display: inline-block;
          padding: 5px 10px;
          background-color: #ff4354;
          color: #ffffff;
          border-radius: 5px;
          margin: 0 5px;
      }
    }
}

并且写法

用less之前我们这么写

.nav {
  background-color: #ededed;
}
.nav.focus {
  background-color: #cccccc;
}
.nav:after {
  content: "";
  display: block;
  width: 100px;
  height: 100px;
}

less告诉你,我们可以这么写,一个元素的各种状态一目了然

.nav{
  background-color: #ededed;

  &.focus{
    background-color: #cccccc;
  }

  &:after{
    content: "";
    display: block;
    width: 100px;
    height: 100px;
  }

}

运算及函数

//运算及函数
@init: #111111;
@transition: @init*2;
.switchColor {
 color: @transition;
}

最终生成的样式

.switchColor {
  color: #222222;
}
  • 上面的例子中使用 LESS 的 operation 是 特性,
    其实简单的讲,就是对数值型的 value(数字、颜色、变量等)
    进行加减乘除四则运算

我们做响应式布局适配的时候经常要计算rem,

用less告别手动计算

.px2rem(@name, @px){
    @{name}: @px / 75 * 1rem;
}

.orderList{
  .px2rem(font-size,32);
    background-color:#E36264;
    width:100px;
    height:200px;
}


//最终生成的css
.orderList {
  font-size: 0.42666667rem;
  background-color: #E36264;
  width: 100px;
  height: 200px;
}

less这么好用怎么用??

  • 在浏览器端用
<link rel="stylesheet/less" type="text/css" href="index.less" />
<script type="text/javascript" src="js/less.2.5.3.js"></script>
//注:
1、顺序不能错
2、设置属性 rel="stylesheet/less" 
3、代码需要服务器环境运行
  • 编译之后引用css文件
    我推荐使用Koala.exe 下载地址
    多语言支持 支持Less、Sass、CoffeeScript 和 Compass Framework。
    实时编译 监听文件,当文件改变时自动执行编译,这一切都在后台运行,无需人工操作。
    编译选项 可以设置各个语言的编译选项。
    项目配置 支持为项目创建一个全局配置,为文件设置统一编译选项。
    错误提示 在编译时如果遇到语法的错误,koala将在右下角弹出错误信息,方便开发者定位代码错误位置。
    跨平台 Windows、Linux、Mac都能完美运行。
koala.png
  • 设置语言
lang.png
  • 添加项目
Paste_Image.png
  • 编译less文件
    手动运行 【执行编译】或者点击文件勾选自动编译,它会自动检测文件更改并重新编译
Paste_Image.png

其他用法参见 LESS官网

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

推荐阅读更多精彩内容

  • 先安利我最近看的一部电视剧吧:《鸡毛飞上天》,讲浙江义乌小商品市场怎么发展起来的故事,以小积大呀,所以我们的基础一...
    Iris_mao阅读 587评论 0 6
  • 简介 CSS(层叠样式表)是一门历史悠久的标记性语言,同 HTML 一道,被广泛应用于万维网(World Wide...
    老夫的天阅读 1,918评论 1 29
  • 1.less简介及less环境搭建,首先写less语法前不得不提下sass,之前不了解less和sass之前,这两...
    倘浩洋阅读 6,101评论 0 19
  • 0. 前言 CSS(层叠样式表)是一门历史悠久的标记性语言,同 HTML 一道,被广泛应用于万维网(World W...
    旧丶时候阅读 380评论 5 10
  • 秦珊来家里玩儿,趁我给她泡茶的功夫,她在屋子里拨弄着各种小摆件,嘴里念念有词。 我回到客厅时,见她盯着角落里的录音...
    Doctor方阅读 284评论 2 3