uno.config.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { defineConfig, toEscapedSelector as e, presetUno } from 'unocss'
  2. // color: ${JSON.stringify(rules)} ${JSON.stringify(variantHandlers)};
  3. const POSITION_MAP = {
  4. t: 'top',
  5. b: 'bottom',
  6. l: 'left',
  7. r: 'right',
  8. top: 'top',
  9. bottom: 'bottom',
  10. left: 'left',
  11. right: 'right'
  12. }
  13. export default defineConfig({
  14. // ...UnoCSS options
  15. rules: [
  16. [
  17. /^custom-b-(.+)-(\d+)$/,
  18. ([_, position, count], { rawSelector, rules, variantHandlers }) => {
  19. // custom-b-bottom-1 或者 custom-b-b-1
  20. const selector = e(rawSelector)
  21. const newPosition = POSITION_MAP[position]
  22. return `
  23. ${selector}:after {
  24. content: '';
  25. position: absolute;
  26. width: ${newPosition === 'bottom' || newPosition === 'top' ? '100%' : count + 'px'};
  27. height: ${newPosition === 'left' || newPosition === 'right' ? '100%' : count + 'px'};
  28. ${newPosition === 'bottom' ? 'bottom' : 'top'}: 0px;
  29. ${newPosition === 'right' ? 'right' : 'left'}: 0px;
  30. background-color: var(--custom-border-color-light);
  31. }
  32. .dark ${selector}:after {
  33. background-color: var(--el-border-color);
  34. }
  35. `
  36. }
  37. ],
  38. [
  39. /^custom-hover$/,
  40. ([], { rawSelector }) => {
  41. const selector = e(rawSelector)
  42. return `
  43. ${selector} {
  44. display: flex;
  45. height: 100%;
  46. padding: 1px 10px 0;
  47. cursor: pointer;
  48. align-items: center;
  49. transition: background var(--transition-time-02);
  50. }
  51. /* you can have multiple rules */
  52. ${selector}:hover {
  53. background-color: var(--top-header-hover-color);
  54. }
  55. .dark ${selector}:hover {
  56. background-color: var(--el-bg-color-overlay);
  57. }
  58. `
  59. }
  60. ]
  61. ],
  62. presets: [presetUno({ dark: 'class', attributify: false })]
  63. })