Less预处理——继承、导入、条件表达式和函数

简介: Less预处理——继承、导入、条件表达式和函数

一、继承

1、extend 关键字的使用

extend 是 Less 的一个伪类,它可继承所匹配声明中的全部样式

index.less 文件

.animation {
    transition: all .3s ease-out;
    .hide {
        transform: scale(0);
    }
}
#main {
    &:extend(.animation);
}
#con {
    &:extend(.animation .hide);
}

index.css 文件

  • 自动转义后的 css 文件内容如下
.animation,
#main {
  transition: all 0.3s ease-out;
}
.animation .hide,
#con {
  transform: scale(0);
}

2、all 全局搜索替换

使用选择器匹配到的全部声明

index.less 文件

#main {
    width: 200px;
}
#main {
    &:after {
        content: 'Less is more.'
    }
}
#wrap:extend(#main all) {
    height: 200px;
}

index.css 文件

  • 自动转义后的 css 文件内容如下
#main,
#wrap {
  width: 200px;
}
#main:after,
#wrap:after {
  content: 'Less is more.';
}
#wrap {
  height: 200px;
}

3、减少代码的重复性

extend 与方法的最大差别,就是 extend 是同个选择器共用同一个声明,而方法是使用自己的声明,这就增加了代码的重复性

index.less 文件

.method {
    width: 200px;
    &:after {
        content: 'Less is more';
    }
}
#main {
    .method
}

index.css 文件

  • 自动转义后的 css 文件内容如下
.method {
  width: 200px;
}
.method:after {
  content: 'Less is more';
}
#main {
  width: 200px;
}
#main:after {
  content: 'Less is more';
}

二、导入

1、文件导入

nav.less 文件

  • 定义要导入的文件的样式
#nav {
    width: 100%;
    height: 200px;
    background: pink;
}

index.less 文件

  • 把 nav.less 文件导入进来
@import 'nav';

index.css 文件

  • 自动转义后的 css 文件内容如下
#nav {
  width: 100%;
  height: 200px;
  background: pink;
}

2、reference

Less 中最强大的特性,使用引入的Less文件,但不会编译它

nav.less 文件

  • 定义要导入的文件的样式
#nav {
    width: 100%;
    height: 200px;
    background: pink;
}

index.less 文件

  • 把 nav.less 文件导入进来
@import (reference) 'nav';

index.css 文件

// 不会编译,内容为空

3、once

@import 语句的默认行为。这表明相同的文件只会被导入一次,而随后的导入文件的重复代码都不会解析

nav.less 文件

  • 定义要导入的文件的样式
#nav {
    width: 100%;
    height: 200px;
    background: pink;
}

index.less 文件

  • 把 nav.less 文件导入进来
@import (once) 'nav';
@import (once) 'nav';

index.css 文件

  • 自动转义后的 css 文件内容如下
  • 导入多次也只有一次生效
#nav {
  width: 100%;
  height: 200px;
  background: pink;
}

4、multiple

可以多次导入

nav.less 文件

  • 定义要导入的文件的样式
#nav {
    width: 100%;
    height: 200px;
    background: pink;
}

index.less 文件

  • 把 nav.less 文件导入进来
@import (multiple) 'nav';
@import (multiple) 'nav';

index.css 文件

  • 自动转义后的 css 文件内容如下
  • 可以被导入多次,生效多次
#nav {
  width: 100%;
  height: 200px;
  background: pink;
}
#nav {
  width: 100%;
  height: 200px;
  background: pink;
}

三、条件表达式

1、带条件的混合

格式:when () {}

index.less 文件

.mixin(@a) when(lightness(@a) >= 50%) {
    background: black;
}
.mixin(@a) when(lightness(@a) < 50%) {
    background: white;
}
.mixin(@a) {
    color: @a;
}
.class1 {
    .mixin(#ddd);
}
.class2 {
    .mixin(#555);
}

index.css 文件

  • 自动转义后的 css 文件内容如下
.class1 {
  background: black;
  color: #ddd;
}
.class2 {
  background: white;
  color: #555;
}

2、类型检测函数

检测值的类型

  • iscolor
  • isnumber
  • isstring
  • iskeyword
  • isurl

index.less 文件

.mixin(@a:#fff; @b:0) when(isNumber(@b)) {
    color: @a;
    font-size: @b;
}
.mixin(@a, @b:black) when (isColor(@b)) {
    font-size: @a;
    color: @b;
}
.class {
    .mixin(#666)
}

index.css 文件

  • 自动转义后的 css 文件内容如下
.class {
  color: #666;
  font-size: 0;
  font-size: #666;
  color: black;
}

3、单位检测函数

检测一个值除了数字是否是一个特定的单位

  • ispixel:px
  • ispercentage:%
  • isem:em
  • isunit:int

index.less 文件

.mixin(@a) when(ispixel(@a)) {
    width: @a;
}
.class {
    .mixin(960px);
}

index.css 文件

  • 自动转义后的 css 文件内容如下
.class {
  width: 960px;
}

四、函数

示例:color() 函数,解析颜色,将代表颜色的字符串转换为颜色值

index.less 文件

body {
    color: color("#f60");
    background: color("red");
}

index.css 文件

  • 自动转义后的 css 文件内容如下
body {
  color: #f60;
  background: #ff0000;
}

五、写在最后

Less 官网链接

Less 入门到此结束,这些已经可以应对基本的开发。

如果你想学习更多内容,那么推荐去 Less 官网进行深入学习。

相关文章
|
7月前
|
Java API
使用Lambda表达式实现函数映射和过滤
使用Lambda表达式实现函数映射和过滤
48 1
|
8月前
|
C++
【C++】istream类型对象转换为逻辑条件判断值
【C++】istream类型对象转换为逻辑条件判断值
【C++】istream类型对象转换为逻辑条件判断值
|
8月前
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
|
8月前
|
JavaScript
函数形状有几种定义方式;操作符infer的作用
函数形状有几种定义方式;操作符infer的作用
55 3
|
存储 Linux Python
Python 教程之变量(1)—— 变量、表达式、条件和函数
Python 教程之变量(1)—— 变量、表达式、条件和函数
85 0
|
JSON 程序员 数据格式
优雅地处理Python中的条件分支:字典映射、函数组合与match-case语句
在本文中,我们探讨了如何在Python中优雅地处理条件分支,以避免使用过多的if语句。文章介绍了两种解决方案:字典映射与函数组合以及Python 3.10中引入的match-case语句。这些方法使得代码结构更加清晰、简洁且易于维护和扩展。
137 0
|
数据库
机房重构—在应使用条件的上下文(在 ‘where‘ 附近)中指定了非布尔类型的表达式
在应使用条件的上下文(在 ‘where‘ 附近)中指定了非布尔类型的表达式
264 0
#PY小贴士# for 循环定义的变量,循环外可以用吗?
我们知道,在 python 中要获取一个变量的值,必须是先给它赋值过,不然就是未定义。那么这个 i,代码中没有显式的赋值,在循环体之外还可以用吗?
|
前端开发
Less预处理——变量和嵌套
Less预处理——变量和嵌套
150 0
|
前端开发
浅聊组合函数
经历过一些列的函数式编程思想的学习总结,一些重要的高阶函数的学习,以及前一段时间关于 RxJS 的学习。