layui怎么实现根据系统设定的主题偏好(prefers-color-scheme)自动变色

大涛大大_4872

大涛大大_4872

2026-10-27

410人浏览

原创

不能。Layui 不监听 prefers-color-scheme,也无内置暗色模式逻辑,需手动监听媒体查询并动态切换 body 类名(如 layui-layout-black),再针对性补全表单、表格、弹窗、图标等 CSS 样式适配。

layui怎么实现根据系统设定的主题偏好(prefers-color-scheme)自动变色

layui 能不能直接响应 prefers-color-scheme?

不能。Layui 本身不监听 prefers-color-scheme,也没有内置 dark mode 切换逻辑。它的主题(如 layui.css)是静态加载的,CSS 变量、组件样式、图标颜色等都不随系统偏好自动更新。

怎么让 layui 页面跟随系统深色/浅色模式?

核心思路是:用 JavaScript 检测 matchMedia('(prefers-color-scheme: dark)'),再动态切换 layui 的皮肤类名(layui-layout-black 或自定义 class),并补全缺失的样式适配点。

  • 先确保你用的是 Layui 2.8+(支持 layui-layout-black 类,旧版需手动 patch)
  • 在 上添加初始 class:layui-layout-white(浅色)或 layui-layout-black(深色),避免闪屏
  • 监听媒体查询变更,动态增删 class:
    const darkMode = window.matchMedia('(prefers-color-scheme: dark)');
    function updateTheme(e) {
      document.body.classList.toggle('layui-layout-black', e.matches);
      document.body.classList.toggle('layui-layout-white', !e.matches);
    }
    darkMode.addEventListener('change', updateTheme);
    updateTheme(darkMode); // 立即执行一次
  • 注意:layui-layout-black 仅影响导航栏、侧边栏、部分按钮背景,**表单控件、表格、弹窗、图标颜色不会自动变**,必须额外覆盖

哪些 layui 元素需要手动补样式?

layui 的 CSS 没有使用 CSS 自定义变量,所以深色模式下很多元素会发灰、对比度不足或文字看不见。重点要修:

  • .layui-form-item .layui-input、.layui-select、.layui-textarea:背景和边框色需重写
  • .layui-table th、.layui-table td:默认白底黑字,在深色下要反色
  • .layui-layer-title、.layui-layer-content:弹窗标题和内容背景需适配
  • .layui-icon:图标默认是 #c2c2c2,在深色下几乎不可见,得设成 color: #fff 或更亮的灰
  • 所有带 background: #fff 的地方,基本都要加 body.layui-layout-black & 前缀重写

有没有更轻量的替代方案?

如果你只是想快速启用基础深色支持,又不想大改 CSS,可以绕过 layui-layout-black,直接用 CSS 媒体查询 + 自定义变量(兼容性要求 Chrome 99+/Safari 15.4+):

深蓝色网站后台管理系统layui框架模板-AdminPro
深蓝色网站后台管理系统layui框架模板-AdminPro

一款深蓝色网站后台管理系统layui框架模板

下载
@media (prefers-color-scheme: dark) {
  :root {
    --layui-bg-primary: #1e1e1e;
    --layui-text-title: #fff;
    --layui-text-normal: #ccc;
  }
  body { background: var(--layui-bg-primary); }
  .layui-form-item .layui-input { background: #2d2d2d; border-color: #444; }
  /* 其他逐个覆盖 */
}

但要注意:layui 绝大部分样式没用 CSS 变量,所以这种写法只能局部生效,不如直接监听 + class 切换来得可控。真正稳定的做法还是监听 + 动态 class + 少量关键 CSS 补丁。

最常被忽略的一点:layui.use 加载的模块(比如 form、table)初始化后生成的 DOM 是“一次性”的,它们的内联样式或 class 不会响应后续的 body class 变更 —— 所以补样式必须用 CSS 选择器兜底,不能依赖 JS 重渲染。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

layui layui菜鸟教程

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2663

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5803

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6770

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6498

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

923

5

css3教程
css3教程

php中文网为大家提供css3教程合集,CSS3的语法是建立在CSS原先版本基础上的,它允许使用者在标签中指定特定的HTML元素而不必使用多余的class、ID或JavaScript。php中文网还为大家带来css3的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

2020

10

有哪些css3渐变属性
有哪些css3渐变属性

css3中渐变属性有linear-gradient、radial-gradient、conic-gradient、repeating-linear-gradient、repeating-radial-gradient等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.01

3086

5

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

60

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

40

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 13万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 11.3万人学习

Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.6万人学习