优雅的使用 Less

【AI】使用Cursor和AI编程生成的VUE前端框架 本项目是一个基于VUE.js的前端框架,结合了登录、图形验证码、权限校验等常用功能模块。通过与Cursor AI交互生成的代码,展示了AI在编程中的潜力与效率。 阅读详情

前言

我们在写 CSS 的时候,可能会遇到许许多多的问题。现如今我们可以使用 CSS预处理器 来提高我们的开发效率及开发的舒适度,本文就带大家来聊聊比较流行的 Less 的特点以及使用方法。

一、简介

1. CSS预处理器

CSS 预处理器是一个能让你通过预处理器自己独有的语法来生成CSS的程序。市面上有很多CSS预处理器可供选择,且绝大多数CSS预处理器会增加一些原生CSS不具备的特性,例如代码混合,嵌套选择器,继承选择器等。这些特性让CSS的结构更加具有可读性且易于维护。—— MDN Web Docs

2. Less

Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言。这里呈现的是 Less 的官方文档(中文版),包含了 Less 语言以及利用 JavaScript 开发的用于将 Less 样式转换成 CSS 样式的 Less.js 工具。—— Less 中文网

二、开始使用

1. 在 Node.js 环境中使用

1.1 手动编译

全局安装 Less:

npm i -g less
# or
yarn global add less

# 查看版本,有版本则安装成功
lessc -v
# 成功示例:lessc 4.1.2 (Less Compiler) [JavaScript]

全局安装成功后就可以使用命令行将 .less 文件编译为 .css 文件啦!我们来试一试,新建一个 demo.less 的文件。

@color-theme: #0094ff;

.demo {
    background-color: @color-theme;
}

打开命令行,切换到该文件的目录下,然后输入 lessc demo.less demo.css ,得到编译后的文件 demo.css :

.demo {
  background-color: #0094ff;
}

1.2 在 webpack 中使用

基本步骤:

  1. 安装 less 以及 less-loader
  2. 配置 webpack
  3. 如果是 .vue 文件要在 style 标签上增加属性 lang="less"

安装:

npm i less less-loader --save-dev
# or
yarn add less less-loader --dev

配置 webpack :

// webpack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.less$/i,
        loader: [
          // compiles Less to CSS
          'style-loader',
          'css-loader',
          'less-loader',
        ],
      },
    ],
  },
};

此处附上 webpack 配置文档传送门:less-loader

如果是 Vue.js 的项目则需要增加 style 标签的 lang 属性:

<style lang="less" scoped>
// ...
</style>

2. 在浏览器环境中使用

在 .html 文件的 head 标签内进行引入:

<head>
    <!-- 引入 less -->
    <link rel="stylesheet/less" type="text/css" href="./index.less" />
    <!-- 引入 less.js 核心库 -->
    <script src="//cdnjs.cloudflare.com/ajax/libs/less.js/3.11.1/less.min.js"></script>
</head>

三、用法

1. 变量

1.1 定义及使用

我们可以使用 @ 符号开头定义变量,注意要在结尾处加上分号。

@width: 10px;
@height: @width + 10px;

#header {
    width: @width;
    height: @height;
}

编译后代码:

#header {
    width: 10px;
    height: 20px;
}

实际开发中,我们可以根据不同的类型来命名不同的变量,这样不但便于理解,而且易于维护。

/* ============ 距离 ============ */
@space-large: 36px;
@space-middle: 24px;
@space-small: 12px;
// ...

/* ============ 颜色 ============ */
// 颜色可以说是一个项目中定义最多的变量了,可以单独拆分出一个 less 文件进行维护
@color-theme: #0094ff;
@title-color: #090909;
// ...

1.2 转义

在定义变量时,可以使用任何字符串,在使用时该字符串保持原样输出。

// 定义变量为一个字符串
@min-1024: ~"(min-width: 1024px)";

