uno.config.ts 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import {
  2. defineConfig,
  3. presetAttributify,
  4. presetTypography,
  5. presetUno,
  6. presetWebFonts,
  7. } from 'unocss'
  8. import presetIcons from '@unocss/preset-icons'
  9. import presetRemToPx from '@unocss/preset-rem-to-px'
  10. import transformerVariantGroup from '@unocss/transformer-variant-group'
  11. import transformerDirectives from '@unocss/transformer-directives'
  12. export default defineConfig({
  13. // ...UnoCSS options
  14. presets: [
  15. // 此预设尝试提供流行的实用程序优先框架的通用超集,包括 Tailwind CSS、Windi CSS、Bootstrap、Tachyons 等
  16. presetUno(),
  17. // 模板使用 viewport 作为移动端适配方案,unocss 默认单位为 rem
  18. // 所以需要转成 px,然后由 postcss 把 px 转成 vw/vh,完成适配
  19. // https://unocss.dev/presets/rem-to-px
  20. presetRemToPx({
  21. // default
  22. baseFontSize: 16,
  23. }),
  24. // 图标预设: https://unocss.dev/presets/icons
  25. presetIcons({
  26. // cdn: 'https://esm.sh/',
  27. extraProperties: {
  28. 'display': 'inline-block',
  29. 'vertical-align': 'middle',
  30. },
  31. }),
  32. // 属性模式(在 class 属性过多的情况下优先使用属性模式,否则将会变得难以维护)
  33. // https://unocss.dev/presets/attributify#attributify-mode
  34. presetAttributify(),
  35. // https://unocss.dev/presets/typography#usage
  36. presetTypography(),
  37. // 网络字体预设:https://unocss.dev/presets/web-fonts
  38. presetWebFonts({
  39. // 默认字体提供商 https://unocss.dev/presets/web-fonts#providers
  40. provider: 'google',
  41. // https://unocss.dev/presets/web-fonts#example
  42. fonts: {
  43. mono: ['Fira Code'],
  44. },
  45. }),
  46. ],
  47. transformers: [
  48. // 启用 Windi CSS for UnoCSS 的变体组功能(就是简写,具体看链接): https://unocss.dev/transformers/variant-group#usage
  49. transformerVariantGroup(),
  50. // 在样式类里你也可以写原子化 css 具体看链接: https://unocss.dev/transformers/directives#usage
  51. // Unknown at rule @apply: https://github.com/unocss/unocss/issues/2401
  52. transformerDirectives(),
  53. ],
  54. // 一些实用的自定义组合
  55. shortcuts: {
  56. 'm-0-auto': 'm-0 ma', // margin: 0 auto
  57. 'wh-full': 'w-full h-full', // width: 100%, height: 100%
  58. 'flex-center': 'flex justify-center items-center', // flex布局居中
  59. 'flex-x-center': 'flex justify-center', // flex布局:主轴居中
  60. 'flex-y-center': 'flex items-center', // flex布局:交叉轴居中
  61. 'text-overflow': 'overflow-hidden whitespace-nowrap text-ellipsis', // 文本溢出显示省略号
  62. 'text-break': 'whitespace-normal break-all break-words', // 文本溢出换行
  63. },
  64. // 由于 UnoCSS 在构建时工作,这意味着只会生成静态呈现的 icon 并将其发送到你的组件中
  65. // 通过模板字符串 :class="menu.meta?.icon" 来动态生成 CSS 类名。
  66. // 这个类名是在运行时计算的,UnoCSS 在构建时无法知道 menu.meta?.icon 的具体值,
  67. // 因此无法生成对应的 CSS。为了解决这个问题,你可以使用 UnoCSS 的 safelist 选项来指定一些始终需要生成的 CSS 类。
  68. // https://unocss.dev/guide/advanced#safelist
  69. safelist: [
  70. 'i-simple-icons:atlassian',
  71. 'i-simple-icons:soundcharts',
  72. 'i-simple-icons:docsify',
  73. 'i-material-symbols:award-star',
  74. ],
  75. })