Less功能介绍和完整使用示例

Less (Leaner Style Sheets) 是一门向后兼容的 CSS 预处理器扩展语言。它允许你使用变量、嵌套规则、Mixin(混入)、函数等编程特性来编写样式代码,最终编译成标准的 CSS 文件供浏览器解析。

以下是 Less 的核心功能介绍及一个完整的实战示例。


🚀 核心功能介绍

1. 变量

将重复使用的值(颜色、字体、尺寸)定义为变量,便于全局维护。

less 复制代码
@primary-color: #4D926F;
@font-size-base: 14px;

.header {
  color: @primary-color;
  font-size: @font-size-base;
}
2. 嵌套规则

模仿 HTML 结构书写 CSS,减少重复选择器,层级关系一目了然。

less 复制代码
.nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }
  li { display: inline-block; }
  a {
    text-decoration: none;
    &:hover { color: @primary-color; } // & 代表父选择器 .nav a
  }
}
3. Mixin(混入)

将一组属性封装起来,在需要时"混入"到其他规则中,支持参数和默认值。

less 复制代码
.border-radius(@radius: 5px) {
  -webkit-border-radius: @radius;
     -moz-border-radius: @radius;
          border-radius: @radius;
}

.button {
  .border-radius(8px); // 调用并传参
  background: @primary-color;
}
4. 运算与函数

支持加减乘除、颜色函数、数学函数等。

less 复制代码
@base-width: 960px;
.sidebar {
  width: @base-width / 3;       // 320px
  color: lighten(@primary-color, 20%); // 颜色变亮20%
}
5. 导入

将样式拆分为多个文件,通过 @import 组织管理。

less 复制代码
@import "variables.less";
@import "mixins.less";
@import "components/button.less";
6. 条件判断与循环(高级)

Less 支持 Guard 条件和递归循环,可实现类似编程的逻辑控制。

less 复制代码
.mixin(@color) when (lightness(@color) >= 50%) {
  background-color: black;
}
.mixin(@color) when (lightness(@color) < 50%) {
  background-color: white;
}

📝 完整使用示例:构建一个卡片组件

下面演示从项目搭建到最终输出的完整流程。

Step 1: 安装 Less
bash 复制代码
# 全局安装
npm install -g less

# 或作为项目依赖
npm install less --save-dev
Step 2: 创建 Less 文件

**variables.less** --- 全局变量

less 复制代码
// variables.less
@color-primary: #3498db;
@color-text: #333333;
@color-bg: #f9f9f9;
@spacing-unit: 8px;
@border-radius: 8px;
@card-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);

**mixins.less** --- 可复用混入

less 复制代码
// mixins.less
.flex-center() {
  display: flex;
  justify-content: center;
  align-items: center;
}

.card-padding(@multiplier: 2) {
  padding: @spacing-unit * @multiplier;
}

**card.less** --- 主样式文件

less 复制代码
// card.less
@import "variables.less";
@import "mixins.less";

.card {
  background: @color-bg;
  border-radius: @border-radius;
  box-shadow: @card-shadow;
  .card-padding(3); // 24px
  max-width: 400px;
  margin: @spacing-unit * 4 auto;

  &__header {
    font-size: 18px;
    color: @color-primary;
    margin-bottom: @spacing-unit * 2;
    border-bottom: 1px solid darken(@color-bg, 10%);
    padding-bottom: @spacing-unit;
  }

  &__body {
    color: @color-text;
    line-height: 1.6;
    font-size: 14px;
  }

  &__footer {
    margin-top: @spacing-unit * 3;
    .flex-center();

    .btn {
      background: @color-primary;
      color: #fff;
      border: none;
      border-radius: @border-radius / 2;
      .card-padding(1.5);
      cursor: pointer;
      transition: background 0.3s ease;

      &:hover {
        background: darken(@color-primary, 15%);
      }
    }
  }
}
Step 3: 编译为 CSS
bash 复制代码
lessc card.less card.css
Step 4: 输出结果 (card.css)
css 复制代码
.card {
  background: #f9f9f9;
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  padding: 24px;
  max-width: 400px;
  margin: 32px auto;
}
.card__header {
  font-size: 18px;
  color: #3498db;
  margin-bottom: 16px;
  border-bottom: 1px solid #e0e0e0;
  padding-bottom: 8px;
}
.card__body {
  color: #333333;
  line-height: 1.6;
  font-size: 14px;
}
.card__footer {
  margin-top: 24px;
  display: flex;
  justify-content: center;
  align-items: center;
}
.card__footer .btn {
  background: #3498db;
  color: #fff;
  border: none;
  border-radius: 4px;
  padding: 12px;
  cursor: pointer;
  transition: background 0.3s ease;
}
.card__footer .btn:hover {
  background: #1a6fb5;
}

⚙️ 常用编译选项速查

命令 说明
lessc input.less output.css 基本编译
lessc -x input.less output.css 压缩输出(生产环境)
lessc --source-map input.less output.css 生成 Source Map(调试用)
lessc --watch input.less output.css 监听文件变化自动编译
lessc --include-path=src/less 指定 @import 搜索路径

💡 最佳实践建议

  1. 命名规范 :变量使用语义化命名(@color-danger 而非 @red),类名推荐 BEM 命名法配合 & 嵌套
  2. 避免过度嵌套 :建议不超过 3-4 层,过深会导致选择器优先级过高难以覆盖
  3. 善用 Mixin 替代重复代码:但不要用 Mixin 模拟继承,保持输出 CSS 简洁
  4. 生产环境务必压缩 :使用 -x 或集成构建工具(Webpack/Vite)的压缩插件
  5. 渐进迁移 :Less 完全兼容标准 CSS,可以将现有 .css 直接改名为 .less 逐步重构

注意 :Less 是编译时预处理,浏览器不直接识别 .less 文件。虽然提供了 less.js 浏览器端实时编译方案,但仅建议用于开发调试,生产环境必须预编译为 CSS。

相关推荐
志尊宝7 小时前
Vue3 零基础每日笔记(071):暗黑模式与主题切换——CSS 变量 + Element Plus 暗黑方案
前端·css·笔记·vue·html·前端开发·软件开发
沫璃染墨8 小时前
《Qt从零入门系列(十三):QSS样式表详解——从选择器与层叠规则到控件美化实战》
开发语言·css·c++·qt·ui·qt6.3·qss
程序员大阳11 小时前
副队长CSS教程(30)–CSS Grid 实战:实现复杂自适应表单布局
前端·css·自适应·grid·表单
程序员大阳18 小时前
副队长CSS教程(29)–CSS Grid 实战:实现通用图文混排布局
前端·css·grid·图文混排
song50120 小时前
React Native for OpenHarmony 实战:三方库 react-native-popup-menu 的鸿蒙化适配指南
css·深度学习·react native·react.js·transformer·harmonyos
溪语流沙1 天前
【每天一个CSS | Day19】流光文字与一笔写成的手写签名
前端·javascript·css
一水鉴天2 天前
统一对象拓扑(UOT)设计全链定稿:从三件事分离到三继承 之1 20261010(豆包“查看聊天内容”继续)
前端·css
song5012 天前
React Native for OpenHarmony 实战:三方库 react-native-css-transformer 的鸿蒙化适配指南
css·人工智能·深度学习·react native·transformer
思码梁田3 天前
CSS transform 转换详解:translate、rotate、scale、skew 与 3D 变换一次讲清
前端·css·transform·skew·scale·translate·rotate
三天不学习3 天前
Tailwind CSS 快速入门(2026 版):从 v4 零配置上手,到「该不该用、怎么用好」的选型实战
前端·css·tailwind