.element {

    // 在媒体查询处使用该变量
    @media @min-1024 {
        color: skyblue;
    }
}

编译后代码:

@media (min-width: 1024px) {
  .element {
    color: skyblue;
  }
}

1.3 作用域

类似于 JavaScript 中的块级作用域, Less 中同样存在变量的作用域。即有限从最近的作用域下读取变量,换句话说,如果有两个同名变量,那么谁和使用行近谁生效。

// 定义一个同名变量 @color-title
.demo {
    @color-title: pink;

    .item {
        @color-title: skyblue;

        .title {
            color: @color-title; // skyblue
        }
    }
}

编译后代码:

.demo .item .title {
  color: skyblue;
}

1.4 映射

从版本 3.5 起,我们可以定义一组映射值,以提高 Less 代码的可复用性。就像 JavaScript 中的 Object 的键值对一样,可以有多个,互不干扰。

// before
// 定义多个变量
@color-theme: #0094ff;
@color-success: #93dd00;

.status {
    color: @color-theme;

    &.success {
        color: @color-success;
    }
}

// after
// 定义一个映射
#colors() {
    theme: #0094ff;
    success: #93dd00;
}

.status {
    color: #colors[theme];

    &.success {
        color: #colors[success];
    }
}

编译后代码:

.status {
  color: #0094ff;
}

.status.success {
  color: #93dd00;
}

2. 混合

混合即 Mixin ,是一种复用代码的手段。可以将一个类名下的代码块轻易的放入另一个类名之中。我们先来看一下基本用法:

// 一个朴实无华的类名
.bordered {
    border-top: solid 1px #000;
}

#menu a {
    color: #000;
    // 将类名 bordered 中的代码混入,不要忘记结尾的分号
    .bordered(); // 或者写成.bordered;
}

编译后代码:

.bordered {
  border-top: solid 1px #000;
}

#menu a {
  color: #000;
  border-top: solid 1px #000;
}

在实际开发中,我们可以在全局公共样式文件中定义公共类名,在其他组件的私有样式文件中引入并使用。

// src/styles/index.less
// 全局样式文件

// 一些公共类名...
.mg-0-auto {
    margin: 0 auto !important;
}

.text-center {
    text-align: center !important;
}
// src/pages/Demo/index.less
// 某组件私有样式

@import url(@/styles/index.less); // 引入全局公共样式

// 一个自定义类名
.demo {
    background-color: #fff;
    // 使用混合,不要忘记结尾的分号
    .mg-0-auto();
    .text-center();
}

3. 嵌套

3.1 使用嵌套

Less 允许把具有层级关系的类名/选择器进行嵌套使用,注意需要用花括号进行包裹。

.demo {
    margin: 0 auto;

    .box {
        display: flex;

        .item {
            color: #000;
        }
    }
}

编译后代码:

.demo {
  margin: 0 auto;
}

.demo .box {
  display: flex;
}

.demo .box .item {
  color: #000;
}

3.2 符号 &

使用 & 符号代替父元素。

// before
.box {
    display: flex;

    .item {
        color: #000;
    }

    .item.active {
        color: skyblue;
    }
}

// after
.box {
    display: flex;

    .item {
        color: #000;

        // "&" 代替了父级类名 ".item"
        &.active {
            color: skyblue;
        }
    }
}

3.3 @规则嵌套和冒泡

@ 规则(例如 @media 或 @supports)可以与选择器以相同的方式进行嵌套。@ 规则会被放在前面,同一规则集中的其它元素的相对顺序保持不变。这叫做冒泡(bubbling)。

.component {
    width: 300px;

    @media (min-width: 768px) {
        width: 600px;

        @media (min-resolution: 192dpi) {
            background-color: skyblue;
        }
    }

    @media (min-width: 1280px) {
        width: 800px;
    }
}

编译后代码:

.component {
  width: 300px;
}

@media (min-width: 768px) {
  .component {
    width: 600px;
  }
}

