Less 使用介绍

2023-11-07

1. 相关网站

2. Less是什么

  • Less 是一种 CSS 预处理语言. 其在 CSS 的基础上, 增加了变量, Mixin, 函数等特性. 增加了 CSS 的可维护可重用性.
  • Less 需要 node.js 的支持. 可运行于 Node 或 浏览器端.

3. Less2CSS

  1. 安装 node.js

  2. 使用 node.js 中的 npm 安装 less.

    npm install -g less
    
  3. 使用 lessc, less 文件编译为 css 文件

    lessc style.less style.css
    

4. Less比CSS多出的特性

  • 转义语法为 ~"待转义字符"

4.1. Less导入其他文件

  • 使用 @import 伪指令导入其他 less 文件. 可出现在文件任意位置.
    • 如果 import 的文件后缀是 css, 则导入的内容被视为 css, 不作编译处理.
    • 如果 import 的文件后缀是其他, 都将视为 less 文件导入.
  • import 支持各种导入选项. 选项写在()中, 多个选项之间使用,分割.
    • (reference): 使用一个 less 作为参考, 不输出它本身.
    • (inline): 将 css 直接不作处理的复制到输出 css 文件中.
    • (less): 指定导入为 less 文件, 而不看文件后缀.
    • (css): 指定导入为 css 文件, 而不看文件后缀.
    • (once): 只导入一次该文件.
    • (multiple): 多次导入文件.
    • (optional): 即使找不到要导入的文件, 也仍然会继续编译.
//-------------- importA.less -------------
.Label {
    background-color: red;
    color: black;
}

//-------------- test.less -------------
@import (reference) "./importA.less";
//@import (inline) "./test.css";

#Wgt {
    .Label();
}

//-------------- test.css -------------
#Wgt {
  background-color: red;
  color: black;
}

4.2. 嵌套规则

  • 在嵌套中, 可使用&表示其所有父选择器.

类似于其他语言的作用域, 实现各选择器的嵌套

MainWindow {
    color: white;
    h1 {
        color: red;
    }
    #MyBtn{
        &:hover {
            color: blue;
        }
        &_1 {
            color: yellow;
        }
    }
}

//--------- 生成的 CSS ----------
MainWindow {
  color: white;
}
MainWindow h1 {
  color: red;
}
MainWindow #MyBtn:hover {
  color: blue;
}
MainWindow #MyBtn_1 {
  color: yellow;
}

4.3. 算术运算符

  • 支持 +, -, *, / 运算符
  • 可作用于 数字, 颜色, 变量
@nSize: 10px;

h1 {
    padding: @nSize + 5  @nSize - 5  @nSize * 5 @nSize / 3;
}

//--------- 生成的 CSS ----------
h1 {
  padding: 15px 5px 50px 3.33333333px;
}

4.4. 变量

  • 变量中可存储 值, css.

注意: 它的变量更像是其他语言的常量, 因为它只能被定义一次.

@mainColor: #ffffff;

.pre {
    background-color: @mainColor;
    color: @mainColor + #111;
}
//--------- 生成的 CSS ----------
.pre {
  background-color: #ffffff;
  color: #ffffff;
}

@var: {
    font-family: "Comic Sans MS";
    background-color: #AA86EE;

    .MyClass {
        color: red;
    }
};
// 调用
#PushButton {
    @var();
}
//--------- 生成的 CSS ----------
#PushButton {
  font-family: "Comic Sans MS";
  background-color: #AA86EE;
}
#PushButton .MyClass {
  color: red;
}

4.5. 可供调用的函数

4.6. Mixins混合

  • 类似于其他编程语言中的函数, 将一组 CSS 封装起来, 并可以提供参数.
  • 其功能为: 按照各条件和参数, 输出指定 css.
  • 因为没有条件语句, 可使用保护的命名空间来模拟该语法功能. 只有在条件返回为真时才使用.
  • 可使用 ! important 关键字来覆盖特定属性.
  • 声明混合: 可使用类选择器id选择器用和使用正常CSS一样的方式来声明.
  • 带参数
    • 参数之间使用 ;, 分割(建议使用;). 且该部分样式只在调用处展开.
    • 参数可提供默认形参, 实参传入的时候尽量使用名字指定具体参数, 而不使用位置指定.
    • 使用 @参数名 表示参数.
    • 使用 @{参数名}~"" 配合, 实现字符串替换.
    • @arguments 表示使用所有参数
