1. Map用法

  1. > npm i dart-sass -S
  2. // 单文件/文件夹监听
  3. > npx dart-sass --watch style.scss:style.css
  4. // map.scss
  5. $spacers: (
  6. 6: 60px,
  7. 7: 70px
  8. ) !default;
  9. $utils: (
  10. pl: {
  11. property: padding-left,
  12. values: $spacers
  13. }
  14. ) !default
  15. // ulities.scss
  16. $spacer: 8px;
  17. $spacers: map-merge($map1: (
  18. 0: 0,
  19. 1: 1 * $spacer,
  20. 2: 2 * $spacer,
  21. 3: 3 * $spacer,
  22. 4: 4 * $spacer,
  23. 5: 5 * $spacer
  24. ), $map2: $spacers);
  25. $utils: map-marge($map1: (
  26. m: (
  27. property: margin,
  28. values: $spacers
  29. )
  30. mx: (
  31. property: margin-left margin-right,
  32. values: $spacers
  33. )
  34. p: (
  35. property: padding,
  36. values: $spacers
  37. )
  38. px: (
  39. property: padding-left padding-right,
  40. values: $spacers
  41. )
  42. ), $map2: $utils)
  43. $each $key, $value in $utils {
  44. // 取utils的 步进长度,循环的数据
  45. // 确定了循环的长度
  46. $values: map-get($map: $value, $key: values)
  47. // 循环产生不同的spacer对应的样式
  48. @each $item-key, $item-value in $values {
  49. /* .px-{spacer-item} {padding-left: spacer-value !important!} */
  50. // 取多个元素的样式进行遍历
  51. $properties: map-get($map: $value, $key: property);
  52. .#{$key}-#{$item-key} {
  53. @each $property in $properties {
  54. #{$property}: $item-value !important;
  55. }
  56. }
  57. }
  58. @debug $key; // 配合npx dart-sass test.scss 可以打印key
  59. }
  60. .test-#{$key} {
  61. $value: 0;
  62. }
  63. .p-#${key} {
  64. padding: $value;
  65. }