@media (min-width: 768px) and (min-resolution: 192dpi) {
  .component {
    background-color: skyblue;
  }
}

@media (min-width: 1280px) {
  .component {
    width: 800px;
  }
}

美中不足的是每一个类名都会单独编译出一个@media,多个相同条件的媒体查询不会进行合并。

4. 运算

算术运算符 +、-、*、/ 可以对任何数字、颜色或变量进行运算。如果可能的话,算术运算符在加、减或比较之前会进行单位换算。

// 所有操作数被转换成相同的单位
@conversion-1: 5cm + 10mm; // 结果是 6cm
@conversion-2: 2 - 3cm - 5mm; // 结果是 -1.5cm
@incompatible-units: 2 + 5px - 3cm; // 结果是 4px
@base: 10%;
@filler: @base * 2; // 结果是 20%
@other: @base + @filler; // 结果是 30%

5. 函数

Less 内置了多种函数用于转换颜色、处理字符串、算术运算等。下面列举一些常用的函数,完整版请移步官网的《Less 函数手册》。

  • 逻辑函数
    • if 根据表达式返回不同结果
    • boolean 存储一个布尔值,用于 if 判断
  • 字符串函数
    • escape 将URL 编码应用于输入字符串中的特殊字符
    • replace 替换字符串中的文本
  • 数学函数
    • ceil 向上舍入到下一个最高整数
    • floor 向下舍入到下一个最小整数
    • percentage 将浮点数转换为百分比字符串
    • sqrt 计算一个数的平方根。保持单位不变
    • abs 计算一个数的绝对值。保持单位不变
    • min 返回一个或多个值中的最小值
    • max 返回一个或多个值中的最大值

6. 注释

我们可以在 less 中使用单行注释和多行注释,其中但行注释不会被编译到 CSS 中去。

// 普通注释,不会被编译到 CSS 中

/*
 多行注释,会被编译到 CSS 中
*/

编译后代码:

/*
 多行注释,会被编译到 CSS 中
*/

7. 导入

我们可以在一个 less 文件中引入其他的 less 文件,引入后就可以使用被引入文件的变量和映射。一般在一个 less 文件的最顶部进行引入。

// 可以这样引入
@import url(a.less);

// 或者这样引入
@import 'b.less';

// 当然也可以引入 CSS 文件
@import 'style.css';

参考资料

MAIXCAM无线连接实战:5分钟搞定远程调试与代码烧录(避坑版) 本文提供了一份详细的MAIXCAM无线连接实战指南,帮助嵌入式视觉开发者快速配置远程调试与代码烧录。文章重点介绍了通过MaixHub IDE进行Wi-Fi配置、建立远程终端连接、使用SFTP进行文件传输以及管理自启动应用程序的完整流程,并针对IP地址变动、信号中断等常见问题提供了实用的避坑解决方案,旨在提升开发效率与灵活性。 阅读详情

相关推荐

ThinkPHP+Layui开发的ERP管理系统

ERP采购生产销售系统,一款基于ThinkPHP+Layui开发的ERP管理系统,帮助中小企业实现ERP管理规范化,此系统能为你解决五大方面的经营问题:1.采购管理 2.销售管理 3.仓库管理 4.资金管理 5.生产管理,适用于:服装鞋帽、化妆品、机械机电、家具装潢、建材行业、快销品、母婴用品、办公用品、汽配汽修、生鲜农贸、手机通讯、数码家电、医药用品、制造业、信息技术服务行业等。提供全部无加密服务端和前端源代码,独立部署,不受限制。

u011092458的博客 788

【Less】的世界,你知道吗?

什么是LESS?LESS是一个CSS预处理器,可以为网站启用可自定义,可管理和可重用的样式表。LESS是一种动态样式表语言,扩展了CSS的功能。LESS也是跨浏览器友好。CSS预处理器是一种脚本语言,可扩展CSS并将其编译为常规CSS语法,以便可以通过Web浏览器读取。它提供诸如变量,函数, mixins 和操作等功能,可以构建动态CSS。 一、Less 使用初体验 1. 使用 Less 写样式 使用 Npm 全局安装 Less $ npm install less -g ...

