前端组件库 ——LayUI 知识点大全(四)

简介: 教程来源 https://zlpow.cn LayUI 2.8+/3.0 支持 CSS 变量主题定制、深浅色切换;提供移动端专用版本;支持按需引入与模块化加载;可开发自定义模块及集成 ECharts 等第三方插件,兼顾简洁性与扩展性,适合快速构建后台系统。

六、扩展与定制

6.1 主题定制 - 使用 CSS 变量(新版特性)
很多开发者希望修改 LayUI 的默认主题色来匹配品牌风格。在 LayUI 2.8 及 3.0 版本中,官方添加了 CSS 变量支持,使得重置主题变得非常简单,无需再通过复杂的 Less 变量编译。

核心 CSS 变量列表:
image.png
在项目中定制主题:

/* 在全局样式表中覆盖 CSS 变量 */
:root {
  --lay-color-primary: #4c6ef5;      /* 修改主色为靛蓝 */
  --lay-color-accent: #fa5252;        /* 修改强调色为红色 */
  --lay-border-radius: 8px;           /* 增大圆角 */
  --lay-font-family: "Inter", system-ui, sans-serif;
}

实现深色/浅色主题切换:

/* 定义两套主题变量 */
:root {
  --lay-bg-color: #ffffff;
  --lay-text-color: #333333;
  --lay-border-color: #e9ecef;
}

:root.dark {
  --lay-bg-color: #1a1a1a;
  --lay-text-color: #e0e0e0;
  --lay-border-color: #2c2c2c;
}

配合 JavaScript 动态切换:

// 切换主题函数
function toggleTheme() {
  if (document.documentElement.classList.contains('dark')) {
    document.documentElement.classList.remove('dark');
    localStorage.setItem('layui-theme', 'light');
  } else {
    document.documentElement.classList.add('dark');
    localStorage.setItem('layui-theme', 'dark');
  }
}

// 页面加载时恢复用户选择的主题
const savedTheme = localStorage.getItem('layui-theme');
if (savedTheme === 'dark') {
  document.documentElement.classList.add('dark');
}

6.2 移动端适配
LayUI 提供了专门的移动端(Mobile)版本,针对手机和平板设备进行了优化。移动端版本的核心区别如下:
image.png
移动端页面基础模板:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <title>移动端 LayUI 示例</title>
  <link rel="stylesheet" href="/path/to/layui/css/layui.mobile.css">
</head>
<body>
  <div class="layui-container">
    <!-- 流式列表 -->
    <ul class="layui-list">
      <li class="layui-list-item">
        <div class="layui-list-img">
          <img src="avatar.jpg">
        </div>
        <div class="layui-list-text">
          <h3>标题文字</h3>
          <p>描述信息</p>
        </div>
      </li>
    </ul>
  </div>

  <!-- 底部 Tabbar 导航栏 -->
  <div class="layui-tabbar">
    <ul class="layui-tabbar-list">
      <li class="layui-tabbar-item layui-this">
        <i class="layui-icon layui-icon-home"></i>
        <span>首页</span>
      </li>
      <li class="layui-tabbar-item">
        <i class="layui-icon layui-icon-find-fill"></i>
        <span>发现</span>
      </li>
      <li class="layui-tabbar-item">
        <i class="layui-icon layui-icon-user"></i>
        <span>我的</span>
      </li>
    </ul>
  </div>

  <script src="/path/to/layui/layui.js"></script>
</body>
</html>

6.3 按需引入组件
LayUI 默认加载 layui.all.js 会包含所有内置模块,但这种方式会增加初始加载体积。对于对性能要求较高的项目,推荐按需引入:

// 方式一:配置模块路径并按需加载
layui.config({
  base: '/static/js/modules/',   // 自定义模块存放路径
  version: true                   // 开启版本控制,避免缓存
}).use(['layer', 'form', 'table'], function(){
  var layer = layui.layer;
  var form = layui.form;
  var table = layui.table;
  // 业务代码...
});

// 方式二:通过 extend 方法扩展自定义模块
layui.extend({
  admin: '{/}/static/js/admin'    // 扩展 admin 模块
}).use(['admin', 'layer'], function(){
  var admin = layui.admin;
  var layer = layui.layer;
  // 使用扩展模块
});

使用 Vite 或 Webpack 按需打包(高级用法):

// 在支持 tree-shaking 的构建工具中,可以只导入需要的组件
import layui from 'layui-src';
import 'layui-src/css/layui.css';

// 动态加载模块
layui.use(['layer', 'form'], () => {
  // ...
});

