1. LESS 概述
1.1 核心特性
LESS(Leaner Style Sheets)作为CSS预处理语言,提供以下核心能力:
- 动态变量系统 :使用@符号定义可复用值
- 嵌套规则:直观反映DOM层级结构
- 参数化混合:支持带默认值的可配置样式块
- 运算能力:处理数值、颜色和单位的计算
- 函数库:提供颜色操作、数学计算等实用功能
- 模块化组织 :通过@import实现文件拆分
1.2 环境配置
安装方式
            
            
              bash
              
              
            
          
          npm install -g less编译命令
            
            
              bash
              
              
            
          
          # 基础编译
lessc styles.less styles.css
# 压缩输出
lessc styles.less styles.min.css --clean-css
# 实时监听
less-watch-compiler less css构建工具集成
webpack配置示例:
            
            
              javascript
              
              
            
          
          module.exports = {
  module: {
    rules: [
      {
        test: /\.less$/,
        use: [
          'style-loader',
          'css-loader',
          'less-loader'
        ]
      }
    ]
  }
}2. 核心功能详解
2.1 变量系统
基础定义
            
            
              less
              
              
            
          
          // 颜色变量
@primary: #428bca;
@danger: #d9534f;
// 尺寸变量
@base-padding: 15px;
@border-radius: 4px;
// 字体变量
@font-family-base: "Helvetica Neue", Helvetica, Arial, sans-serif;动态应用
            
            
              less
              
              
            
          
          // 选择器插值
@component: alert;
.@{component} {
  color: @primary;
}
// 属性名插值
@property: color;
.widget {
  @{property}: @primary;
  background-@{property}: #fff;
}2.2 嵌套规则
标准嵌套
            
            
              less
              
              
            
          
          .navbar {
  background-color: @navbar-bg;
  
  .nav-item {
    padding: @base-padding;
    
    > a {
      color: @navbar-text;
    }
  }
}父选择器引用
            
            
              less
              
              
            
          
          .btn {
  &-primary {
    background: @primary;
  }
  
  &:hover {
    opacity: 0.9;
  }
  
  .disabled & {
    opacity: 0.5;
  }
}2.3 混合功能
基础混合
            
            
              less
              
              
            
          
          .border-radius(@radius: 4px) {
  border-radius: @radius;
  -webkit-border-radius: @radius;
}
.box-shadow(@x: 0, @y: 1px, @blur: 3px, @color: rgba(0,0,0,.1)) {
  box-shadow: @arguments;
}条件混合
            
            
              less
              
              
            
          
          .text-contrast(@color) when (lightness(@color) > 50% {
  color: #000;
}
.text-contrast(@color) when (lightness(@color) <= 50% {
  color: #fff;
}2.4 运算系统
数值计算
            
            
              less
              
              
            
          
          @base: 16px;
@spacing: @base * 1.5;
@container-width: 100% / 3;颜色操作
            
            
              less
              
              
            
          
          @primary: #428bca;
@primary-dark: darken(@primary, 10%);
@primary-light: lighten(@primary, 15%);3. 高级特性
3.1 映射功能
            
            
              less
              
              
            
          
          #colors() {
  primary: #428bca;
  secondary: #5cb85c;
}
.button {
  background: #colors[primary];
}3.2 循环结构
            
            
              less
              
              
            
          
          .generate-columns(@n, @i: 1) when (@i <= @n) {
  .col-@{i} {
    width: (@i * 100% / @n);
  }
  .generate-columns(@n, (@i + 1));
}
.generate-columns(12);3.3 导入指令
            
            
              less
              
              
            
          
          // 基础导入
@import "variables";
// 条件导入
@import (optional) "theme";
// 内联CSS
@import (inline) "external.css";4. 工程化实践
4.1 推荐目录结构
            
            
              css
              
              
            
          
          styles/
├── core/
│   ├── variables.less
│   ├── mixins.less
│   └── reset.less
├── components/
│   ├── buttons.less
│   └── modals.less
├── layouts/
│   ├── header.less
│   └── footer.less
└── main.less4.2 响应式方案
            
            
              less
              
              
            
          
          // 断点定义
@breakpoints: {
  mobile: 576px;
  tablet: 768px;
  desktop: 992px;
};
// 媒体查询混合
.respond(@device, @content) {
  @media (min-width: @breakpoints[@@device]) {
    @content();
  }
}
// 使用示例
.container {
  .respond(tablet, {
    max-width: 720px;
  });
}5. 性能优化
- 控制嵌套深度:建议不超过4层
- 合理使用混合:避免生成冗余代码
- 模块化拆分:按需加载样式模块
- 生产环境压缩:使用clean-css选项
- 避免全局污染:合理使用命名空间
6. 与现代CSS的配合
6.1 CSS变量集成
            
            
              less
              
              
            
          
          :root {
  --primary: @primary;
  --text-color: @text-color;
}
.element {
  color: var(--text-color);
  border: 1px solid var(--primary);
}6.2 原生CSS嵌套
            
            
              less
              
              
            
          
          /* 输出保留嵌套结构 */
.card {
  &__header {
    font-size: 1.2em;
  }
  
  @media (min-width: 768px) {
    width: 50%;
  }
}7. 最佳实践示例
7.1 主题系统实现
            
            
              less
              
              
            
          
          // 主题定义
.theme(light) {
  @bg-color: #fff;
  @text-color: #333;
}
.theme(dark) {
  @bg-color: #222;
  @text-color: #eee;
}
// 应用主题
.apply-theme(@theme) {
  .theme(@theme);
  
  body {
    background: @bg-color;
    color: @text-color;
  }
}7.2 工具类生成
            
            
              less
              
              
            
          
          // 间距工具
.generate-spacing(@prefix, @property) {
  .loop(@i) when (@i <= 5) {
    @value: @i * 0.25rem;
    .@{prefix}-@{i} {
      @{property}: @value;
    }
    .loop(@i + 1);
  }
  .loop(1);
}
.generate-spacing(m, margin);
.generate-spacing(p, padding);