不是对你没感觉,是你没开保时捷 349

VisionPro九点标定实战:从相机拍照到机器人精准抓取的完整流程

本文详细介绍了VisionPro九点标定技术在工业自动化中的应用,从相机拍照到机器人精准抓取的完整流程。通过硬件配置、标定步骤和实战技巧的解析,帮助工程师实现高精度视觉引导系统,提升生产效率。特别适合需要解决二维图像坐标与物理空间转换问题的自动化项目。

weixin_30664051的博客 406

数据赋值

// this.categories = res.data; this.model=Object.assign({},this.model,res.data) 使用第一种赋值方法会吧服务端返回数据覆盖 res.data会影响到现用数据 第二种方法-this.model+res.data

weixin_49373330的博客 598

Windows server Database 2025 安装 i225/i226 网卡驱动

Windows server Database 2025 安装 i225/i226 网卡驱动 windows这比坏得很,intel消费级网卡不准在服务器系统上安装。你要说他是异构不支持?他就纯粹恶心人。 之前已经安装过一次,但是今天database预览版一更新,又给我把网卡驱动杀了,气死,写一篇教程。 到这里就完成了,总之还是想辱骂windows,提供便捷的同时又人为制造困难,多少有点(隔壁linux内核直接自带全家桶了就一省心) 并且近年Intel的新U安装显卡驱动和普通声卡驱动都不会出声

低温热源的博客 1万+

Python爬虫实战:股票历史数据抓取与量化回测全流程详解

我们以**东方财富网(eastmoney.com)和雪球网(xueqiu.com)**为主要目标,演示如何爬取A股历史行情。最常用的HTTP请求库,简单易用,适合静态页面数据请求。本文详细介绍了从股票历史数据抓取到简单回测的完整流程,代码示例基于最新技术,结构清晰,适合初学者和进阶者学习量化投资实战。希望对你入门Python爬虫和量化交易有所帮助!

2201_76125261的博客 1781

less和sass复用样式的方式

less可以直接通过class类名来复用,带括号时则不生成该class。sass复用可以通过混入。

qq_42372534的博客 916

Python爬虫实战:如何爬取京东商品评论数据

在本文中,我们介绍了如何使用 Python 爬虫技术爬取京东商品的评论数据。首先,我们分析了京东商品评论的 API 接口和 JSON 数据结构,然后编写了爬虫程序来抓取评论数据,并将数据保存到 CSV 文件中。接着,我们进行了一些基本的数据分析,包括评分分布和简单的情感分析。爬取京东商品评论的数据可以为电商分析、情感分析等提供有价值的信息。你可以在此基础上进行更深入的分析,挖掘更多的商业价值。希望本篇教程能够帮助你了解如何利用 Python 进行电商数据的爬取和分析!

2201_76125261的博客 1647

less类复用

less样式复用

aleluye的博客 1259

管好 SAP Fiori Launchpad Content:技术目录、业务目录与 KPI 工具的完整治理思路

SAP Fiori Launchpad 作为企业级统一入口,需通过技术目录(源对象)和业务目录(引用编排)分层治理。技术目录由 Launchpad App Manager 维护,负责应用描述对象(Tile 和 Target Mapping)的创建与管理;业务目录由 Launchpad Content Manager 编排,通过引用技术目录对象实现灵活配置。分析型内容则通过 F2814 统一管理。这种分层设计支持应用复用,便于升级维护,是 SAP S/4HANA 项目中实现高效内容治理的关键。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 132

Lammps纳米压痕接触面积—Matlab接触面积计算(两种方法)

Lammps纳米压痕接触面积计算

Rockyoung 5449

Less的简单使用

