应将 font awesome css 放在 layui.css 之前加载,用 inline-flex 包裹图标解决偏位,templet 必须用函数而非字符串以避免转义,第三方图标无法用于 layui 原生组件的内置图标位置。

直接改 layui.css 里的 @font-face 或覆盖 .layui-icon 样式,图标大概率全挂,升级后还会被覆盖重置——这不是扩展,是埋雷。
Font Awesome 必须在 layui.css 前加载
CDN 链接顺序错了,图标会延迟渲染甚至显示为方块。浏览器按 <link> 顺序解析 CSS,layui.css 里有大量 .layui-icon 的强制样式,如果 Font Awesome 的字体声明晚于它,就可能被忽略或冲突。
-
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css">放在<link rel="stylesheet" href="layui/css/layui.css">之前 - 本地部署时,确保
fontawesome.min.css文件路径可访问,Network 面板里字体文件(woff2/woff)状态码必须是 200 - 别用
async或defer加载这个 CSS,它需要阻塞式就绪,否则templet渲染时图标还没注册进 font system
templet 函数里写 <i class="fa fa-edit"></i> 但图标偏位
Layui 表格单元格默认靠 line-height 和 vertical-align: middle 居中,而 Font Awesome 图标是纯行内元素,基线对齐逻辑和文字不一致,尤其在 layui-table-sm 下更明显。
- 必须用容器包裹:
<span class="fa-inline"><i class="fa fa-edit"></i></span>,再配 CSS:.fa-inline { display: inline-flex; align-items: center; } - 别单独给
i.fa加margin-top或vertical-align: middle——不同字号下偏移量飘忽,layui-btn-lg和layui-btn-sm下表现完全不一致 - 如果图标旁有文字(如「编辑」),整个
span要设统一font-size,否则图标缩放失真
Iconfont 自定义图标在表格里显示为空白或方块
不是字体没加载,而是 Layui 默认对 templet 字符串做 HTML 转义,<i class="icon-user"></i> 被当作文本原样输出,根本没解析成标签。
- 列定义必须用函数模板:
templet: function(d) { return '<i class="iconfont icon-user"></i>'; },不能写字符串模板templet: '<i class="iconfont icon-user"></i>' - 确认
iconfont.css已全局引入,且类名与你项目导出的 CSS 完全一致(比如你导出的是.if-user,就别写icon-user) - 图标点击事件要委托:
table.on('tool(yourTableId)', function(obj){ ... }),别在templet里写onclick="xxx()",重绘后事件就丢了
最易被忽略的一点:Layui 所有带内置图标的组件(form.render() 处理的 input、layer.open() 的 btn 数组)都硬编码了 layui-icon 类名,你塞进去的 fa 或 iconfont 类只会被当作文本或忽略。想用第三方图标,就得放弃原生组件的图标逻辑,用容器+定位+flex 手动拼。











