LESS从入门到精通

LESS从入门到精通

1、LESS是什么

LESSCSS预处理语言,是 CSS 的扩展。javascript

而后说说比较流行的几款预编译器:SASS/SCSSLESSStyluscss

SASS 学习网站:html

  • https://www.sass.hk/
  • https://www.w3cschool.cn/sass/
  • https://github.com/sass/sass

LESS 学习网站:java

  • http://lesscss.cn/
  • https://less.bootcss.com/
  • https://www.w3cschool.cn/less/
  • https://github.com/less/less.js

Stylus 学习网站:node

  • https://stylus.bootcss.com/
  • https://github.com/stylus/stylus

2、为何用LESS

SASS/SCSS和Stylus都很强,可是我仍是选择了LESS,我的喜欢NodeJS,而后stylus空格我又不喜欢,就用了LESS,如今用的也习惯了,下面就给你们介绍一下LESS的一些用法吧。git

LESS——像写javascript同样书写cssgithub

特色:ajax

  • 一、写样式更简单:嵌套
  • 二、使用方便:变量、运算、函数
  • 三、学习成本低:语法

3、怎么用LESS

一、安装使用

1.1 浏览器中使用

引用
<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

CDN:

https://cdnjs.cloudflare.com/ajax/libs/less.js/3.9.0/less.min.jsgulp

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: ":/"
};

1.2 使用node编译后使用

使用此方法须要先安装node

node下载连接:http://nodejs.cn/download/

安装了node以后,就能够正式安装 less

npm install -g less

当less文件写好后,就能够使用一下命令进行编译

lessc index.less index.css

1.3 gulp打包工具

使用此方法须要分别在 全局项目 安装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;
}

四、变量

4.1 格式:以@开头

@headergray: #c0c0c0;
@fullWidth: 1200px;
@logoWidth: 35%;

4.2 字符串插值

@name: banner;
background: url("images/@{name}.png") no-repeat;

编译:

background: url("images/banner.png") no-repeat;

4.3 避免编译

background: ~"red";

编译:

background: red;

4.4 移动端rem布局中的使用

@fullWidth: 750;
@toRem: unit(@fullWidth/10,rem);
header{
    height: 150/@toRem;
}

编译:

header{
    height: 2rem;
}

五、混合

5.1 在一个类中继承另外一个类

.class1{ }
.class2{
    .class1;
}

5.2 用&替换当前选择器

a{
    color: #000;
    &:hover{
        color: #f00;
    }
}

5.3 在父类中嵌套子类

.class1{
    p{
        span{
            a{ }
        }
        &:hover{  }
    }
div{  }
}

5.4 带参混合

.color(@color=red){
    color: @color;
}
.class1{
    .color(#0f0);
}
.class2{
    .color();
}

六、函数

6.1 逻辑控制

格式statement when(conditons)prop: if((conditions),value);

例子1:在less中使用一个带参类名展现上下左右四个方向的纯CSS三角形
  • index.less
.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);
}
  • index.html
<!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>
例子2:根据条件控制属性值
background: if( (true), #f00 );

6.2 循环

例子:将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);
}

6.3 列表

@backgroundlist: apple, pear, coconut, orange;

6.4 less函数库

image-size(“bg.png”) //获取图片的Width和Height
image-width() //获取图片的Width和Height
image-height() //获取图片的Width和Height
convert(9s, ms) //转换9秒为毫秒
convert(14cm, mm) //转换14厘米为毫米

更多函数参考官方函数库,包括混合函数、数学函数、字符串函数、列表函数等等

七、使用JS表达式

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执行后,会在必定程度上影响到性能。

相关文章
相关标签/搜索