Less预处理——混合方法

简介: Less预处理——混合方法

一、混合方法

1、无参数方法

方法即为声明的集合,使用时直接键入名称

备注:.card 与 .card() 是等价的。为了避免代码混淆,建议写成如下形式

index.less 文件

.card() {
    background: yellow;
    box-shadow: 0 1px 2px rgba(100, 110, 125, 0.25);
}
#wrap {
    .card();
}

index.css 文件

  • 自动转义后的 css 文件内容如下
#wrap {
  background: yellow;
  box-shadow: 0 1px 2px rgba(100, 110, 125, 0.25);
}

2、默认参数方法

Less 可以使用默认参数,如果没有传参数,那么将使用默认参数

@arguments 类似于 JS 中的 arguments 指代的是 全部参数

传的参数中 必须带着单位

index.less 文件

.border(@a:10px; @b:20px; @c:30px; @color: skyblue) {
    border: solid 1px @color;
    // @arguments 指代传进来的全部参数
    box-shadow: @arguments;
}
#wrap {
    .border();
}

index.css 文件

  • 自动转义后的 css 文件内容如下
#wrap {
  border: solid 1px skyblue;
  box-shadow: 10px 20px 30px skyblue;
}

3、方法的匹配模式

与面向对象中的多态类似

示例:

  • 第一个参数 left 要会找到方法中 匹配程度最高的,如果匹配程度相同,将全部选择,并存在样式覆盖替换
  • 如果匹配的参数是变量,则将会匹配,如 @_

index.less 文件

.triangle(right, @width: 20px, @color: #ccc) {
    border-color: transparent @color transparent transparent;
}
.triangle(left, @width: 20px, @color: #ccc) {
    border-color: transparent transparent transparent @color;
}
.triangle(@_, @width: 20px, @color: #ccc) {
    border-style: solid;
    border: @width;
}
// 进行匹配,命中第二个,然后更新一些样式
#main {
    .triangle(left, 50px, #666)
}

index.css 文件

  • 自动转义后的 css 文件内容如下
#main {
  border-color: transparent transparent transparent #666;
  border-style: solid;
  border: 50px;
}

4、方法的命名空间

让方法更加规范

说明:

  • 在 CSS 中 > 选择器,选择的是儿子元素,就是必须与父元素有直接血缘的元素
  • 在引入命名空间时,如使用 > 选择器,父元素不能加括号
  • 不得单独使用命名空间的方法,必须先引入命名空间,才能使用其中方法
  • 子方法,可以使用上一层传进来的方法
  • index.less 文件
// 方法的命名空间
#card() {
    background: pink;
    .d(@w:300px) {
        width: @w;
        #a(@h: 300px) {
            height: @h;
        }
    }
}
// 父级方法 使用了 >, 不需要括号
#wrap {
    #card > .d > #a(100px);
}
#main {
    #card .d();
}
#top {
    #card;
    .d(100px;);
}

index.css 文件

  • 自动转义后的 css 文件内容如下
#wrap {
  height: 100px;
}
#main {
  width: 300px;
}
#top {
  background: pink;
  width: 100px;
}

5、方法的条件筛选

在 Less 中没有 if else,但它有 when

看看是否符合限制的条件

index.less 文件

#card {
    // when &&
    .border(@width, @color, @style) when (@width > 100px) and (@color=#ccc) {
        border: @style @color @width;
    }
    // when not
    .background(@color) when not (@color >= #111) {
        background: @color;
    }
    // , 逗号分隔符方法 ||
    .font(@size: 20px) when (@size > 100px), (@size < 50px) {
        font-size: @size;
    }
}
#main {
    #card > .border(500px, #ccc, solid);
    #card > .background(#222);
    #card > .font(10px);
}

index.css 文件

  • 自动转义后的 css 文件内容如下
#main {
  border: solid #ccc 500px;
  background: #222;
  font-size: 10px;
}

6、数量不定的参数

方法接受数量不定的参数,可以使用 ...

index.less 文件

.boxShadow(...) {
    box-shadow: @arguments;
}
.textShadow(@a, ...) {
    text-shadow: @arguments;
}
#main {
    .boxShadow(1px, 2px, 5px, #520);
    .textShadow(1px, 2px, 5px, #1314);
}

index.css 文件

  • 自动转义后的 css 文件内容如下
#main {
  box-shadow: 1px 2px 5px #520;
  text-shadow: 1px 2px 5px #1314;
}

7、使用 !important

index.less 文件

