diff options
author | sadbeast <sadbeast@sadbeast.com> | 2024-01-31 17:47:56 -0800 |
---|---|---|
committer | sadbeast <sadbeast@sadbeast.com> | 2024-01-31 17:47:56 -0800 |
commit | 332ec93366315fa1ed7b4acd7a3407c96e8ddfa7 (patch) | |
tree | 6ae553317f12a7a6a29c849c8805ffab96436dc2 /app/assets/stylesheets/content/_form.scss | |
download | td-332ec93366315fa1ed7b4acd7a3407c96e8ddfa7.tar.gz td-332ec93366315fa1ed7b4acd7a3407c96e8ddfa7.tar.bz2 |
Diffstat (limited to 'app/assets/stylesheets/content/_form.scss')
-rw-r--r-- | app/assets/stylesheets/content/_form.scss | 352 |
1 files changed, 352 insertions, 0 deletions
diff --git a/app/assets/stylesheets/content/_form.scss b/app/assets/stylesheets/content/_form.scss new file mode 100644 index 0000000..1dda8f3 --- /dev/null +++ b/app/assets/stylesheets/content/_form.scss @@ -0,0 +1,352 @@ +/** + * Form elements + */ + +// Reboot based on : +// - normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css +// - sanitize.css v13.0.0 | CC0 1.0 Universal | github.com/csstools/sanitize.css +// –––––––––––––––––––– + +// 1. Change the font styles in all browsers +// 2. Remove the margin in Firefox and Safari +input, +optgroup, +select, +textarea { + margin: 0; // 2 + font-size: 1rem; // 1 + line-height: var(--line-height); // 1 + font-family: inherit; // 1 + letter-spacing: inherit; // 2 +} + +// Show the overflow in IE. +input { + overflow: visible; +} + +// Remove the inheritance of text transform in Edge, Firefox, and IE +select { + text-transform: none; +} + +// 1. Correct the text wrapping in Edge and IE +// 2. Correct the color inheritance from `fieldset` elements in IE +// 3. Remove the padding so developers are not caught out when they zero out +// `fieldset` elements in all browsers +legend { + max-width: 100%; // 1 + padding: 0; // 3 + color: inherit; // 2 + white-space: normal; // 1 +} + +// 1. Remove the default vertical scrollbar in IE +textarea { + overflow: auto; // 1 +} + +// Remove the padding in IE 10 +[type="checkbox"], +[type="radio"] { + padding: 0; +} + +// Correct the cursor style of increment and decrement buttons in Safari +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +// 1. Correct the odd appearance in Chrome and Safari +// 2. Correct the outline style in Safari +[type="search"] { + -webkit-appearance: textfield; // 1 + outline-offset: -2px; // 2 +} + +// Remove the inner padding in Chrome and Safari on macOS +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +// 1. Correct the inability to style clickable types in iOS and Safari +// 2. Change font properties to `inherit` in Safari +::-webkit-file-upload-button { + -webkit-appearance: button; // 1 + font: inherit; // 2 +} + +// Remove the inner border and padding of focus outlines in Firefox +::-moz-focus-inner { + padding: 0; + border-style: none; +} + +// Remove the focus outline in Firefox +:-moz-focusring { + outline: none; +} + +// Remove the additional :invalid styles in Firefox +:-moz-ui-invalid { + box-shadow: none; +} + +// Change the inconsistent appearance in IE (opinionated) +::-ms-expand { + display: none; +} + +// Remove the border and padding in all browsers (opinionated) +[type="file"], +[type="range"] { + padding: 0; + border-width: 0; +} + +// Pico +// –––––––––––––––––––– + +// Force height for alternatives input types +input:not([type="checkbox"], [type="radio"], [type="range"]) { + height: calc( + (1rem * var(--line-height)) + (var(--form-element-spacing-vertical) * 2) + + (var(--border-width) * 2) + ); +} + +// Fieldset +fieldset { + margin: 0; + margin-bottom: var(--spacing); + padding: 0; + border: 0; +} + +// Label & legend +label, +fieldset legend { + display: block; + margin-bottom: calc(var(--spacing) * 0.25); + font-weight: var(--form-label-font-weight, var(--font-weight)); +} + +// Blocks, 100% +input:not([type="checkbox"], [type="radio"]), +select, +textarea { + width: 100%; +} + +// Reset appearance (Not Checkboxes, Radios, Range and File) +input:not([type="checkbox"], [type="radio"], [type="range"], [type="file"]), +select, +textarea { + appearance: none; + padding: var(--form-element-spacing-vertical) + var(--form-element-spacing-horizontal); +} + +// Commons styles +input, +select, +textarea { + --background-color: var(--form-element-background-color); + --border-color: var(--form-element-border-color); + --color: var(--form-element-color); + --box-shadow: none; + border: var(--border-width) solid var(--border-color); + border-radius: var(--border-radius); + outline: none; + background-color: var(--background-color); + box-shadow: var(--box-shadow); + color: var(--color); + font-weight: var(--font-weight); + + @if $enable-transitions { + transition: background-color var(--transition), + border-color var(--transition), color var(--transition), + box-shadow var(--transition); + } +} + +// Active & Focus +input:not([type="submit"], [type="button"], [type="reset"], [type="checkbox"], [type="radio"], [readonly]), +:where(select, textarea) { + &:is(:active, :focus) { + --background-color: var(--form-element-active-background-color); + } +} + +// Active & Focus +input:not([type="submit"], [type="button"], [type="reset"], [role="switch"], [readonly]), +:where(select, textarea) { + &:is(:active, :focus) { + --border-color: var(--form-element-active-border-color); + } +} + +// Focus +input:not([type="submit"], [type="button"], [type="reset"], [type="range"], [type="file"], [readonly]), +select, +textarea { + &:focus { + --box-shadow: 0 0 0 var(--outline-width) var(--form-element-focus-color); + } +} + +// Disabled +input:not([type="submit"], [type="button"], [type="reset"])[disabled], +select[disabled], +textarea[disabled], +:where(fieldset[disabled]) :is(input:not([type="submit"], [type="button"], [type="reset"]), select, textarea) { + --background-color: var(--form-element-disabled-background-color); + --border-color: var(--form-element-disabled-border-color); + opacity: var(--form-element-disabled-opacity); + pointer-events: none; +} + +// Aria-invalid +:where(input, select, textarea) { + &:not([type="checkbox"], [type="radio"], [type="date"], [type="datetime-local"], [type="month"], [type="time"], [type="week"]) { + &[aria-invalid] { + @if $enable-important { + padding-right: calc( + var(--form-element-spacing-horizontal) + 1.5rem + ) !important; + padding-left: var(--form-element-spacing-horizontal); + padding-inline-start: var(--form-element-spacing-horizontal) !important; + padding-inline-end: calc( + var(--form-element-spacing-horizontal) + 1.5rem + ) !important; + } + @else { + padding-right: calc(var(--form-element-spacing-horizontal) + 1.5rem); + padding-left: var(--form-element-spacing-horizontal); + padding-inline-start: var(--form-element-spacing-horizontal); + padding-inline-end: calc(var(--form-element-spacing-horizontal) + 1.5rem); + } + background-position: center right 0.75rem; + background-size: 1rem auto; + background-repeat: no-repeat; + } + + &[aria-invalid="false"] { + background-image: var(--icon-valid); + } + + &[aria-invalid="true"] { + background-image: var(--icon-invalid); + } + } + + &[aria-invalid="false"] { + --border-color: var(--form-element-valid-border-color); + + &:is(:active, :focus) { + @if $enable-important { + --border-color: var(--form-element-valid-active-border-color) !important; + --box-shadow: 0 0 0 var(--outline-width) var(--form-element-valid-focus-color) !important; + } + @else { + --border-color: var(--form-element-valid-active-border-color); + --box-shadow: 0 0 0 var(--outline-width) var(--form-element-valid-focus-color); + } + } + } + + &[aria-invalid="true"] { + --border-color: var(--form-element-invalid-border-color); + + &:is(:active, :focus) { + @if $enable-important { + --border-color: var(--form-element-invalid-active-border-color) !important; + --box-shadow: 0 0 0 var(--outline-width) var(--form-element-invalid-focus-color) !important; + } + @else { + --border-color: var(--form-element-invalid-active-border-color); + --box-shadow: 0 0 0 var(--outline-width) var(--form-element-invalid-focus-color); + } + } + } +} + +[dir="rtl"] { + :where(input, select, textarea) { + &:not([type="checkbox"], [type="radio"]) { + &:is([aria-invalid], [aria-invalid="true"], [aria-invalid="false"] ){ + background-position: center left 0.75rem; + } + } + } +} + +// Placeholder +input::placeholder, +input::-webkit-input-placeholder, +textarea::placeholder, +textarea::-webkit-input-placeholder, +select:invalid { + color: var(--form-element-placeholder-color); + opacity: 1; +} + +// Margin bottom (Not Checkboxes and Radios) +input:not([type="checkbox"], [type="radio"]), +select, +textarea { + margin-bottom: var(--spacing); +} + +// Select +select { + // Unstyle the caret on `<select>`s in IE10+. + &::-ms-expand { + border: 0; + background-color: transparent; + } + + &:not([multiple], [size]) { + padding-right: calc(var(--form-element-spacing-horizontal) + 1.5rem); + padding-left: var(--form-element-spacing-horizontal); + padding-inline-start: var(--form-element-spacing-horizontal); + padding-inline-end: calc(var(--form-element-spacing-horizontal) + 1.5rem); + background-image: var(--icon-chevron); + background-position: center right 0.75rem; + background-size: 1rem auto; + background-repeat: no-repeat; + } +} + +[dir="rtl"] { + select { + &:not([multiple], [size]) { + background-position: center left 0.75rem; + } + } +} + +// Helper +$inputs: "input, select, textarea"; + +@if ($enable-classes and $enable-grid) { + $inputs: $inputs + ", .grid"; +} + +:where(#{$inputs}) { + + small { + display: block; + width: 100%; + margin-top: calc(var(--spacing) * -0.75); + margin-bottom: var(--spacing); + color: var(--muted-color); + } +} + +// Styles for Input inside a label +label { + > :where(input, select, textarea) { + margin-top: calc(var(--spacing) * 0.25); + } +} |