1.定义变量 @color = #DC3545; 2.样式复用 (1) 无参数 .box{ color:@color; font-size:15px; } .layout{ .box; /*复用.box的样式*/ } (2) 带参数 .box(@r:10px){ color:@color; font-size:@r; } .layout{ .box; /*不传入参数默认是10px*/ /* .box(15px); */ } 3. 样式嵌套 .layout{ bac.

ckk727的博客 1260

Python爬虫实战:逆向工程与异步处理攻克Pinterest无限滚动瀑布流

我们将从零开始,逐步分析其数据接口,构建一个功能完整的爬虫,并深入探讨反爬虫策略的应对、性能优化以及数据存储等高级主题。: 在实际爬取中,你需要先访问一次Pinterest主页,获取初始的Cookie和CSRF Token,然后再发起API请求。: Python爬虫,Pinterest,无限滚动,瀑布流,异步IO,httpx,逆向工程,API接口,动态内容,反爬虫。你会很快发现一些关键的请求模式。:页面初始加载有限内容,随着用户滚动,新的图片块通过AJAX动态加载,实现“永无止境”的浏览。

2201_76125261的博客 551

如何优雅的使用less,scss

无需webpack打包也能使用less、sass?

weixin_57098738的博客 257

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

推荐使用:Lesshin – 让您的Less代码更加规范优雅!

推荐使用:Lesshin – 让您的Less代码更加规范优雅! 在前端开发的世界里,代码的质量直接关系到项目维护的难易程度和团队协作的效率。针对Less这一流行的CSS预处理器,一款名为Lesshint的工具应运而生,它旨在帮助开发者编写更干净、更一致的Less代码。 项目介绍 Lesshint是一个强大的Less代码风格检查器,确保你的样式表遵循既定的最佳实践和代码标准。通过这个工具,你可以轻松...

gitblog_01101的博客 680

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

如何在微信小程序中优雅的使用less编写css样式

写惯了less/sass,但是现在开发小程序缺还是css,很不习惯。 在网上搜的教程,要么是 gulp,要么就是 vscode 的Easy-less的插件。 传统方式 Gulp 前者要对于gulp有简单的了解,但是现在大道其行的webpack来说,gulp用的人也越来越少,而且具有一定的学习成本,但好在自定义程度较高,自己可以随便添加take。 VScodd的Esay-less插件 啥都不说,挺香的,直接在vscode安装easy-less插件,然后seting....

JackieDYH的博客 1435

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

如何在不同文件中使用less声明的全局公共变量

1:假设我们有一个全局的less变量文件’./style/variable.less’文件 如果想要在组件样式中使用这些文件,我们需要引入这些文件,但是这样做会带来很多问题,代码冗余,不好维护。 我们迫切需要一种全新的更优雅的方法——sass-resources-loader 该加载器将 less资源自动导入每个所需的 less 模块。 因此,您可以在所有 less 样式中使用共享变量和mixi...

qq_26880461的博客 2662

预编译器less

预编译器less一、预编译器less1.基本原理2.LESS的安装和使用3.LESS的基本使用4.webpack中使用 一、预编译器less 1.基本原理 编写css时,受限于css语言本身,常常难以处理一些问题: 重复的样式值:例如常用颜色、常用尺寸 重复的代码段:例如绝对定位居中、清除浮动 重复的嵌套书写 由于官方迟迟不对css语言本身做出改进,一些第三方机构开始想办法来解决这些问题 其中一种方案,便是预编译器 预编译器的原理很简单,即使用一种更加优雅的方式来书写样式代码,通过一个编译器,将其转换为

xun__xing的博客 1129

【转载】Less

@TOC前言 CSS的短板 作为前端学习者的我们 或多或少都要学些 CSS ,它作为前端开发的三大基石之一,时刻引领着 Web 的发展潮向。 而 CSS 作为一门标记性语言,可能 给初学者第一印象 就是简单易懂,毫无逻辑,不像编程该有的样子。在语法更新时,每当新属性提出,浏览器的兼容又会马上变成绊脚石,可以说 CSS 短板不容忽视。 问题的诞生往往伴随着技术的兴起, 在 Web 发展的这几年, 为...