.border() {
    border: 1px solid #520;
    margin: 20px;
}
#main {
    .border() !important;
}

index.css 文件

自动转义后的 css 文件内容如下

#main {
  border: 1px solid #520 !important;
  margin: 20px !important;
}

8、循环方法

Less 没有提供 for 循环,但可以通过递归去实现

index.less 文件

.generate-columns(4);
.generate-columns(@n, @i:1) when (@i <= @n) {
    .columns-@{i} {
        width: (@i*100%/@n);
    }
    .generate-columns(@n, (@i+1));
}

index.css 文件

  • 自动转义后的 css 文件内容如下
.columns-1 {
  width: 25%;
}
.columns-2 {
  width: 50%;
}
.columns-3 {
  width: 75%;
}
.columns-4 {
  width: 100%;
}

9、属性拼接方法

+_ 代表的是空格

+ 代表的是逗号

index.less 文件

// + 表示 ,
.boxShadow() {
    box-shadow+: inset 0 0 10px #ccc;
}
#main {
    .boxShadow();
    box-shadow+: 0 0 20px #666;
}
// +_ 表示 空格
.Animation() {
    transform+_: scale(2);
}
.main {
    .Animation();
    transform+_: rotate(15deg);
}

index.css 文件

  • 自动转义后的 css 文件内容如下
#main {
  box-shadow: inset 0 0 10px #ccc, 0 0 20px #666;
}
.main {
  transform: scale(2) rotate(15deg);
}

10、实战小技巧

计算平均值

index.less 文件

.average(@x, @y) {
    @average: ((@x + @y) / 2)
}
div {
    .average(16px, 50px);
    padding: @average;
}

index.css 文件

  • 自动转义后的 css 文件内容如下
div {
  padding: 33px;
}


相关文章
|
8月前
|
编译器 程序员 Linux
C++系列九:预处理功能
C++系列九:预处理功能
|
2月前
|
机器学习/深度学习 计算机视觉 Python
图像数据的特征提取与预处理方法,涵盖图像数据的特点、主要的特征提取技术
本文深入探讨了图像数据的特征提取与预处理方法,涵盖图像数据的特点、主要的特征提取技术(如颜色、纹理、形状特征)及预处理步骤(如图像增强、去噪、分割)。同时介绍了Python中常用的OpenCV和Scikit-image库,并提供了代码示例,强调了预处理的重要性及其在提升模型性能中的作用。
228 5
|
7月前
|
编解码 算法 计算机视觉
YOLOv8数据增强预处理方式详解:包括数据增强的作用,数据增强方式与方法
YOLOv8数据增强预处理方式详解:包括数据增强的作用,数据增强方式与方法
|
8月前
|
Linux C语言 Windows
C预处理分析
C预处理分析
48 2
预处理的学习
预处理的学习
61 0
|
PyTorch 算法框架/工具
语义分割数据增强——图像和标注同步增强
其中常见的数据增强方式包括:旋转、垂直翻转、水平翻转、放缩、剪裁、归一化等。
800 0
|
编译器 Linux C语言
深度理解预处理
那么我们就很容易理解为什么条件编译也是很重要了。其实在我们日常使用的头文件中有大量的条件编译,例如最常用的stdio.h,这个文件在你的电脑中一定是有的,可以去翻翻看一下。
深度理解预处理
|
JSON 算法 数据格式
优化cv2.findContours()函数提取的目标边界点,使语义分割进行远监督辅助标注
可以看到cv2.findContours()函数可以将目标的所有边界点都进行导出来,但是他的点存在一个问题,太过密集,如果我们想将语义分割的结果重新导出成labelme格式的json文件进行修正时,这就会存在点太密集没有办法进行修改,这里展示一个示例:没有对导出的结果进行修正,在labelme中的效果图。
245 0
|
机器学习/深度学习 算法
在对数据进行预处理时,怎样处理类别型特征?
在对数据进行预处理时,怎样处理类别型特征?
|
机器学习/深度学习 固态存储 数据处理
【目标检测之数据集预处理】继承Dataset定义自己的数据集【附代码】(上)
在深度学习训练中,除了设计有效的卷积神经网络框架外,更重要的是数据的处理。在训练之前需要对训练数据进行预处理。比如在目标检测网络训练中,首先需要划分训练集和测试集,然后对标签、边界框等进行处理后才能送入网络进行训练,本文章以VOC数据集格式为例,对数据集进行预处理后送入目标检测网络进行训练。【附代码】
359 0
【目标检测之数据集预处理】继承Dataset定义自己的数据集【附代码】(上)