6.4 自定义模块开发完整指南
LayUI 允许开发者使用 layui.define() 方法定义自己的模块,这对于封装复用的业务组件非常有用。以下是一个完整的自定义模块开发示例:

步骤一:定义模块

// modules/userManager.js
layui.define(['layer', 'form', 'upload'], function(exports){
  var layer = layui.layer;
  var form = layui.form;
  var upload = layui.upload;

  // 私有变量和方法
  var apiBaseUrl = '/api/user';
  var currentUser = null;

  function fetchUserList(callback) {
    $.get(apiBaseUrl + '/list', function(res){
      callback(res.data);
    });
  }

  function showUserDetail(userId) {
    $.get(apiBaseUrl + '/' + userId, function(user){
      layer.open({
        type: 1,
        title: '用户详情',
        content: `
          <div style="padding: 20px;">
            <p>姓名:${user.name}</p>
            <p>邮箱:${user.email}</p>
            <p>角色:${user.role}</p>
          </div>
        `,
        area: ['400px', '300px']
      });
    });
  }

  // 公开 API
  var api = {
    // 获取用户列表
    getList: function(callback) {
      fetchUserList(callback);
    },
    // 显示用户详情
    showDetail: function(userId) {
      showUserDetail(userId);
    },
    // 打开新增用户弹窗
    openAddDialog: function(callback) {
      layer.open({
        type: 2,
        title: '新增用户',
        content: '/page/user/add',
        area: ['600px', '500px'],
        end: function() {
          if (callback) callback();
        }
      });
    },
    // 删除用户
    deleteUser: function(userId, successCallback) {
      layer.confirm('确定删除该用户吗?', {
        icon: 3,
        title: '提示'
      }, function(index){
        layer.close(index);
        $.ajax({
          url: apiBaseUrl + '/' + userId,
          type: 'DELETE',
          success: function(){
            layer.msg('删除成功');
            if (successCallback) successCallback();
          }
        });
      });
    }
  };

  // 输出模块接口
  exports('userManager', api);
});

步骤二:在页面中使用自定义模块

<script>
layui.config({
  base: '/static/js/modules/'    // 设置自定义模块的根目录
}).use(['userManager', 'table'], function(){
  var userManager = layui.userManager;
  var table = layui.table;

  // 使用自定义模块的方法
  userManager.getList(function(users){
    console.log('用户列表:', users);
  });

  // 删除用户
  userManager.deleteUser(123, function(){
    table.reload('userTable');
  });
});
</script>

6.5 第三方插件集成
LayUI 的模块化设计使得集成第三方插件变得非常简单。以下是一些常见的集成场景:

集成 ECharts:

// 1. 引入 ECharts CDN
// 2. 在 LayUI 中使用
layui.use(['element'], function(){
  var element = layui.element;

  // 初始化 ECharts 图表
  var myChart = echarts.init(document.getElementById('chart'));
  myChart.setOption({
    title: { text: '数据趋势' },
    xAxis: { data: ['Mon', 'Tue', 'Wed'] },
    yAxis: {},
    series: [{ type: 'line', data: [120, 200, 150] }]
  });
});

封装 ECharts 为 LayUI 模块:

// modules/echarts.js
layui.define(function(exports){
  var echarts = window.echarts;
  if (!echarts) {
    console.error('请先引入 ECharts 库');
    return;
  }

  var api = {
    init: function(domId, option) {
      var dom = document.getElementById(domId);
      if (!dom) return null;
      var chart = echarts.init(dom);
      chart.setOption(option);
      return chart;
    },
    resize: function(chart) {
      chart && chart.resize();
    }
  };

  exports('echarts', api);
});

// 使用封装后的模块
layui.use(['echarts'], function(){
  var echarts = layui.echarts;
  var chart = echarts.init('chartBox', {
    xAxis: { data: ['A', 'B', 'C'] },
    yAxis: {},
    series: [{ type: 'bar', data: [10, 20, 30] }]
  });
});

总结
LayUI 以其极低的学习门槛、丰富的组件库和独特的模块化设计,在广大后端开发者及中小型项目团队中占据了独特的地位。虽然在前端工程化大行其道的今天,LayUI 可能不是构建大型复杂单页面应用的首选,但它在快速构建后台管理系统、内部运营平台、传统企业官网等方面依然具有极高的效率优势。特别是随着 3.0 版本的发布,LayUI 正努力向现代化标准靠拢,试图在“返璞归真”与“紧跟时代”之间找到完美的平衡点。
来源:
https://rvtst.cn

