博客原文地址:Claiyre的个人博客 https://claiyre.github.io/

博客园地址:http://www.cnblogs.com/nuannuan7362/

如需转载,请在文章开头注明原文地址

前言

less作为css语言的扩展,赋予了css动态语言的特性,如:变量,继承,运算,函数等。如果你原本就是程序员,你一定会非常喜爱less,它可以帮你节省很多重复工作,可以让你像编写一门动态语言一样地编写css。

本文总结了less的相关语法和使用方式,可供查阅和入门使用。

正文

语法

变量

less允许使用变量,可以将一个多次用到的值设为一个变量。less中没有类型限制,以符号@标识变量,在声明或使用变量时再变量名前添加符号@即可

@bg-color: #fff;
@base-font-size: 16px; //使用 .body{
background-color: @bg-color;
font-size: @base-font-size;
}

多数情况下,我们是将这个变量当做一个常量来使用;less中变量也只能被定义一次这一点使之更像常量。

混合

将需要用到多次的全局css样式集成为一个css类,在其他类中可以直接引用这个集成类,这个过程称为混合。

实例:

.base-border{
border: 2px solid #0c6dc7;
border-radius: 6px;
} .img-top{
width: 150px;
height: 150px;
.base-border
}
.img-bottom{
width: 200px;
height: 150px;
.base-border
}

上面的会被解析为

.img-top{
width: 150px;
height: 150px;
border: 2px solid #0c6dc7;
border-radius: 6px;
}
.img-bottom{
width: 200px;
height: 150px;
border: 2px solid #0c6dc7;
border-radius: 6px;
}

个人认为混合与传统OO语言的继承颇为相似,子类继承父类的特征的同时,也可以添加自己专有的特征。

带参数的混合

在使用混合时,less允许给父类传入参数,参数使我们可以更加灵活地运用混合

比如,可以稍微改动上面的.base-border

.base-border(@radius){
border: 2px solid #0c6dc7;
border-radius: @radius;
} //使用
.img-top{
width: 150px;
height: 150px;
.base-border(10px);
}
.img-bottom{
width: 200px;
height: 150px;
.base-border(15px);
}

还可以设置参数的默认值,多个参数用逗号隔开:

