LESS 是 CSS预处理语言,是 CSS 的扩展。javascript
而后说说比较流行的几款预编译器:SASS/SCSS、LESS、Stylus。css
SASS 学习网站:html
LESS 学习网站:java
Stylus 学习网站:node
SASS/SCSS和Stylus都很强,可是我仍是选择了LESS,我的喜欢NodeJS,而后stylus空格我又不喜欢,就用了LESS,如今用的也习惯了,下面就给你们介绍一下LESS的一些用法吧。git
LESS——像写javascript同样书写cssgithub
特色:ajax
<link rel="stylesheet/less" type="text/css" href="index.less" /> <!-- 必须加上/less --> <script src="less-1.3.3.min.js"></script> <!-- js必须在less后引用 -->
经过以上配置,在访问页面时,js会自动编译less为cssnpm
https://cdnjs.cloudflare.com/ajax/libs/less.js/3.9.0/less.min.js
gulp
https://cdn.bootcss.com/less.js/3.9.0/less.js
在每次保存文件后,调试时,总要进行手动刷新,因而有了观察模式
基本设置
<link rel="stylesheet/less" href="index.less"> <script>less = { env: 'development'};</script>//声明开发模式 <script src="less-1.3.3.min.js"></script> <script>less.watch();</script>//调用观察模式
调用了观察模式后,就能够实如今每次保存时自动编译
观察模式的原理是每隔一段时间进行编译
扩展配置
在基础设置的后面添加script标签,内容以下
less = { // 开发环境development,生产模式production env: "development", // 异步加载 async: false, // 在页面下异步读取导入 fileAsync: false, // 观察模式间隔 poll: 1000, // 使用函数 functions: {}, // 行信息输出comment、mediaQuery、all dumpLineNumbers: "all", // 是否调整url为相对 relativeUrls: false, // 根路径 rootpath: ":/" };
使用此方法须要先安装node
node下载连接:http://nodejs.cn/download/
安装了node以后,就能够正式安装 less
了
npm install -g less
当less文件写好后,就能够使用一下命令进行编译
lessc index.less index.css
使用此方法须要分别在 全局 与 项目 安装gulp
//全局 npm install -g gulp //当前项目 npm install --save-dev gulp
而后在安装gulp的插件 gulp-less
npm install --save-dev gulp-less
安装完以后,建立入口文件 gulpfile.js,并写入:
var origin = './index.less'; //填写你须要转化的less文件的路径 var result = './'; //填写你转化后文件存在的目录路径 var gulp = require('gulp'); gulp.task('less2css', function(){ gulp.src(origin) .pipe(less()) .pipe(result); })
至此,就能够经过输入 gulp less2css
命令进行编译了
可是,每次保存后都要去编译很麻烦,因而,补充如下代码
gulp.task('lessc', function(){ gulp.watch('origin', ['less2css']); })
如今只须要输入 gulp lessc
就能够实现less的观察者模式了
保留CSS的基础语法,并进行了扩展
@import "reset.css" //less在编译时不会变更css文件 @import "base" //less导入其余less文件时能够省略文件格式 @import url("base.less") //less也能够使用url形式导入,可是必须有后缀
在less
中,能够在书写属性时直接进行加减乘除
例子:header
插入了一个padding
@fullWidth: 1200px; .header{ width: @fullWidth – 20px * 2; padding: 0px 20px*2; }
@headergray: #c0c0c0; @fullWidth: 1200px; @logoWidth: 35%;
@name: banner; background: url("images/@{name}.png") no-repeat;
编译:
background: url("images/banner.png") no-repeat;
background: ~"red";
编译:
background: red;
@fullWidth: 750; @toRem: unit(@fullWidth/10,rem); header{ height: 150/@toRem; }
编译:
header{ height: 2rem; }
.class1{ } .class2{ .class1; }
a{ color: #000; &:hover{ color: #f00; } }
.class1{ p{ span{ a{ } } &:hover{ } } div{ } }
.color(@color=red){ color: @color; } .class1{ .color(#0f0); } .class2{ .color(); }
格式:statement when(conditons)
、prop: if((conditions),value)
;
.base(){ width: 0; height: 0; } @normal: 20px solid transparent; @anger: 20px solid #f00; .triangle(@val) when(@val=left){ .base(); border-left: none; border-right: @anger; border-top: @normal; border-bottom: @normal; } .triangle(@val) when(@val=right){ .base(); border-right: none; border-left: @anger; border-top: @normal; border-bottom: @normal; } .triangle(@val) when(@val=top){ .base(); border-left: @normal; border-right: @normal; border-top: none; border-bottom: @anger; } .triangle(@val) when(@val=bottom){ .base(); border-left: @normal; border-right: @normal; border-top: @anger; border-bottom: none; } .div1{ .triangle(left); } .div2{ .triangle(right); } .div3{ .triangle(top); } .div4{ .triangle(bottom); }
<!DOCTYPE html> <html> <head> <link rel="stylesheet/less" href="index.less"> <script src="../less-1.3.3.min.js"></script> </head> <body> <div class="div1"></div> <div class="div2"></div> <div class="div3"></div> <div class="div4"></div> </body </html>
background: if( (true), #f00 );
例子:将8个td的背景依次更换为bg_1.png、bg_2.png、…、bg_8.png
table td{ width: 200px; height: 200px; .loop(@i) when(@i<9){ &:nth-child(@{i}){ background: url(~"../images/partner_@{i}.png") no-repeat; } .loop(@i+1); } .loop(1); }
@backgroundlist: apple, pear, coconut, orange;
image-size(“bg.png”) //获取图片的Width和Height image-width() //获取图片的Width和Height image-height() //获取图片的Width和Height convert(9s, ms) //转换9秒为毫秒 convert(14cm, mm) //转换14厘米为毫米
更多函数参考官方函数库,包括混合函数、数学函数、字符串函数、列表函数等等
less中还能够引用js表达式,不过通常都不推荐使用,此种方式在使用nodejs将less编译css时可能会报错。
格式:`javascript`
例子:将高度设置为当前获取到的浏览器的高度
@fullHeight: unit(` window.screen.height `, px); div{ height: @fullHeight; }
那么问题来了,是否能够尝试将 @width: unit(` window.screen.width `, px) 引进 vw布局 呢?
不推荐,不建议less在正式环境中使用,使用LESS时须要在头部引入js,而在js执行时的时候,会消耗时间,而less编译须要在js执行后,会在必定程度上影响到性能。