Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 

35 Zeilen
1.1 KiB

  1. <template>
  2. <ClientOnly>
  3. <button
  4. type="button"
  5. class="flex h-9 w-9 items-center justify-center rounded-full bg-[var(--c-eef7ff)] text-[var(--c-0b8cff)] transition-colors hover:bg-[var(--c-e0f0ff)]"
  6. :aria-label="isDark ? '切换到亮色模式' : '切换到暗色模式'"
  7. :aria-pressed="isDark"
  8. :title="isDark ? '亮色模式' : '暗色模式'"
  9. @click="toggle"
  10. >
  11. <UIcon :name="isDark ? 'i-lucide-sun' : 'i-lucide-moon'" class="size-4.5" />
  12. </button>
  13. <!-- SSR / 水合前占位,避免图标闪烁 -->
  14. <template #fallback>
  15. <span class="h-9 w-9 rounded-full bg-[var(--c-eef7ff)]" />
  16. </template>
  17. </ClientOnly>
  18. </template>
  19. <script setup>
  20. /**
  21. * 亮色 / 暗色切换。
  22. * 状态由 @nuxtjs/color-mode 维护(<html class="dark"> + cookie 持久化),
  23. * 具体配色取值见 assets/css/theme.css 里的 CSS 变量。
  24. */
  25. const colorMode = useColorMode()
  26. const isDark = computed(() => colorMode.value === 'dark')
  27. function toggle() {
  28. colorMode.preference = isDark.value ? 'light' : 'dark'
  29. }
  30. </script>