You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vitepress项目中Tailwind类正常但图标无法显示的问题

Vitepress 中 UnoCSS 图标无法显示的解决方法

问题说明

在Vitepress项目中,Tailwind风格的样式类(如text-green-500、text-3xl)可正常生效,但通过UnoCSS preset-icons 生成的图标无法显示。相关代码文件如下:


章节文件 chapter-1.md

## Hello
<Icon />

Vue 组件 Icon.vue

<template>
  <div class="i-mdi-home text-3xl text-green-500">Test</div>
</template>

UnoCSS 配置文件 uno.config.ts

import presetAttributify from '@unocss/preset-attributify'
import presetIcons from '@unocss/preset-icons'
import presetWebFonts from '@unocss/preset-web-fonts'
import { createLocalFontProcessor } from '@unocss/preset-web-fonts/local'
import presetWind3 from '@unocss/preset-wind3'
import { defineConfig } from '@unocss/vite'

export default defineConfig({
  shortcuts: [
    { logo: 'i-logos-vue w-6em h-6em transform transition-800' },
  ],
  presets: [
    presetWind3(),
    presetAttributify(),
    presetIcons({
      extraProperties: {
        'display': 'inline-block',
        'vertical-align': 'middle',
      },
    }),
    presetWebFonts({
      provider: 'google',
      fonts: {
        sans: 'Roboto',
        mono: ['Fira Code', 'Fira Mono:400,700'],
        lobster: 'Lobster',
        lato: [
          {
            name: 'Lato',
            weights: ['400', '700'],
            italic: true,
          },
          {
            name: 'sans-serif',
            provider: 'none',
          },
        ],
      },
      processors: createLocalFontProcessor(),
    }),
  ],
  safelist: [
    'i-ph-smiley',
    'i-carbon-add',
    'i-heroicons-outline-home',
    // add all icon classes you use in .md files
  ],
})

Vite 配置文件 config.mts

import { defineConfig } from 'vitepress'
import UnoCSS from 'unocss/vite'
import MarkdownIt from 'markdown-it';
import { customHighlighter } from './plugins/customHighlighter';

export default defineConfig({
  title: "Madinah Arabic Books",
  description: "Content, keys and solutions",
  markdown: {
    config: (md: MarkdownIt) => {
      md.use(customHighlighter);
    }
  },  
  themeConfig: {
    ...
  },
  vite: {
    plugins: [UnoCSS()],
  },
})

主题文件 theme/index.ts

import { h } from 'vue'
import type { Theme } from 'vitepress'
import DefaultTheme from 'vitepress/theme'
import Icon from '../components/Icon.vue'
import 'uno.css'
import '@unocss/reset/tailwind.css'
import './style.css'

export default {
  extends: DefaultTheme,
  Layout: () => {
    return h(DefaultTheme.Layout, null, {})
  },
  enhanceApp({ app, router, siteData }) {
    app.component('Icon', Icon)
  }
} satisfies Theme

解决步骤

1. 安装对应图标库

preset-icons 不会自动安装图标源,你使用的i-mdi-home属于Material Design Icons,需手动安装:

npm install @iconify-json/mdi
# 或 pnpm add @iconify-json/mdi

2. 添加图标类到安全列表

当前safelist中缺少i-mdi-home,Markdown中引用的图标类若未被UnoCSS扫描到,需手动加入:

// uno.config.ts
safelist: [
  'i-ph-smiley',
  'i-carbon-add',
  'i-heroicons-outline-home',
  'i-mdi-home', // 新增此行
],

3. 检查图标渲染样式

通过浏览器开发者工具查看.i-mdi-home元素的::before伪元素,确认是否存在正确的content属性(图标Unicode值),若不存在则说明样式未生成。

4. 清理缓存重启服务

删除node_modules/.vite或.vitepress/dist目录,然后重启开发服务,避免缓存导致的样式未更新问题。


内容的提问来源于stack exchange,提问作者coure2011

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:35:03