// 可使用 . 和 # 选择器, 定义 mixin
// 无参数 mixin 会在定义处展开
.Label {
    margin: 0px 0px 0px 0px;
}
// 带参数时, 推荐使用 ; 分割各参数
// 带参数 mixin, 不会在定义处展开
.BorderCss(@borderW; @borderStyle; @borderCol) {
    // @arguments 表示顺序使用所有参数
    border: @arguments;
    border-left-color: @borderCol;
}
#WgtCSS(@objName; @width; @height)
{
    @{objName} {
        width: @width;
        height: @height + 2px;
    }
}
// 使用
.MyWgt {
    .Label();   // ()可省略 

    padding-left: 5px;
    padding-right: 5px;
    .BorderCss(@borderW: 2px; @borderStyle: bold; 
    @borderCol: red);

    // ~" " 表示转义, 不对 #BtnA 作解析
    #WgtCSS(@objName: ~"#BtnA"; @width:10px; @height:5px);
}

//--------- 生成的 CSS ----------
.Label {
  margin: 0px 0px 0px 0px;
}
.MyWgt {
  margin: 0px 0px 0px 0px;
  padding-left: 5px;
  padding-right: 5px;
  border: 2px bold red;
  border-left-color: red;
}
.MyWgt #BtnA {
  width: 10px;
  height: 7px;
}

4.6.1. Mixin中可包含的内容

  • 可包含普通 CSS 语法.
  • 可定义变量. 说的是可在 Mixin 中定义变量. 其中的变量会在调用 Mixin 处展开.
    • 变量存在作用域. 当调用 Mixin 时存在同名变量时, 在调用者中包含的变量优先级最高.
  • 可定义 Mixin.
.WidgetMixin(@col) {
    color: @col;
    // 定义 Mixin
    .BorderMixin(@borderW; @borderCol) {
        border: @borderW solid @borderCol;
    }
    // 定义 变量
    @bkCol: @col + #888;
}
// 调用
#MyWgt {
    .WidgetMixin(@col: red);
    // 调用了 WidgetMixin 后, .BorderMixin 和 @bkCol 就都包含在其中了
    .BorderMixin(@borderCol: black; @borderW: 10px);
    background-color: @bkCol;
}
//--------- 生成的 CSS ----------
#MyWgt {
  color: red;
  border: 10px solid black;
  background-color: #ff8888;
}

4.6.2. 可变数量参数

  • 可使用 ... 表示可变数量参数.
  • 可使用 @rest... 变量表示剩余的参数.
// 使用 ...
.BorderCSS(...){
    border: @arguments;
}
// 使用 @rest...
.BorderCSS_1(@col; @rest...) {
    color: @col;
    border: @rest;
}

#MyWgt {
    .BorderCSS(1px; solid; red);
}

#MyWgt_1 {
    .BorderCSS_1(@col: blue; @rest: 2px solid black);
}
//--------- 生成的 CSS ----------
#MyWgt {
  border: 1px solid red;
}
#MyWgt_1 {
  color: blue;
  border: 2px solid black;
}

4.6.3. 模式匹配

  • 可根据不同的参数个数, 匹配不同的 mixin.

用于规定一定的条件, 符合条件则展开

// 只能匹配第一个参数为 blueSkin 的调用
.ButtonCss(blueSkin, @bkCol) {
    background-color: darken(@bkCol, 10%);
    color: white;
}
.ButtonCss(whiteSkin, @bkCol) {
    background-color: lighten(@bkCol, 10%);
    color: black;
}
// @_ 可匹配任何值
.ButtonCss(@_, @bkCol) {
    padding: none;
}
//调用
@crtSkin: whiteSkin;
#MyButton {
    .ButtonCss(@crtSkin, @bkCol: #888);
}

//--------- 生成的 CSS ----------
#MyButton {
  background-color: #a2a2a2;
  color: black;
  padding: none;
}

4.7. 条件判断

  • 没有 if/else 语法, 而是使用 Guards. 用于执行指定匹配的 mixin.
  • 比较运算符: <, >, <=, >=, =.
    • = 可用于比较数字, 字符串, 标识符等.
    • 其他只能用于比较数字.
  • 逻辑运算符: when, and表示与, ,表示或, not非.
  • 类型检查函数:
    • 检查特定类型: iscolor(), isnumber(), isstring(), iskeyword(), isurl().
    • 检查特定单位: ispixel(), ispercentage(), isem(), isunit().
  • default() 表示 条件语句中的 else, switch 语句中的 default.
