UNPKG

@roadtrip/css

Version:

CSS framework for Roadtrip Design System

213 lines (177 loc) 4.59 kB
/* * Checkbox * * For accessibility, we provide a style for focus only on Tab, * for that add the javascript polyfill for focus-visible * (https://github.com/WICG/focus-visible). * * Index * - Checkbox * - Checkbox label * - Checkbox error * */ /* CHECKBOX -------------------- */ .form-check { position: relative; display: block; margin-bottom: 1.5rem; font-family: var(--road-font); font-size: var(--road-font-size-16); line-height: 1.5; color: var(--road-on-surface); } /** * Hide input */ .form-check-input { position: absolute; z-index: -1; opacity: 0; } /* LABEL -------------------- */ .form-check-label { position: relative; display: inline-flex; margin: 0; cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } .form-check-label-span { margin-left: var(--road-spacing-02); color: var(--road-on-surface-weak); } .form-check-label::before { box-sizing: border-box; display: block; flex-shrink: 0; width: 1.25rem; height: 1.25rem; margin: 0 0.75rem 0 0; content: ""; background: var(--road-surface); border: 1px solid var(--road-input-outline); border-radius: 0.25rem; transition: border 0.2s ease-in-out, background 0.2s ease-in-out; } .form-check-label::after { position: absolute; top: 0.125rem; left: 0.125rem; box-sizing: border-box; display: block; width: 0.375rem; height: 0.75rem; content: ""; border-top: 0.0625rem solid transparent; border-right: 0.0625rem solid var(--road-surface); border-bottom: 0.0625rem solid var(--road-surface); border-left: 0.0625rem solid transparent; opacity: 0; transition: opacity 0.2s ease-in-out; transform: rotateZ(45deg); transform-origin: 100% 100%; } /** * Hover state */ @media (hover: hover) { .form-check-input:not(:disabled) ~ .form-check-label:hover::before { border-color: var(--road-input-surface-variant); } .form-check-input:checked ~ .form-check-label:hover::before, .form-check-input:indeterminate ~ .form-check-label:hover::before { background: var(--road-input-surface-variant); } } /** * Checked state */ .form-check-input:checked ~ .form-check-label::after { opacity: 1; } .form-check-input:checked ~ .form-check-label::before { background: var(--road-input-surface); border-color: var(--road-input-surface); } /** * Indeterminate state */ .form-check-input:indeterminate ~ .form-check-label::after { top: 0.5rem; left: 0.25rem; width: 0.75rem; height: 0; border-width: 1.25px; border-right: 0; border-left: 0; opacity: 1; transform: none; } .form-check-input:indeterminate ~ .form-check-label::before { background: var(--road-input-surface); border-color: var(--road-input-surface); } /** * Focus on Tab */ .form-check-input.focus-visible ~ .form-check-label::before { box-shadow: 0 0 0 0.125rem var(--road-grey-000), 0 0 0 0.1875rem var(--road-primary-700); } .form-check-input.focus-visible:checked ~ .form-check-label::before, .form-check-input.focus-visible:indeterminate ~ .form-check-label::before { background: var(--road-input-surface-variant); border-color: var(--road-input-surface-variant); } /** * Disabled state */ .form-check-input:disabled ~ .form-check-label, .form-check-input[readonly] ~ .form-check-label { cursor: not-allowed; } .form-check-input:disabled ~ .form-check-label::before, .form-check-input[readonly] ~ .form-check-label::before { background: var(--road-surface-disabled); border: none; } .form-check-input:disabled ~ .form-check-label::after, .form-check-input[readonly] ~ .form-check-label::after { border-right: 0.0625rem solid var(--road-on-surface-disabled); border-bottom: 0.0625rem solid var(--road-on-surface-disabled); } /* ERROR -------------------- */ .form-check .invalid-feedback { display: none; flex: 0 0 100%; width: 100%; margin-top: 0.5rem; margin-left: var(--road-spacing-07); font-size: var(--road-font-size-12); color: var(--road-on-danger-default-surface); } .form-check-input.is-invalid ~ .form-check-label::before, .was-validated .form-check-input:invalid ~ .form-check-label::before { border-color: var(--road-danger-outline); } .form-check-input.is-invalid ~ .invalid-feedback, .was-validated .form-check-input:invalid ~ .invalid-feedback { display: block; } /* POSITION -------------------- */ .form-checkbox-inverse { display: flex; flex-direction: row-reverse; justify-content: space-between; } .form-checkbox-inverse::before { margin: 0 0 0 1rem; } .form-checkbox-inverse::after { right: 0.75rem; left: auto; }