tailwind.config.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /** @type {import('tailwindcss').Config} */
  2. export default {
  3. content: [
  4. "./index.html",
  5. "./src/**/*.{js,ts,jsx,tsx}",
  6. ],
  7. theme: {
  8. // 响应式断点
  9. screens: {
  10. 'xs': '320px', // 超小屏(旧手机)
  11. 'sm': '640px', // 小屏(手机横屏/小平板)
  12. 'md': '768px', // 中屏(平板竖屏)
  13. 'lg': '1024px', // 大屏(平板横屏/笔记本)
  14. 'xl': '1280px', // 超大屏(桌面)
  15. '2xl': '1536px', // 2K屏
  16. },
  17. extend: {
  18. // 自定义颜色
  19. colors: {
  20. 'bg-main': '#E8E8E8',
  21. 'bg-card': '#F5F3F0',
  22. 'accent': '#007AFF',
  23. },
  24. // 自定义间距(支持视口单位)
  25. spacing: {
  26. '2vw': '2vw',
  27. '3vw': '3vw',
  28. '4vw': '4vw',
  29. '5vw': '5vw',
  30. '8vw': '8vw',
  31. '10vw': '10vw',
  32. '12vw': '12vw',
  33. '15vw': '15vw',
  34. '8vh': '8vh',
  35. '10vh': '10vh',
  36. '12vh': '12vh',
  37. '15vh': '15vh',
  38. '18vh': '18vh',
  39. '20vh': '20vh',
  40. '22vh': '22vh',
  41. '25vh': '25vh',
  42. '30vh': '30vh',
  43. '32vh': '32vh',
  44. '35vh': '35vh',
  45. '40vh': '40vh',
  46. '42vh': '42vh',
  47. '45vh': '45vh',
  48. '50vh': '50vh',
  49. '60vh': '60vh',
  50. '70vh': '70vh',
  51. '80vh': '80vh',
  52. '90vh': '90vh',
  53. },
  54. // 自定义字体大小(使用 min(vw, vh) 实现流式排版,确保字体不会因为单一维度变大而过大)
  55. fontSize: {
  56. 'fluid-xs': 'clamp(8px, min(2.67vw, 1.23vh), 12px)',
  57. 'fluid-sm': 'clamp(9.6px, min(3.2vw, 1.48vh), 14.4px)',
  58. 'fluid-base': 'clamp(11.2px, min(3.73vw, 1.72vh), 16.8px)',
  59. 'fluid-md': 'clamp(12.8px, min(4.27vw, 1.97vh), 19.2px)',
  60. 'fluid-lg': 'clamp(14.4px, min(4.8vw, 2.22vh), 21.6px)',
  61. 'fluid-xl': 'clamp(16px, min(5.33vw, 2.46vh), 24px)',
  62. 'fluid-2xl': 'clamp(19.2px, min(6.4vw, 2.96vh), 28.8px)',
  63. 'fluid-3xl': 'clamp(22.4px, min(7.47vw, 3.45vh), 33.6px)',
  64. 'fluid-4xl': 'clamp(25.6px, min(8.53vw, 3.94vh), 38.4px)',
  65. },
  66. // 自定义最大宽度
  67. maxWidth: {
  68. 'mobile': '450px',
  69. 'tablet': '768px',
  70. 'desktop': '1024px',
  71. },
  72. // 自定义宽度
  73. width: {
  74. 'responsive-sm': 'clamp(44px, 12vw, 56px)',
  75. 'responsive-md': 'clamp(64px, 16vw, 96px)',
  76. 'responsive-lg': 'clamp(96px, 24vw, 140px)',
  77. 'responsive-xl': 'clamp(140px, 32vw, 200px)',
  78. },
  79. // 自定义高度
  80. height: {
  81. 'input': 'clamp(48px, 7vh, 56px)',
  82. 'button': 'clamp(44px, 6vh, 52px)',
  83. 'button-sm': 'clamp(36px, 5vh, 44px)',
  84. 'responsive-sm': 'clamp(44px, 12vw, 56px)',
  85. 'responsive-md': 'clamp(64px, 16vw, 96px)',
  86. 'responsive-lg': 'clamp(96px, 24vw, 140px)',
  87. 'responsive-xl': 'clamp(140px, 32vw, 200px)',
  88. },
  89. // 自定义圆角
  90. borderRadius: {
  91. 'xl-top': '12px 12px 0 0',
  92. 'xl-bottom': '0 0 12px 12px',
  93. },
  94. // 自定义动画
  95. animation: {
  96. 'fade-in': 'fadeIn 0.3s ease-in-out',
  97. 'slide-up': 'slideUp 0.4s ease-out',
  98. 'pulse-slow': 'pulse 3s cubic-bezier(0.4, 0, 0.6, 1) infinite',
  99. 'float': 'float 3s ease-in-out infinite',
  100. },
  101. keyframes: {
  102. fadeIn: {
  103. '0%': { opacity: '0' },
  104. '100%': { opacity: '1' },
  105. },
  106. slideUp: {
  107. '0%': { transform: 'translateY(20px)', opacity: '0' },
  108. '100%': { transform: 'translateY(0)', opacity: '1' },
  109. },
  110. float: {
  111. '0%, 100%': { transform: 'translateY(0)' },
  112. '50%': { transform: 'translateY(-10px)' },
  113. },
  114. },
  115. },
  116. },
  117. plugins: [],
  118. }