// [1] and 为 &&, not 为 !
.mixin(@skin; @col) when (@skin = "blue") and (not (@col = red))
{
    color: blue;
    background-color: white;
}
// [2] , 为 ||
.mixin(@skin; @col) when (@skin = "red"), (iscolor(@col))
{
    color: red;
    background-color: black; 
}
.TempMixin(@w) when (@w < 10px)
{
    padding-left: @w;
}
.TempMixin(@w) when (@w = 10px)
{
    padding-right: @w;
}
// default()
.TempMixin(@w) when (default())
{
    padding-bottom: @w;
}
// 使用
#Wgt {
    // 符合 [1] 和 [2] 的条件
    .mixin(@skin:"blue"; @col: black);

    // 符合 default() 条件
    .TempMixin(12px);
}
//--------- 生成的 CSS ----------
#Wgt {
  color: blue;
  background-color: white;

  color: red;
  background-color: black;

  padding-bottom: 12px;
}

4.8. 循环

  • Less 的循环使用 递归 来实现
.generate-columns(@n, @i: 1) when (@i =< @n) {
    .column-@{i} {
        width: (@i * 100% / @n);
    }
    // 递归调用
    .generate-columns(@n, (@i + 1));
}
// 调用
.generate-columns(4);
//--------- 生成的 CSS ----------
.column-1 {
  width: 25%;
}
.column-2 {
  width: 50%;
}
.column-3 {
  width: 75%;
}
.column-4 {
  width: 100%;
}

4.9. 合并merge

  • 在一般 css 属性后, 增加 ++_, 来实现相同属性的值合并.
    • +: 使用 , 合并各部分的值.
    • +_: 使用 空格合并各部分的值.
