index.less 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. @import '../../style/themes/index';
  2. @import '../../style/mixins/index';
  3. @import '../../input/style/mixin';
  4. @import '../../button/style/mixin';
  5. @import '../../grid/style/mixin';
  6. @import './components';
  7. @import './inline';
  8. @import './horizontal';
  9. @import './vertical';
  10. @import './status';
  11. @import './mixin';
  12. @form-prefix-cls: ~'@{ant-prefix}-form';
  13. @form-item-prefix-cls: ~'@{form-prefix-cls}-item';
  14. @form-font-height: ceil(@font-size-base * @line-height-base);
  15. .@{form-prefix-cls} {
  16. .reset-component();
  17. .reset-form();
  18. .@{form-prefix-cls}-text {
  19. display: inline-block;
  20. padding-right: 8px;
  21. }
  22. // ================================================================
  23. // = Size =
  24. // ================================================================
  25. .formSize(@input-height) {
  26. .@{form-item-prefix-cls}-label > label {
  27. height: @input-height;
  28. }
  29. .@{form-item-prefix-cls}-control-input {
  30. min-height: @input-height;
  31. }
  32. }
  33. &-small {
  34. .formSize(@input-height-sm);
  35. }
  36. &-large {
  37. .formSize(@input-height-lg);
  38. }
  39. }
  40. .explainAndExtraDistance(@num) when (@num >= 0) {
  41. padding-top: floor(@num);
  42. }
  43. .explainAndExtraDistance(@num) when (@num < 0) {
  44. margin-top: ceil(@num);
  45. margin-bottom: ceil(@num);
  46. }
  47. // ================================================================
  48. // = Item =
  49. // ================================================================
  50. .@{form-item-prefix-cls} {
  51. .reset-component();
  52. margin-bottom: @form-item-margin-bottom;
  53. vertical-align: top;
  54. &-with-help {
  55. transition: none;
  56. }
  57. &-hidden,
  58. &-hidden.@{ant-prefix}-row {
  59. // https://github.com/ant-design/ant-design/issues/26141
  60. display: none;
  61. }
  62. // ==============================================================
  63. // = Label =
  64. // ==============================================================
  65. &-label {
  66. display: inline-block;
  67. flex-grow: 0;
  68. overflow: hidden;
  69. white-space: nowrap;
  70. text-align: right;
  71. vertical-align: middle;
  72. &-left {
  73. text-align: left;
  74. }
  75. &-wrap {
  76. overflow: unset;
  77. line-height: (@line-height-base - 0.25em);
  78. white-space: unset;
  79. }
  80. > label {
  81. position: relative;
  82. display: inline-flex;
  83. align-items: center;
  84. max-width: 100%;
  85. height: @form-item-label-height;
  86. color: @label-color;
  87. font-size: @form-item-label-font-size;
  88. > .@{iconfont-css-prefix} {
  89. font-size: @form-item-label-font-size;
  90. vertical-align: top;
  91. }
  92. // Required mark
  93. &.@{form-item-prefix-cls}-required:not(.@{form-item-prefix-cls}-required-mark-optional)::before {
  94. display: inline-block;
  95. margin-right: 4px;
  96. color: @label-required-color;
  97. font-size: @form-item-label-font-size;
  98. font-family: SimSun, sans-serif;
  99. line-height: 1;
  100. content: '*';
  101. .@{form-prefix-cls}-hide-required-mark & {
  102. display: none;
  103. }
  104. }
  105. // Optional mark
  106. .@{form-item-prefix-cls}-optional {
  107. display: inline-block;
  108. margin-left: @margin-xss;
  109. color: @text-color-secondary;
  110. .@{form-prefix-cls}-hide-required-mark & {
  111. display: none;
  112. }
  113. }
  114. // Optional mark
  115. .@{form-item-prefix-cls}-tooltip {
  116. color: @text-color-secondary;
  117. cursor: help;
  118. writing-mode: horizontal-tb;
  119. margin-inline-start: @margin-xss;
  120. }
  121. &::after {
  122. & when (@form-item-trailing-colon=true) {
  123. content: ':';
  124. }
  125. & when not (@form-item-trailing-colon=true) {
  126. content: ' ';
  127. }
  128. position: relative;
  129. top: -0.5px;
  130. margin: 0 @form-item-label-colon-margin-right 0 @form-item-label-colon-margin-left;
  131. }
  132. &.@{form-item-prefix-cls}-no-colon::after {
  133. content: ' ';
  134. }
  135. }
  136. }
  137. // ==============================================================
  138. // = Input =
  139. // ==============================================================
  140. &-control {
  141. display: flex;
  142. flex-direction: column;
  143. flex-grow: 1;
  144. &:first-child:not([class^=~"'@{ant-prefix}-col-'"]):not([class*=~"' @{ant-prefix}-col-'"]) {
  145. width: 100%;
  146. }
  147. }
  148. &-control-input {
  149. position: relative;
  150. display: flex;
  151. align-items: center;
  152. min-height: @input-height-base;
  153. &-content {
  154. flex: auto;
  155. max-width: 100%;
  156. }
  157. }
  158. // ==============================================================
  159. // = Explain =
  160. // ==============================================================
  161. &-explain,
  162. &-extra {
  163. clear: both;
  164. color: @text-color-secondary;
  165. font-size: @font-size-base;
  166. line-height: @line-height-base;
  167. transition: color 0.3s @ease-out; // sync input color transition
  168. .explainAndExtraDistance((@form-item-margin-bottom - @form-font-height) / 2);
  169. }
  170. &-explain-connected {
  171. width: 100%;
  172. }
  173. &-extra {
  174. min-height: @form-item-margin-bottom;
  175. }
  176. &-with-help &-explain {
  177. height: auto;
  178. // min-height: @form-item-margin-bottom;
  179. opacity: 1;
  180. }
  181. // ==============================================================
  182. // = Feedback Icon =
  183. // ==============================================================
  184. &-feedback-icon {
  185. font-size: @font-size-base;
  186. text-align: center;
  187. visibility: visible;
  188. animation: zoomIn 0.3s @ease-out-back;
  189. pointer-events: none;
  190. &-success {
  191. color: @success-color;
  192. }
  193. &-error {
  194. color: @error-color;
  195. }
  196. &-warning {
  197. color: @warning-color;
  198. }
  199. &-validating {
  200. color: @primary-color;
  201. }
  202. }
  203. }
  204. // >>>>>>>>>> Motion <<<<<<<<<<
  205. // Explain holder
  206. .@{ant-prefix}-show-help {
  207. transition: opacity @animation-duration-slow @ease-in-out;
  208. &-appear,
  209. &-enter {
  210. opacity: 0;
  211. &-active {
  212. opacity: 1;
  213. }
  214. }
  215. &-leave {
  216. opacity: 1;
  217. &-active {
  218. opacity: 0;
  219. }
  220. }
  221. }
  222. // Explain
  223. .@{ant-prefix}-show-help-item {
  224. overflow: hidden;
  225. transition: height @animation-duration-slow @ease-in-out,
  226. opacity @animation-duration-slow @ease-in-out, transform @animation-duration-slow @ease-in-out !important;
  227. &-appear,
  228. &-enter {
  229. transform: translateY(-5px);
  230. opacity: 0;
  231. &-active {
  232. transform: translateY(0);
  233. opacity: 1;
  234. }
  235. }
  236. &-leave {
  237. transition: height @animation-duration-base @ease-in-out,
  238. opacity @animation-duration-base @ease-in-out, transform @animation-duration-base @ease-in-out !important;
  239. }
  240. &-leave-active {
  241. transform: translateY(-5px);
  242. }
  243. }
  244. // need there different zoom animation
  245. // otherwise won't trigger anim
  246. @keyframes diffZoomIn1 {
  247. 0% {
  248. transform: scale(0);
  249. opacity: 0;
  250. }
  251. 100% {
  252. transform: scale(1);
  253. opacity: 1;
  254. }
  255. }
  256. @keyframes diffZoomIn2 {
  257. 0% {
  258. transform: scale(0);
  259. opacity: 0;
  260. }
  261. 100% {
  262. transform: scale(1);
  263. opacity: 1;
  264. }
  265. }
  266. @keyframes diffZoomIn3 {
  267. 0% {
  268. transform: scale(0);
  269. opacity: 0;
  270. }
  271. 100% {
  272. transform: scale(1);
  273. opacity: 1;
  274. }
  275. }
  276. @import './rtl';