.base-border(@color: #0c6dc7,@radius: 6px){
border: 2px solid @color;
border-radius: @radius;
} //使用
.img-top{
width: 150px;
height: 150px;
.base-border; //默认是颜色#0c6dc7,半径6px
}
.img-bottom{
width: 200px;
height: 150px;
.base-border(#ff0000,15px);
}

在一个带参数的类中,我们可以通过@arguments来获取传进来的所有参数,可以整体作为某个属性的值。

嵌套规则

嵌套规则基于html的文档结构,可以减少我们对一些css选择器的使用,使代码更易懂,更简洁。

例如,我们需要设置这样的样式:

.parent{
background-color: #ff0000;
} .parent .child{
height: 200px;
width: 200px;
}
.parent.ancestor{
border: 2px solid #000;
}

用less可以这样嵌套,文档结构更加明显:

.parent{
background-color: #ff0000;
.child{
height: 200px;
width: 200px;
}
&.ancestor{
border: 2px solid #000;
}
}

符号&,表示“and”,也可以理解为父级选择器。

颜色函数

less提供了多个颜色运算的函数,非常方便

函数 功能
lighten(@color,10%) 返回一个比@color亮10%的颜色
darken(@color,10%) 返回一个比@color暗10%的颜色
saturate(@color,10%) 返回一个比@color饱和度高10%的颜色
desaturate(@color,10%) 返回一个比@color饱和度低10%的颜色
fadein(@color,10%) 返回一个比@color透明度低10%的颜色,透明度低,颜色更深
fadeout(@color,10%) 返回一个比@color透明度高10%的颜色,透明度高,颜色更浅
fade(@color,90%) 返回一个透明度为0.9的颜色,等于fadeout(@color,10%)
spin(@color,10) 返回颜色的hue值比@color大10度
spin(@color,-10) 返回颜色的hue值比@color小10度
mix(@color-1,@color-2) 返回@color-1@color-2混合后的颜色

这些颜色运算函数会先将颜色转化为HSL色彩空间,然后在通道级别运算

math函数

less还提供了几个math函数,用来处理数字

函数 功能
ceil(@number) 向上取整
floor(@number) 向下取整
round(@number) 四舍五入

匹配模式

less匹配即判断是否满足条件,相当于switch或if-else if的用法,弥补了less不支持switchh和if的缺憾。

实例用法:

.special-border(top,@color){      // 匹配top 1
border-top: 2px solid @color;
border-top-left-radius: 10px;
border-top-right-radius: 20px;
}
.special-border(bottom,@color){ // 匹配bottom 2
border-bottom: 2px solid @color;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 10px;
}
.special-border(@_,@color){ //匹配所有 3
border-right: 2px solid @color;
border-left: 2px solid @color;
} .content{
.special-border(bottom, #73d79c);
height: 200px;
width: 200px;
}

上述代码中.content类匹配了2和3

导引

导引是对参数是否满足一定条件的匹配,不是对参数值得匹配。搭配when语句使用。

.class(@a) when(@a > 10){ ... }

.class(@a) when(iscolor(@a)){ ... }

.class(@this-media) when(@this-media = mobile){ ... }

.class(@a) when(@a){ ... } //仅当@a = true 时才可匹配

注意,在导引后的when语句中,若是只有单独的值,则除布尔值true以外的任何值都被视作假

导入

在文件开头通过关键字@import导入其他样式文件

@import "style.less"
@import "style" @import "style.css"

.less为后缀的文件的后缀名带不带均可

另: less不会处理.css的文件

变量作用域

less中的变量作用域和其他语言类似,首先会从本地查找变量或者混合模块,如果没找到的话会去父级作用域中查找,直到找到为止.

注释

两种注释方法,应注意其区别:

/*这是注释,编译为css后不会被滤掉*/

//这也是注释,编译为css后会被滤掉

使用

less可以在客户端使用,也可以在服务端使用

客户端使用

  1. 在html头部引入你的.less样式文件
  2. 在html头部引入less.js文件

上述引入文件的顺序不可颠倒

服务器端使用

  1. 先安装,最简便的方法是通过npm包管理器安装
$ npm install less

// 或安装最新稳定版本的 LESS
$ npm install less@latest
  1. 在文件头部通过require引入less即可使用

在命令行中手动将less编译为css文件

$ lessc styles.less > styles.css

结语

less并未减弱css的任何强大之处,在任何时候都可以回退至原始css,同时让习惯动态语言的程序员可以更方便地编写less。与其功能类似的有sass,两者各有优点,都值得一学。

动态样式语言—LESS的更多相关文章

  1. Less (一种动态样式语言)

    Less (一种动态样式语言). LESS是一种由Alexis Sellier设计的动态层叠样式表语言,受Sass所影响,同时也影响了 Sass的新语法:SCSS. LESS是开源的,其第一个版本由R ...

  2. 动态样式语言Sass&Less介绍与区别

    一. Sass/Scss&Less是什么? Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,语法跟css一样(但多了些功能),比css好写, ...

  3. less 一种 动态 样式 语言

    LESS « 一种动态样式语言 http://www.bootcss.com/p/lesscss/ 一种 动态 样式 语言. LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承,运算, 函数 ...

  4. 动态样式语言Less学习笔记

    介绍资料参见:http://www.bootcss.com/p/lesscss/ LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承,运算, 函数. LESS 既可以在 客户端 上运行 (支 ...

  5. Bootstrap进阶六:动态样式语言LESS简介

    LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承, 运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Firefox),也可以借助Node.js或者R ...

  6. 动态样式语言—LESS基础知识

    CSS是一门非程序式语言,缺少逻辑性,不便于维护 LESS在CSS现有语法的基础上,为CSS加入程序式语言的特性 引入了变量.混入.运算.函数等功能,大大简化CSS的编写,降低了CSS的维护成本 LE ...

  7. Web前端一种动态样式语言-- Less

    变量 变量允许我们单独定义一系列通用的样式,然后在需要的时候去调用.所以在做全局样式调整的时候我们可能只需要修改几行代码就可以了. // LESS @color: #4D926F; #header { ...

  8. 动态样式语言less初识

    资料参考与http://lesscss.cn/ Bootstrap--(less)下载安装配置 http://lesscss.cn Less使用两种方法 (1)在客户端使用LESS--学习 编写 x. ...

  9. 深入理解脚本化CSS系列第五篇——动态样式

    前面的话 很多时候,DOM操作比较简单明了,因此用javascript生成那些通常原本是HTML代码生成的内容并不麻烦.但由于浏览器充斥着隐藏的陷阱和不兼容问题,处理DOM中的某些部分时要复杂一些,比 ...

随机推荐

  1. MySQL数据文件的导入、导出

    1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql 2.导 ...

  2. Android.mk文件详解(转)

    源:Android.mk文件详解 从对Makefile一无所知开始,折腾了一个多星期,终于对Android.mk有了一个全面些的了解.了解了标准的Makefile后,发现Android.mk其实是把真 ...

  3. Lua C Api lua_gettable 、lua_settable 、lua_next 使用详解

    之前一直没理清lua_gettable和lua_settable的使用,今天理清了,顺便就做下笔记了.1.lua_gettable void lua_gettable (lua_State *L, i ...

  4. onethink的插件扩展

    2014年7月25日 07:22:35 编写一个文章可以同步到微博的插件 思路:首先要进行微博的绑定,获得令牌.然后调用微博的api即可. 2014年7月25日 08:40:27 服务器与本地有区别. ...

  5. iOS 之 支付

    现在广泛应用的是微信支付和支付宝支付,这两种应该覆盖了几乎所有网上消费的用户,所以我们就用这两种支付方式就够了.2014年用过支付宝的网民购物占比有94%. 1. iOS 之 微信支付 2. iOS ...

  6. 1.4. 为现有的应用程序添加 Core Data 支持(Core Data 应用程序实践指南)

    项目创建时会有 “Use Core Data" ,但是,有时没有勾选这个选项,那么就要手动链接Core Data Framework. 选中 Grocery Dude Target Gene ...

  7. YII 1.0 增删改查

    查询 查询多条返回数据集合 //1.该方法是根据一个条件查询一个集合 $admin=Admin::model()->findAll($condition,$params); $admin=Adm ...

  8. 会话Cookie及session的关系(Cookie & Session)

    会话Cookie及session的关系(Cookie & Session) 在通常的使用中,我们只知道session信息是存放在服务器端,而cookie是存放在客户端.但服务器如何使用sess ...

  9. css :active伪类的理解

    /*active伪类为点击鼠标按下去还没松开鼠标的那一瞬间的事件*/

  10. JS 禁止刷新和右键

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...