相关文章
|
10天前
|
JavaScript 前端开发 Java
全栈(Java + Vue + MySQL)开发图书管理系统教程(三)
教程来源 http://uklgy.cn 本节介绍图书管理系统前端开发:基于Vue 3 + Vite快速搭建项目,集成Element Plus、Axios(含请求/响应拦截、Token自动注入)、Vue Router(路由守卫与权限控制)、Pinia(用户状态持久化);规范目录结构,封装API,并配置Vite代理对接后端。
|
2天前
|
移动开发 前端开发 JavaScript
前端组件库——Plyr 知识点大全(一)
教程来源 https://bncne.cn Plyr 是一款轻量(仅5KB)、无依赖的 HTML5 媒体播放器,支持视频、音频及 YouTube/Vimeo 嵌入。它提供统一美观的 UI、卓越可访问性与跨浏览器一致性,开箱即用,兼容 Vue/React,是替代原生播放器的理想选择。
|
2天前
|
前端开发 JavaScript 容器
前端组件库 ——LayUI 知识点大全(三)
教程来源 https://bncne.cn LayUI基础元素丰富实用:按钮支持多色、多尺寸及图标组合;图标为矢量字体,可自由缩放变色;表单模块集成验证与交互;layer弹层、table表格、laydate日期、upload上传等核心模块,让后台开发简洁高效。
|
2天前
|
前端开发 开发者 容器
前端组件库 ——LayUI 知识点大全(二)
教程来源 https://tmywi.cn LayUI提供灵活的布局系统,含固定宽(layui-container)与自适应宽(layui-fluid)两种容器;栅格基于12列响应式设计,支持多端适配(xs/sm/md/lg)、列偏移、列间距等功能,助力快速构建现代化页面结构。
|
2天前
|
前端开发 JavaScript API
前端组件库 ——LayUI 知识点大全(一)
教程来源 http://oplhc.cn LayUI是由国内开发者“贤心”于2016年推出的经典模块化前端UI框架,MIT开源。不依赖Vue/React等现代框架,零配置、低门槛、开箱即用,尤受后端开发者与中小项目青睐。2026年仍持续更新,最新版2.11+强化组件与工程化支持。
|
2月前
|
人工智能 Linux API
OpenClaw从入门到落地:阿里云轻量部署、MacOS/Linux/Windows11本地安装+千问/Coding Plan API实战
在人工智能代理工具快速迭代的2026年,OpenClaw(曾用名Clawdbot)凭借轻量化部署、Skills生态扩展、多平台兼容与大模型无缝对接的特性,成为个人与小型团队搭建AI自动化助理的首选方案。它采用“核心平台+技能插件”的架构设计,既能在阿里云轻量服务器上实现7×24小时稳定运行,也能在MacOS、Linux、Windows11本地设备完成离线部署,同时支持阿里云千问大模型API与免费Coding Plan API的快速配置,满足不同场景下的AI能力调用需求。本文基于2026年最新稳定版本,从零开始讲解阿里云轻量服务器部署OpenClaw的全流程、本地三大操作系统的安装步骤、Skil
647 0
|
2天前
|
人工智能 缓存 Shell
Claude Code 全攻略:命令大全 + 实战工作流(完整版)
Claude Code 是一款运行在终端环境下的 AI 编码助手,能够直接在项目目录中理解代码结构、编辑文件、执行命令、执行开发计划,并支持持久化记忆、上下文压缩、后台任务、多模型切换等专业能力。对于日常开发、项目维护、快速重构、代码审查等场景,它可以大幅减少手动操作、提升编码效率。本文从常用命令、界面模式、核心指令、记忆机制、图片处理、进阶工作流等维度完整说明,帮助开发者快速上手并稳定使用。
177 1
|
14天前
|
缓存 NoSQL 网络协议
如何为我的网站或应用集成IP归属地查询功能?
本文为网站/应用集成IP归属地查询的落地指南:强调“取对IP”是前提(仅信可信上游、严滤私网),采用“本地+Redis缓存+在线API+硬超时熔断”架构,失败自动降级至省/国家;区分展示型与风控型模型,确保可解释、可审计、可回滚,并严守隐私合规红线。(239字)
153 13
|
13天前
|
编解码 数据可视化 前端开发
前端组件库——DataV知识点大全(二)
教程来源 https://www.xbivx.cn DataV提供40+高质量组件,涵盖边框(13种SVG动画边框)、装饰、数字翻牌器、滚动表格、水位图、锥形柱图、飞线图及全屏容器等,支持高度自定义与响应式适配,助力快速构建专业数据大屏。