#MyButton {
    // +_ 使用 空格 合并
    padding+_: 10px;
    padding+_: 5px;

    // + 使用 , 合并
    margin+: 10px;
    margin+: 5px;
}
//--------- 生成的 CSS ----------
#MyButton {
  padding: 10px 5px;
  margin: 10px, 5px;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Less 使用介绍 的相关文章

  • 动态改变无点参数

    我想在数据库中存储 less 参数 一个示例用例可能是每个用户根据他或她的偏好更改颜色 我认为最好的方法是解析所有 less 文件以获取参数 然后用户可以设置参数 这些参数将保存在针对用户的数据库中 当请求 less 文件时 处理程序重载可
  • 在 LESS 中生成供应商前缀

    我已经将这种方法拼凑在一起 使用 LESS 生成供应商前缀的属性和动画 首先是一些工厂函数 vendorprefix property value webkit property value moz property value ms pr
  • 使用 LESS mixin 添加供应商前缀

    我收到此混合的语法错误 vendors statement statement moz statement webkit statement 任何方法都可以做到这一点 或者混合变量必须位于 a 的右侧 从 Less v2 开始 你可以使用自
  • 如何使用 Bower 作为包管理器获取 Less v.2.0.0 的 Rhino 版本

    我正在使用 less js 的 Rhino 版本 使用 Bower 将其提取到我的开发环境中 在 1 7 5 下 一切正常 bower 将获得所有不同的版本 Node 和 Rhino 版本都将存储在我的环境中 最近更新到 2 0 0 后 似
  • 将 less 字符串传递给 less.js 并接收 css?

    less js中有一个函数可以传递一串less代码并返回css代码吗 我希望创建一个实时的 less 编辑环境 这样用户可以编辑 less 字符串 我可以重新编译它并显示 css 我看到有一个php解决方案 http leafo net l
  • 通过 less 生成 CSS 组

    是否能够创建这样一个生成CSS组的mixin 我将在下面解释我的意思 fancymixin max prefix content what I don t know how to code fancymixin 10 x 它会生成类似以下内
  • wp_enqueue_style 和 rel 除了样式表之外?

    我创建 或者更好地尝试 使用 Less 创建我的第一个 WordPress 主题 我所做的就是在我的functions php中使用这样的脚本 wp register style screen css get bloginfo templa
  • 在 Less 中组合多个“转换”条目

    我有两个 mixin 它们都转换为 webkit transform rotate deg webkit transform rotate deg scale factor webkit transform scale factor 当我一
  • Netbeans 7.4 - 排除 LESS 部分源文件编译为 css

    这主要是一个令人讨厌的问题 在我的 css 目录中造成混乱 我想知道在 Netbeans 7 4 或 8 0 beta 中是否有任何方法可以将 LESS 文件标记为在运行 保存时不进行编译 我有一个library less和vars les
  • SASS 或 LESS 关键帧百分比循环

    我正在测试一些特殊的东西 我正在尝试在关键帧内循环以动态地将百分比写入其中 我已经用 SASS 测试过类似的东西 但它不起作用 keyframes test for i from 0 through 100 i do special stu
  • Webpack 2 的语义 UI 问题

    一直在努力使用 Webpack 2 进行语义 ui 设置 我遇到了一些与默认语义 ui 主题中的字体相关的错误 以及另一个关于image webpack loader ERROR in css loader lessPlugins opti
  • lessc:未找到命令

    我使用的是 OS X 8 并且是 Node LESS 的新手 我以为我之前安装了 lessc 当我转到 usr local bin 时 我看到了 lessc 但对于我的生活来说 我无法运行它 每当我运行它时 我都会看到 bash lessc
  • 如何使用 Antd / Less 和 Sass / CSS 模块配置 Next.js

    我想用Next js https nextjs org 带有 Sass 和 CSS 模块但也想使用蚂蚁设计 https ant design 并希望对较小的建筑尺寸使用 Less 样式 我可以启用 CSS 模块或 Less 加载器 但不能同
  • ubuntu 的 CSS 更少(并且自动编译)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我尝试过 simples 但现在 l
  • 更少的编译错误

    我正在使用 Incident57 的 CodeKit 预处理器来编译一系列 less 文件 这些文件将被导入并缩小为一个名为 template css 的 CSS 文件 然而 在进行一些编辑后 我不知道是什么编辑导致了这个 我开始得到non
  • 动画持续时间不准确

    我在 SVG 中创建了加载微调器 但动画持续时间不准确 例如 30 秒动画持续时间 实际 26 秒 动画持续时间 45 秒 实际持续时间 38 秒 60 秒动画持续时间 实际 51 秒 我很绝望 不知道哪里可能出错 你能帮助我吗 1 旋转器
  • 我可以覆盖调用范围中的全局变量吗

    我需要覆盖 mixin 中使用的一些全局变量 但是我不愿意只改变全局空间中的变量 那么就不会被覆盖 考虑这个给定的 mixin 以及定义的所需变量 Mixin and adjust the regular image class thumb
  • 如何在编译引导程序时修复较少的错误?

    附件是编译时使用的跟踪grunt dist webmaker Anils MacBook Pro bootstrap anil grunt dist Running clean dist clean task Running less co
  • 如何在没有@import的情况下减少@import?

    我用的较少 从 Google PageSpeed 我了解到 使用 importCSS 文件中的内容会影响网站速度 所以我想排除任何 import来自我的 CSS 的东西 我有 2 个不同的样式表reset css and rebuild c
  • LESS:最好使用继承或多个类

    我有一个 LESS 文件 其中包含inputbase 班级 我经常使用它 但不是每种输入类型 当我编译时 输出的 CSS 文件中有很多重复的样式 我研究了 bootstrap 如何在他们的网格中使用 LESS 他们使用了相同的方法 在哪里c