dandan_222的博客 392

vue 引入外部less_如何优雅的使用VUE? 不可不知的VUE实战技巧

前言在大家都会用vue的时代,我们又如何去区别是新手小白还是资深vue玩家呢? 如何让自己与刚学vue的人拉开差距呢? 其实,很多人对于vue只停留在基础使用。想要提升自己,就应该想办法将其运用到更高的层次。本文会从以下三个方面,来进阶我们对vue的运用能力组件:全局组件注册Render函数:拯救繁乱的templateVue权限控制:高精度全局权限控制1 -「全局组件注册」组...

weixin_32257101的博客 187

VSCode 使用 LESS

代码准备 新建项目选择类型为 LESS,即可创建 LESS 文件(或直接将文件名定为 .less 后缀) test.less @width: 200px; @height: @width / 2; .red-font { color: red; text-align: center; } .yellow-bg { background-color: yellow; } .blue-bg { background-color: blueviolet; } #mydiv { width:

司马懿的西山居 3827

NodeJS旅程 : Less

我一直强调我是个很懒的人,虽然我认为自己是个代码控但不代表我喜欢写大量代码。有做Web前端开发的人一定都接触CSS,由其在当下CSS3更是做出Cool站的必修课。我曾和不少的前端开发讨论过CSS3,我却发现在他们的眼中,CSS3却是一个非常难啃的骨头,平时写CSS3也只能是痛并快乐着。他们人都在说 “能少写一点吗?” 我其实并没有这种感觉,CSS代码量是大,但比起长年写服务端的代码也只不...

weixin_34232744的博客 236

用 SeaJS 玩转 CoffeeScript 和 LESS

[url=http://coffeescript.org/]CoffeeScript[/url] 是一门可以编译成 JavaScript 的语言,语法轻巧优雅,社区非常活跃,是目前玩家最多、最有可能将 JavaScript 变成编译目标语言的新语言。可参考:[url=http://lifesinger.wordpress.com/2011/06/27/javascript-is-dead-long...

岁月如歌 204

如何在Linux下优雅的查询日志

原文地址:https://www.cnblogs.com/Trainoo/p/9218830.html 做为一名合格的Java后台开发 经常需要查询线上的日志,定位线上问题 所以熟练掌握日志查询的命令 可以使你更加迅速的定位错误日志位置,及时解决问题 在此,我将介绍几个自己工作中经常使用到的日志查询命令 大家一起学习讨论,让我们都能更优雅的操作日志 假设你有一个日志文件demo.log,里面的...

lc545126483的博客 398

less心得

心得 在没接触less之前,CSS可能是我最头疼的部分了,因为它往往需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于重用。而且我还要思考怎样写出组织良好且易于维护的CSS代码。与JavaScript,java等语言不同的是,CSS是一门非程序设计语言,没有变量、函数、作用域等概念。所以这对习惯了OOP思想的我来说,看似没有逻辑的代码意味着繁重的体力劳动。 直到我遇到了less,它在CSS...

weixin_30488313的博客 108

CSS预编译器

由于官方迟迟不对css语言本身做出改进,一些第三方机构开始想办法来解决这些问题其中一种方案,便是预编译器预编译器的原理很简单,即使用一种更加优雅的方式来书写样式代码,通过一个编译器,将其转换为可被浏览器识别的传统css代码目前,最流行的预编译器有和,由于它们两者特别相似,因此仅学习一种即可(本课程学习LESS)less官网:http://lesscss.org/less中文文档1(非官方):http://lesscss.cn/

qq_18422039的博客 468
上一篇: 优雅的变量命名
下一篇: 滚动条样式修改
「已注销」
博客等级 码龄5年 12粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值