You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

621 lines
13 KiB

  1. /*
  2. * # Semantic - Form
  3. * http://github.com/semantic-org/semantic-ui/
  4. *
  5. *
  6. * Copyright 2013 Contributors
  7. * Released under the MIT license
  8. * http://opensource.org/licenses/MIT
  9. *
  10. */
  11. /*******************************
  12. Theme
  13. *******************************/
  14. @type : 'collection';
  15. @element : 'form';
  16. @import '../../semantic.config';
  17. /*******************************
  18. Standard
  19. *******************************/
  20. /*--------------------
  21. Form
  22. ---------------------*/
  23. .ui.form {
  24. position: relative;
  25. max-width: 100%;
  26. }
  27. /*--------------------
  28. Content
  29. ---------------------*/
  30. .ui.form > p {
  31. margin: @paragraphMargin;
  32. }
  33. /*--------------------
  34. Field
  35. ---------------------*/
  36. .ui.form .field {
  37. clear: both;
  38. margin: @fieldMargin;
  39. }
  40. /*--------------------
  41. Labels
  42. ---------------------*/
  43. .ui.form .field > label {
  44. margin: 0em 0em @labelMargin 0em;
  45. display: block;
  46. color: @labelColor;
  47. font-size: @labelFontSize;
  48. font-weight: @labelFontWeight;
  49. }
  50. /*--------------------
  51. Standard Inputs
  52. ---------------------*/
  53. .ui.form textarea,
  54. .ui.form input[type="text"],
  55. .ui.form input[type="email"],
  56. .ui.form input[type="date"],
  57. .ui.form input[type="password"],
  58. .ui.form input[type="number"],
  59. .ui.form input[type="url"],
  60. .ui.form input[type="tel"],
  61. .ui.form .ui.input {
  62. width: 100%;
  63. }
  64. .ui.form textarea,
  65. .ui.form input[type="text"],
  66. .ui.form input[type="email"],
  67. .ui.form input[type="date"],
  68. .ui.form input[type="password"],
  69. .ui.form input[type="number"],
  70. .ui.form input[type="url"],
  71. .ui.form input[type="tel"] {
  72. margin: 0em;
  73. padding: @inputVerticalPadding @inputHorizontalPadding;
  74. font-size: @inputFontSize;
  75. background: @inputBackground;
  76. border: @inputBorder;
  77. outline: none;
  78. color: @inputColor;
  79. border-radius: 0.3125em;
  80. box-shadow: @inputBoxShadow;
  81. -webkit-appearance: none;
  82. -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
  83. box-sizing: border-box;
  84. transition: @inputTransition;
  85. }
  86. .ui.textarea,
  87. .ui.form textarea {
  88. font-size: @textAreaFontSize;
  89. height: @textAreaHeight;
  90. min-height: @textAreaMinHeight;
  91. max-height: @textAreaMaxHeight;
  92. line-height: @textAreaLineHeight;
  93. resize: @textAreaResize;
  94. }
  95. .ui.form textarea,
  96. .ui.form input[type="checkbox"] {
  97. vertical-align: @checkboxVerticalAlign;
  98. }
  99. /*--------------------------
  100. Input w/ attached Button
  101. ---------------------------*/
  102. .ui.form input.attached {
  103. width: auto;
  104. }
  105. /*--------------------
  106. Dropdown
  107. ---------------------*/
  108. .ui.form .field > .selection.dropdown {
  109. width: 100%;
  110. }
  111. .ui.form .field > .selection.dropdown > .dropdown.icon {
  112. float: right;
  113. }
  114. .ui.form .inline.field > .selection.dropdown {
  115. width: auto;
  116. }
  117. .ui.form .inline.field > .selection.dropdown > .dropdown.icon {
  118. float: none;
  119. }
  120. /*--------------------
  121. Dividers
  122. ---------------------*/
  123. .ui.form .divider {
  124. clear: both;
  125. margin: @dividerMargin;
  126. }
  127. /*--------------------
  128. Types of Messages
  129. ---------------------*/
  130. .ui.form .info.message,
  131. .ui.form .success.message,
  132. .ui.form .warning.message,
  133. .ui.form .error.message {
  134. display: none;
  135. }
  136. /* Assumptions */
  137. .ui.form .message:first-child {
  138. margin-top: 0px;
  139. }
  140. /*--------------------
  141. Validation Prompt
  142. ---------------------*/
  143. .ui.form .field .prompt.label {
  144. white-space: nowrap;
  145. }
  146. .ui.form .inline.field .prompt {
  147. margin: @validationMargin;
  148. }
  149. .ui.form .inline.field .prompt:before {
  150. margin-top: @validationArrowOffset;
  151. bottom: auto;
  152. right: auto;
  153. top: 50%;
  154. left: 0em;
  155. }
  156. /*******************************
  157. States
  158. *******************************/
  159. /*--------------------
  160. Placeholder
  161. ---------------------*/
  162. /* browsers require these rules separate */
  163. .ui.form ::-webkit-input-placeholder {
  164. color: @inputPlaceholderColor;
  165. }
  166. .ui.form ::-moz-placeholder {
  167. color: @inputPlaceholderColor;
  168. }
  169. .ui.form :focus::-webkit-input-placeholder {
  170. color: @inputPlaceholderFocusColor;
  171. }
  172. .ui.form :focus::-moz-placeholder {
  173. color: @inputPlaceholderFocusColor;
  174. }
  175. /* Error Placeholder */
  176. .ui.form .error ::-webkit-input-placeholder {
  177. color: @inputErrorPlaceholderColor;
  178. }
  179. .ui.form .error ::-moz-placeholder {
  180. color: @inputErrorPlaceholderColor;
  181. }
  182. .ui.form .error :focus::-webkit-input-placeholder {
  183. color: @inputErrorPlaceholderFocusColor;
  184. }
  185. .ui.form .error :focus::-moz-placeholder {
  186. color: @inputErrorPlaceholderFocusColor;
  187. }
  188. /*--------------------
  189. Focus
  190. ---------------------*/
  191. .ui.form input[type="text"]:focus,
  192. .ui.form input[type="email"]:focus,
  193. .ui.form input[type="date"]:focus,
  194. .ui.form input[type="password"]:focus,
  195. .ui.form input[type="number"]:focus,
  196. .ui.form input[type="url"]:focus,
  197. .ui.form input[type="tel"]:focus,
  198. .ui.form textarea:focus{
  199. color: @inputFocusColor;
  200. border-color: @inputFocusBorderColor;
  201. border-radius: @inputFocusBorderRadius;
  202. background: @inputFocusBackground;
  203. box-shadow: @inputFocusBoxShadow;
  204. -webkit-appearance: none;
  205. }
  206. /*--------------------
  207. Success
  208. ---------------------*/
  209. /* On Form */
  210. .ui.form.success .success.message {
  211. display: block;
  212. }
  213. /*--------------------
  214. Error
  215. ---------------------*/
  216. /* On Form */
  217. .ui.form.warning .warning.message {
  218. display: block;
  219. }
  220. /*--------------------
  221. Warning
  222. ---------------------*/
  223. /* On Form */
  224. .ui.form.error .error.message {
  225. display: block;
  226. }
  227. /* On Field(s) */
  228. .ui.form .fields.error .field label,
  229. .ui.form .field.error label,
  230. .ui.form .fields.error .field .input,
  231. .ui.form .field.error .input {
  232. color: @formErrorColor;
  233. }
  234. .ui.form .fields.error .field .corner.label,
  235. .ui.form .field.error .corner.label {
  236. border-color: @formErrorColor;
  237. color: @white;
  238. }
  239. .ui.form .fields.error .field textarea,
  240. .ui.form .fields.error .field input[type="text"],
  241. .ui.form .fields.error .field input[type="email"],
  242. .ui.form .fields.error .field input[type="date"],
  243. .ui.form .fields.error .field input[type="password"],
  244. .ui.form .fields.error .field input[type="number"],
  245. .ui.form .fields.error .field input[type="url"],
  246. .ui.form .fields.error .field input[type="tel"],
  247. .ui.form .field.error textarea,
  248. .ui.form .field.error input[type="text"],
  249. .ui.form .field.error input[type="email"],
  250. .ui.form .field.error input[type="date"],
  251. .ui.form .field.error input[type="password"],
  252. .ui.form .field.error input[type="number"],
  253. .ui.form .field.error input[type="url"],
  254. .ui.form .field.error input[type="tel"] {
  255. background: @formErrorBackground;
  256. border-color: @formErrorBorder;
  257. color: @formErrorColor;
  258. border-radius: @inputErrorBorderRadius;
  259. box-shadow: @inputErrorBoxShadow;
  260. }
  261. .ui.form .field.error textarea:focus,
  262. .ui.form .field.error input[type="text"]:focus,
  263. .ui.form .field.error input[type="email"]:focus,
  264. .ui.form .field.error input[type="date"]:focus,
  265. .ui.form .field.error input[type="password"]:focus,
  266. .ui.form .field.error input[type="number"]:focus,
  267. .ui.form .field.error input[type="url"]:focus,
  268. .ui.form .field.error input[type="tel"]:focus{
  269. border-color: @formErrorFocusBorder;
  270. color: @formErrorFocusColor;
  271. -webkit-appearance: none;
  272. box-shadow: @inputErrorFocusBoxShadow;
  273. }
  274. /*------------------
  275. Dropdown Error
  276. --------------------*/
  277. .ui.form .fields.error .field .ui.dropdown,
  278. .ui.form .fields.error .field .ui.dropdown .item,
  279. .ui.form .field.error .ui.dropdown,
  280. .ui.form .field.error .ui.dropdown .text,
  281. .ui.form .field.error .ui.dropdown .item {
  282. background: @formErrorBackground;
  283. color: @formErrorColor;
  284. }
  285. .ui.form .fields.error .field .ui.dropdown,
  286. .ui.form .field.error .ui.dropdown {
  287. box-shadow: 0px 0px 0px 1px @formErrorBorder !important;
  288. }
  289. .ui.form .fields.error .field .ui.dropdown:hover,
  290. .ui.form .field.error .ui.dropdown:hover {
  291. box-shadow: 0px 0px 0px 1px @formErrorBorder !important;
  292. }
  293. .ui.form .fields.error .field .ui.dropdown:hover .menu,
  294. .ui.form .field.error .ui.dropdown:hover .menu {
  295. box-shadow: 0px 1px 0px 1px @formErrorBorder;
  296. }
  297. /* Hover */
  298. .ui.form .fields.error .field .ui.dropdown .menu .item:hover,
  299. .ui.form .field.error .ui.dropdown .menu .item:hover {
  300. background-color: @dropdownErrorHoverBackground;
  301. }
  302. /* Active */
  303. .ui.form .fields.error .field .ui.dropdown .menu .active.item,
  304. .ui.form .field.error .ui.dropdown .menu .active.item {
  305. background-color: @dropdownErrorActiveBackground !important;
  306. }
  307. /*--------------------
  308. Checkbox Error
  309. ---------------------*/
  310. .ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label,
  311. .ui.form .field.error .checkbox:not(.toggle):not(.slider) label,
  312. .ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box,
  313. .ui.form .field.error .checkbox:not(.toggle):not(.slider) .box {
  314. color: @formErrorColor;
  315. }
  316. .ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before,
  317. .ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before,
  318. .ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before,
  319. .ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before {
  320. background: @formErrorBackground;
  321. border-color: @formErrorBorder;
  322. }
  323. .ui.form .fields.error .field .checkbox label:after,
  324. .ui.form .field.error .checkbox label:after,
  325. .ui.form .fields.error .field .checkbox .box:after,
  326. .ui.form .field.error .checkbox .box:after {
  327. color: @formErrorColor;
  328. }
  329. /*--------------------
  330. Disabled
  331. ---------------------*/
  332. .ui.form .field :disabled,
  333. .ui.form .field.disabled {
  334. opacity: 0.5;
  335. }
  336. .ui.form .field.disabled label {
  337. opacity: 0.5;
  338. }
  339. .ui.form .field.disabled :disabled {
  340. opacity: 1;
  341. }
  342. /*--------------------
  343. Loading State
  344. ---------------------*/
  345. /* On Form */
  346. .ui.form.loading {
  347. position: relative;
  348. }
  349. .ui.form.loading:after {
  350. position: absolute;
  351. top: 0%;
  352. left: 0%;
  353. content: '';
  354. width: 100%;
  355. height: 100%;
  356. background: @formLoaderDimmerColor url(@formLoaderPath) no-repeat @formLoaderPosition;
  357. visibility: visible;
  358. }
  359. /*******************************
  360. Element Types
  361. *******************************/
  362. /*--------------------
  363. Required Field
  364. ---------------------*/
  365. .ui.form .required.fields > .field > label:after,
  366. .ui.form .required.fields > .field > .checkbox:after,
  367. .ui.form .required.field > label:after,
  368. .ui.form .required.field > .checkbox:after {
  369. margin: -0.2em 0em 0em 0.2em;
  370. vertical-align: top;
  371. content: '*';
  372. color: @requiredColor;
  373. }
  374. /*--------------------
  375. Date Input
  376. ---------------------*/
  377. .ui.form .date.field > label {
  378. position: relative;
  379. }
  380. .ui.form .date.field > label:after {
  381. position: absolute;
  382. top: 2em;
  383. right: 0.5em;
  384. font-family: 'Icons';
  385. content: '\f133';
  386. font-size: 1.2em;
  387. font-weight: normal;
  388. color: #CCCCCC;
  389. }
  390. /*******************************
  391. Variations
  392. *******************************/
  393. /*--------------------
  394. Inverted Colors
  395. ---------------------*/
  396. .ui.inverted.form label,
  397. .ui.inverted.form .ui.checkbox label:hover,
  398. .ui.inverted.form .ui.checkbox .box:hover {
  399. color: @invertedFormColor;
  400. }
  401. .ui.inverted.form.loading:after {
  402. background: @formInvertedLoaderDimmerColor url(@formInvertedLoaderPath) no-repeat @formLoaderPosition;
  403. }
  404. /*--------------------
  405. Field Groups
  406. ---------------------*/
  407. /* Grouped Vertically */
  408. .ui.form .grouped.fields {
  409. margin: 0em 0em 1em;
  410. }
  411. .ui.form .grouped.fields .field {
  412. display: block;
  413. float: none;
  414. margin: 0.5em 0em;
  415. padding: 0em;
  416. }
  417. /*--------------------
  418. Fields
  419. ---------------------*/
  420. /* Split fields */
  421. .ui.form .fields {
  422. clear: both;
  423. }
  424. .ui.form .fields:after {
  425. content: ' ';
  426. display: block;
  427. clear: both;
  428. visibility: hidden;
  429. line-height: 0;
  430. height: 0;
  431. }
  432. .ui.form .fields > .field {
  433. clear: none;
  434. float: left;
  435. box-sizing: border-box;
  436. padding-left: 1%;
  437. padding-right: 1%;
  438. }
  439. .ui.form .fields > .field:first-child {
  440. border-left: none;
  441. box-shadow: none;
  442. }
  443. /* Other Combinations */
  444. .ui.form .two.fields > .fields,
  445. .ui.form .two.fields > .field {
  446. width: 50%;
  447. }
  448. .ui.form .three.fields > .fields,
  449. .ui.form .three.fields > .field {
  450. width: 33.333%;
  451. }
  452. .ui.form .four.fields > .fields,
  453. .ui.form .four.fields > .field {
  454. width: 25%;
  455. }
  456. .ui.form .five.fields > .fields,
  457. .ui.form .five.fields > .field {
  458. width: 20%;
  459. }
  460. /* Swap to full width on mobile */
  461. @media only screen and (max-width : 767px) {
  462. .ui.form .two.fields > .fields,
  463. .ui.form .two.fields > .field,
  464. .ui.form .three.fields > .fields,
  465. .ui.form .three.fields > .field,
  466. .ui.form .four.fields > .fields,
  467. .ui.form .four.fields > .field,
  468. .ui.form .five.fields > .fields,
  469. .ui.form .five.fields > .field {
  470. width: 100%;
  471. padding-left: 0%;
  472. padding-right: 0%;
  473. }
  474. }
  475. .ui.form .fields .field:first-child {
  476. padding-left: 0%;
  477. }
  478. .ui.form .fields .field:last-child {
  479. padding-right: 0%;
  480. }
  481. /*--------------------
  482. Inline Fields
  483. ---------------------*/
  484. .ui.form .inline.fields {
  485. margin: @fieldMargin;
  486. }
  487. .ui.form .inline.fields .field {
  488. margin: @inlineFieldsMargin;
  489. }
  490. .ui.form .inline.fields .field > label,
  491. .ui.form .inline.fields .field > p,
  492. .ui.form .inline.fields .field > input,
  493. .ui.form .inline.field > label,
  494. .ui.form .inline.field > p,
  495. .ui.form .inline.field > input {
  496. display: inline-block;
  497. width: auto;
  498. margin-top: 0em;
  499. margin-bottom: 0em;
  500. vertical-align: middle;
  501. font-size: 1em;
  502. }
  503. .ui.form .inline.fields .field > input,
  504. .ui.form .inline.field > input {
  505. font-size: 1em;
  506. }
  507. /* Label */
  508. .ui.form .inline.fields .field > :first-child,
  509. .ui.form .inline.field > :first-child {
  510. margin: 0em @labelMargin 0em 0em;
  511. }
  512. .ui.form .inline.fields .field > :only-child,
  513. .ui.form .inline.field > :only-child {
  514. margin: 0em;
  515. }
  516. /*--------------------
  517. Sizes
  518. ---------------------*/
  519. /* Standard */
  520. .ui.small.form {
  521. font-size: @small;
  522. }
  523. /* Large */
  524. .ui.large.form {
  525. font-size: @large;
  526. }