随机推荐

  • php提取css生成单独文件,webapck将css 打包后单独提取到一个css文件中

    webpack4 提倡 一旦用了这个 不能使用style loader 以及css module 安装 npm install save dev mini css extract plugin rules rules test css us
  • SQLServer 中实现类似MySQL中的group_concat()函数的功能

    SQLServer中没有MySQL中的group concat函数 可以把分组的数据连接在一起 后在网上查找 找到了可以实现此功能的方法 特此记录下 SELECT a stuff SELECT b FROM tb WHERE a t a F
  • STM32 USB_SPI_FLASH 简易U盘设计

    这是大三下学期EDA实训的内容 设计制作了一个简易的U盘 主要涉及STM32单片机 W25Q128闪存芯片 电路板绘制 文件系统移植等内容 发布出来供大家参考 仅供学习交流使用 实验步骤仅供参考 转载请注明原文链接 https blog c
  • java数据传到前端页面_02 前端页面数据传递到后台java

    本文将阐述如何将前端页面数据传递到后台java代码 1 环境约束 win10 64位操作系统 idea2018 1 5 jdk 8u162 windows x64 spring4 2 4 前提约束 操作步骤 基本类型传输 RequestMa
  • Android使用AES加解密

    AES为对称加密 加解密用一套秘钥 秘钥自己随便定义 长度必须为16 或 32 个字符 1 AES工具类 AES 对称加密算法 加解密工具类 RequiresApi api Build VERSION CODES KITKAT public
  • getline()与get()

    1 getline getline 函数读取整行 通过换行符来确定输入结尾 然后丢弃换行符 1 作为istream中的类方法 char name 20 cin getline name 20 把一行读入到name数组中 这行字符不超过19个
  • python opencv 同窗口显示多个图像

    为了便于比对图像处理前后的效果 特别是算法处理前后的效果图 我们需要同时显示多张图片 这里采用opencv图像拼接的方法来实现我们想要的效果 1 定义函数show multi img 定义图片显示函数show multi img 共包括5参
  • Android:Serializable和Parcelable的持久化保存

    转自 https www cnblogs com duoshou articles 8856111 html 前言 Serializable和Parcelable能够将对象序列化 使之能够在一些特殊场景中进行传输 再进行数据的恢复 Seri
  • uhd驱动安装(usrpB210,usrpX310等)

    sdr技术与设备介绍 参考博文地址 上述博文介绍了什么是SDR技术 以及sdr设备的分类应用 问题描述 使用sdr设备 usrpx系列 usrpb系列 的准备 驱动 镜像 方案一 推荐方案 资源下载地址 一个UHD源码 一个UHD对应的镜像
  • 华灯初上

    华灯初上老城楼 将军夜赏新兜鍪 宝剑久藏不曾试 兵书战策俱成空
  • 大数据技术原理——期末复习spark

    1 Spark的基本概念 RDD DAG Executor 应用 任务 作业 阶段 RDD 是Resillient Distributed Dataset 弹性分布式数据集 的简称 是分布式内存的一个抽象概念 提供了一种高度受限的共享内存模
  • Aspose最版本aspose-words:jdk17:23.6 版本,代码分析心得

    Aspose最版本aspose words jdk17 23 6 版本 代码分析心得 aspose 为收费软件 以下仅仅用于学习技术 请勿做任何商业用途 如果需要请到官网购买正版 本文的逆向分析参考了了博客 https blog csdn
  • CAP定理含义

    分布式系统 Distributed System 最大的难点就是各个节点的状态如何同步 CAP定理就是这方面最基本的定理 也是理解分布式的起点 同时也是 NoSql数据库的基石 一 分布式的三个指标 1 Consistency k n s
  • STM32学习笔记——HC05

    STM32 HAL库 CubeMX串口通讯HC 05 前言 软件及硬件准备 硬件连接 蓝牙模块调试 CubeMX配置 keil软件编写 实验 注意事项 源码及注意事项2023 3 11 前言 我所使用的开发板为STM32F405RG 蓝牙模
  • C++学习(四六二)Parsing of CMake project failed: Connection to CMake server lost.

    环境 Qt5 12 cmake3 12 64位 工程为 原因分析 可能是版本不一致 qt工程为32位 cmake是64位的 将cmake换3 1 32位 就可以了
  • UniCode 下char*转CString ,利用MultiByteToWideChar进行转换,中文乱码的解决方案

    使用A2W A2T这些宏函数是常见的方法 但是中文会乱码 所以采用MultiByteToWideChar进行转换 计算char 数组大小 以字节为单位 一个汉字占两个字节 int charLen strlen sText 计算多字节字符的大
  • C++PrimerPlus 第五章 循环和关系表达式 - 5.1 for循环

    C PrimerPlus 第五章 循环和关系表达式 5 1 for循环 5 1 for循环 5 1 1 for循环的组成部分 5 1 1 1 表达式和语句 5 1 1 2 非表达式和语句 5 1 1 3 修改规则 5 1 2 回到for循环
  • osgEarth的Rex引擎原理分析(五十二)CGCS2000与WGS84坐标系的比较

    目标 四十六 中的119 文章 2000中国大地坐标系及其与WGS84的比较 对此有详细的比较 https max book118 com html 2017 0614 114928909 shtm 结论是 实现上相容的 仅在扁率上有微小差
  • 数据挖掘导论课后习题答案-第三章

    最近在读 Introduction to Data Mining 这本书 发现课后答案只有英文版 于是打算结合自己的理解将答案翻译一下 其中难免有错误 欢迎大家指正和讨论 侵删 第三章 优点 第一 颜色可以很容易地区分不同的部分 第二 看起
  • Less 使用介绍

    1 相关网站 Less 中文网 http lesscss cn W3Cschool Less 教程 https www w3cschool cn less Less 在线编译 https lesstester com 2 Less是什么 L