_tree.scss 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. .ui-tree {
  2. /* 收缩控件大小 */
  3. --ctrl-size: 14px;
  4. /* 左边留白大小 */
  5. --padding-size: 20px;
  6. // 底部margind大小
  7. --margin-size: 20px;
  8. --border-style: dashed;
  9. --border-width: 1px;
  10. // 用于计算,防止样式覆盖而失效
  11. --calc-size: var(--padding-size);
  12. --half-ctrl: calc(var(--ctrl-size) / 2);
  13. --half-margin: calc(var(--margin-size) / 2);
  14. &.flat {
  15. .ui-tree-item {
  16. --padding-size: 20px;
  17. // padding-left: 0;
  18. margin-left: calc(-1 * var(--padding-size));
  19. }
  20. }
  21. color: var(--colors-normal-base);;
  22. .ui-tree-item{
  23. list-style: none;
  24. padding-left: var(--padding-size);
  25. position: relative;
  26. &.un-children {
  27. --padding-size: 0;
  28. }
  29. }
  30. .ui-tree-content {
  31. margin-bottom: var(--margin-size);
  32. position: relative;
  33. }
  34. .ui-tree-ctrl {
  35. position: absolute;
  36. width: var(--ctrl-size);
  37. height: var(--ctrl-size);
  38. left: calc(var(--padding-size) * -1);
  39. top: 50%;
  40. transform: translateY(-50%);
  41. border: 1px solid currentColor;
  42. line-height: var(--ctrl-size);
  43. border-radius: calc(var(--ctrl-size) / 6);
  44. cursor: pointer;
  45. &::before,
  46. &::after {
  47. content: '';
  48. height: 1px;
  49. width: 60%;
  50. background-color: currentColor;
  51. position: absolute;
  52. left: 50%;
  53. top: 50%;
  54. }
  55. &::before {
  56. transform: translate(-50%, -50%);
  57. }
  58. &::after {
  59. transform: translate(-50%, -50%) rotateZ(90deg);
  60. transition: transform .3s ease;
  61. }
  62. &.open::after {
  63. transform: translate(-50%, -50%) rotateZ(90deg) scale(0);
  64. }
  65. }
  66. .ui-tree-item-child {
  67. --offset: calc(var(--calc-size) * 2);
  68. width: calc(100% + var(--offset));
  69. padding-left: var(--offset);
  70. margin-left: calc(-1 * var(--offset));
  71. padding-top: var(--margin-size);
  72. margin-top: calc(-1 * var(--margin-size));
  73. // overflow: hidden;
  74. transition: all .3s ease !important;
  75. }
  76. &.stroke {
  77. --slideWidth: calc(var(--padding-size) - var(--half-ctrl));
  78. .ui-tree-auxiliary::after,
  79. .ui-tree-auxiliary::before,
  80. .ui-tree-item::before,
  81. .ui-tree-content::after {
  82. content: '';
  83. position: absolute;
  84. }
  85. .ui-tree-content::after {
  86. left: calc(var(--padding-size) * -1);
  87. width: var(--slideWidth);
  88. border-bottom: var(--border-width) var(--border-style) currentColor;
  89. top: 50%;
  90. transform: translateX(-100%) translateY(-50%);
  91. }
  92. .ui-tree-auxiliary::after,
  93. .ui-tree-auxiliary::before,
  94. .ui-tree-item.un-children:last-child::before,
  95. .ui-tree-item:not(:last-child):before {
  96. border-left: var(--border-width) var(--border-style) currentColor;
  97. transform: translateX(calc(var(--slideWidth) * -1));
  98. left: 0;
  99. }
  100. .ui-tree-item:not(:last-child):before {
  101. top: 0;
  102. bottom: calc(-1 * var(--half-ctrl));
  103. }
  104. .ui-tree-item.un-children:last-child::before {
  105. top: 0;
  106. bottom: calc(50% + var(--half-margin));
  107. }
  108. .ui-tree-auxiliary::before,
  109. .ui-tree-auxiliary::after {
  110. height: calc(50% - var(--half-ctrl));
  111. transition: height .3s ease
  112. }
  113. .ui-tree-auxiliary::before {
  114. height: calc(50% - var(--half-ctrl));
  115. left: calc(var(--padding-size) * -1);
  116. top: var(--half-ctrl);
  117. }
  118. .ui-tree-auxiliary::after {
  119. height: calc(50% - var(--half-ctrl) + var(--margin-size));
  120. bottom: calc(-1 * var(--margin-size));
  121. }
  122. .first.ui-tree-auxiliary::before {
  123. display: none;
  124. }
  125. .alone .ui-tree-auxiliary::before {
  126. display: inherit;
  127. height: 50%;
  128. top: 0;
  129. }
  130. &:not(.children) > {
  131. .ui-tree-item > .ui-tree-content > .ui-tree-auxiliary::before,
  132. .ui-tree-item::before,
  133. .ui-tree-item > .ui-tree-content::after {
  134. display: none;
  135. }
  136. }
  137. .ui-tree-item.put {
  138. .ui-tree-item-child {
  139. padding-top: 0;
  140. margin-top: 0;
  141. }
  142. > .ui-tree-content .ui-tree-auxiliary::after {
  143. height: 0;
  144. }
  145. }
  146. }
  147. }