Less小记

90 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情

一、引

日常使用中能增加开发乐趣、以及减少开发工作量。

二、特性

1、变量(常量)

less文件中也可以定义变量。

a、值变量
  • 以@开头定义变量,并且使用时直接键入@名称。
  • 常用的变量 封装到一个文件中,这样利于代码组织维护。
@whiteColor: white; // 白色
@blackColor: black; // 黑色
@systemColor: #d63838; // 底层背景色

.lessDemo {
    color:@whiteColor;
    background: @blackColor;
    border: 1px solid @systemColor
}

// 生成的 CSS
.lessDemo {
    color: white;
    background: black;
    border: 2px solid #d63838;
}
b、url 变量
  • 根据配置引入其他的样式文件、相同名称常量会被覆盖。
1、common.less 文件
@bankName:'hs'
{
    @whiteColor: white; // 白色
}

@url: %(@bankName, '.less');
@import url(@url);

2、hs.less 文件
{
    @whiteColor: red; // 白色
}
  • 项目结构改变时,修改其变量即可。
@images: "../img";//需要加引号
body {
  background: url("@{images}/dog.png");//变量名 必须使用大括号包裹
}

// 生成的 CSS
body {
  background: url("../img/dog.png");
}
c、变量运算
  • 加减法时 以第一个数据的单位为基准。
  • 乘除法时 注意单位一定要统一。
@width: 300px;
@color: #222;

.lessDemo {
    width: @width - 20;
    height: @width - 20*5;
    margin: (@width - 250)*2;
    color: @color*2;
    background-color: @color + #111;
    border: 10px solid #222 + 1;
    border: 10px solid #222 + 11;
    border: 10px solid #222 + 111;
}

// 生成的 CSS
.lessDemo {
    width: 280px;
    height: 200px;
    margin: 100px;
    color: #444;
    background-color: #333;
    border: 10px solid #******;
    border: 10px solid #******;
    border: 10px solid #919191;
}

// 16进制转10 、10进制转16
d、变量作用域
  • 就近原则。
@var: @a;
@a: 100%;
.lessDemo {
    width: @var;
    //width: @a;
    @a: 20%;
    border: 20px solid @systemColor;
}

// 生成的 CSS
.lessDemo {
    width: 20%;
}

2、混合方法

  • 就是封装。
  • flexCenter 与 flexCenter() 是等价的,建议写出.flexCenter(),以避免混淆。
a、无参数方法
// 水平垂直居中
.flexCenter {
    display: flex;
    justify-content: center;
    align-items: center;
}

// 水平等分 垂直居中
.flexBetween {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.lessDemo {
    .flexCenter();
    // .flexCenter;
    .boxSize(100vw, 100vh);
    background: @systemColor;
}

// 生成的 CSS
.lessDemo {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 100vw;
    height: 100vh;
    background: #d63838;
}
b、默认参数方法
  • Less 可以使用默认参数,如果没有传参数,那么将使用默认参数。
  • @arguments 犹如 JS 中的 arguments 指代的是 全部参数。
  • 传的参数中 必须带着单位。
// 盒模
.boxSize (@width, @height:@width) {
    width: @width;
    height: @height;
}

// 字样
.fontStyle (@color, @fontSize, @fontWeight:400) {
    color: @color;
    font-weight: @fontWeight;
    font-size: @fontSize;
}

.lessDemo {
    .boxSize(100px);
    //.boxSize(100);
    //.boxSize();
    .fontStyle(@whiteColor, 16px);
    //.fontStyle(@whiteColor, 16);
    background: @systemColor;
}

// 生成的 CSS
.lessDemo {
    width: 100px;
    height: 100px;
    color: green;
    font-weight: 400;
    font-size: 16px;
    background: #d63838;
}
c、方法的匹配模式
  • 面向对象中的多态
  • switch、case
@baseRemUnit: 37.5px; // 1rem 基准值

.pxToRem(px,@name, @value) {
        @{name}: ( @value / @baseRemUnit) * 1rem;
}

.pxToRem(rem,@name, @value) {
        @{name}: @value;
}

// 有问题
.pxToRem('%',@name, @value) {
        @{name}: @value;
}

.pxToRem(@_,@name, @value) {
    border: 1px solid @systemColor;
}

// 字样
.fontStyleFun (@color, @fontSize:16px, @fontWeight:400) {
    color: @color;

    .pxToRem(get-unit(@fontSize), font-size, @fontSize);

    font-weight: @fontWeight;
}


.lessDemo {
    .boxSize(100px);
    //.fontStyleFun(@systemColor, 1rem, 500);
    //.fontStyleFun(@systemColor, 20px, 500);
    .fontStyleFun(@systemColor, 20%, 500);
}
d、方法的条件筛选
  • 比较运算有: >、 >=、 =、 =<、 <。
  • = 代表的是等于。
  • 除去关键字 true 以外的值都被视为 false。
  • when and 运算符 ,相当于 与运算 &&,必须条件全部符合才会执行。
  • when not 运算符,相当于 非运算 !,条件为 不符合才会执行。
  • when , 逗号分隔符:相当于 或运算 ||,只要有一个符合条件就会执行。
// px 转 rem 不是rem的时候 / 37.5
@baseRemUnit: 37.5px; // 1rem 基准值

.pxToRem(@name, @value) when (ispixel(@value)) {
    @{name}: (@value / @baseRemUnit) * 1rem;
}

// px 转 rem 是 rem 直接赋值
.pxToRem(@name, @value) when (isunit(@value, rem)) {
    @{name}: @value;
}

// 字样
.fontStyleFun (@color, @fontSize, @fontWeight:400) {
    color: @color;
    .pxToRem(font-size, @fontSize);
    font-weight: @fontWeight;
}


.lessDemo {
    .fontStyleFun(@systemColor, 20px, 500);
}

// 生成的 CSS
.lessDemo {
    color: #d63838;
    font-size: 0.53333333rem;
    font-weight: 500;
}


.lessDemo {
    .fontStyleFun(@systemColor, 1rem, 500);
}

// 生成的 CSS
.lessDemo {
    color: #d63838;
    font-size: 1rem;
    font-weight: 500;
}

更多相关网站

学习Less-看这篇就够了 Less官网