checkboxes.css
ASCII text
1/* Checkbox */ 2 3input[type="checkbox"]:not(.switch) { 4width: var(--size-checkbox); 5height: var(--size-checkbox); 6aspect-ratio: 1/1; 7appearance: none; /* Remove browser default styles */ 8border: var(--border-checkbox); 9border-radius: var(--radius-checkbox); 10color: var(--color-checkbox-text); 11background: var(--color-checkbox); 12box-shadow: inset 0 0 0 0 transparent, var(--shadow-form); 13/* Centre the checkmark */ 14display: inline-flex; 15align-items: center; 16justify-content: center; 17position: relative; 18cursor: pointer; /* a11y */ 19} 20 21input[type="checkbox"]:not(.switch):hover { 22box-shadow: inset 0 0 0 0 transparent, var(--shadow-form-hover); 23border: var(--border-checkbox-hover); 24background: var(--color-checkbox-hover); 25color: var(--color-checkbox-hover-text); 26} 27 28input[type="checkbox"]:not(.switch):checked { 29/* Box shadows are shown when printed */ 30box-shadow: inset 0 0 0 var(--size-checkbox) var(--color-checkbox-active), var(--shadow-form-checked); 31border: var(--border-checkbox-checked); 32color: var(--color-checkbox-active-text); 33} 34 35input[type="checkbox"]:not(.switch):checked:hover { 36box-shadow: inset 0 0 0 var(--size-checkbox) var(--color-checkbox-active-hover), var(--shadow-form-checked-hover); 37border: var(--border-checkbox-checked-hover); 38color: var(--color-checkbox-active-hover-text); 39} 40 41input[type="checkbox"]:not(.switch):indeterminate { 42/* Box shadows are shown when printed */ 43box-shadow: inset 0 0 0 var(--size-checkbox) var(--color-checkbox-indeterminate), var(--shadow-form-indeterminate); 44border: var(--border-checkbox-indeterminate); 45color: var(--color-checkbox-indeterminate-text); 46} 47 48input[type="checkbox"]:not(.switch):indeterminate:hover { 49box-shadow: inset 0 0 0 var(--size-checkbox) var(--color-checkbox-indeterminate-hover), var(--shadow-form-indeterminate-hover); 50border: var(--border-checkbox-indeterminate-hover); 51color: var(--color-checkbox-active-hover-text); 52} 53 54input[type="checkbox"]:not(.switch):indeterminate:hover::after { 55background: var(--color-checkbox-indeterminate-hover-text); 56} 57 58input[type="checkbox"]:not(.switch):indeterminate::after { 59/* Position directly on top of the checkbox */ 60position: absolute; 61width: var(--size-checkbox); 62height: var(--size-checkbox); 63content: ""; 64background: var(--color-checkbox-indeterminate-text); 65/* Display the checkmark */ 66-webkit-mask: url("./icons/checkbox-indeterminate.svg"); 67mask: url("./icons/checkbox-indeterminate.svg"); 68} 69 70input[type="checkbox"]:not(.switch):checked::after { 71/* Position directly on top of the checkbox */ 72position: absolute; 73width: var(--size-checkbox); 74height: var(--size-checkbox); 75content: ""; 76background: var(--color-checkbox-active-text); 77/* Display the checkmark */ 78-webkit-mask: url("./icons/checkbox.svg"); 79mask: url("./icons/checkbox.svg"); 80} 81 82input[type="checkbox"]:not(.switch):checked:hover::after { 83background: var(--color-checkbox-active-hover-text); 84} 85 86label:has(input[type="checkbox"]) { 87display: inline-flex; /* So they are aligned */ 88gap: var(--gap-label-checkbox); 89align-items: center; 90cursor: pointer; /* a11y */ 91} 92 93/* Radio */ 94 95input[type="radio"]:not(.switch) { 96width: var(--size-checkbox); 97height: var(--size-checkbox); 98aspect-ratio: 1/1; 99appearance: none; /* Remove browser default styles */ 100border: var(--border-radio); 101border-radius: var(--radius-radio); 102color: var(--color-radio-text); 103background: var(--color-radio); 104box-shadow: inset 0 0 0 0 transparent, var(--shadow-form); 105/* Centre the checkmark */ 106display: inline-flex; 107align-items: center; 108justify-content: center; 109position: relative; 110cursor: pointer; /* a11y */ 111} 112 113input[type="radio"]:not(.switch):hover { 114box-shadow: inset 0 0 0 0 transparent, var(--shadow-form-hover); 115border: var(--border-radio-hover); 116background: var(--color-radio-hover); 117color: var(--color-radio-hover-text); 118} 119 120input[type="radio"]:not(.switch):checked { 121/* Box shadows are shown when printed */ 122box-shadow: inset 0 0 0 var(--size-checkbox) var(--color-radio-active), var(--shadow-form-checked); 123border: var(--border-radio-checked); 124color: var(--color-radio-active-text); 125} 126 127input[type="radio"]:not(.switch):checked:hover { 128box-shadow: inset 0 0 0 var(--size-checkbox) var(--color-radio-active-hover), var(--shadow-form-checked-hover); 129border: var(--border-checkbox-checked-hover); 130color: var(--color-radio-active-hover-text); 131} 132 133input[type="radio"]:not(.switch):checked:hover::after { 134background: var(--color-radio-active-hover-text); 135} 136 137input[type="radio"]:not(.switch):checked::after { 138/* Position directly on top of the checkbox */ 139position: absolute; 140width: var(--size-checkbox); 141height: var(--size-checkbox); 142content: ""; 143background: var(--color-radio-active-text); 144/* Display the checkmark */ 145-webkit-mask: url("./icons/radio.svg"); 146mask: url("./icons/radio.svg"); 147} 148 149label:has(input[type="radio"]) { 150display: inline-flex; /* So they are aligned */ 151gap: var(--gap-label-checkbox); 152align-items: center; 153cursor: pointer; /* a11y */ 154} 155 156/* Checkbox - switch style */ 157 158:is(input[type="checkbox"], input[type=radio]).switch { 159appearance: none; 160width: var(--width-switch); 161height: var(--height-switch); 162background: var(--color-switch); 163border-radius: var(--radius-switch); 164cursor: pointer; 165display: flex; 166align-items: center; 167justify-content: flex-start; 168} 169 170:is(input[type="checkbox"], input[type=radio]).switch:checked { 171background: var(--color-switch-on); 172border-radius: var(--radius-switch); 173cursor: pointer; 174display: flex; 175align-items: center; 176justify-content: flex-start; 177} 178 179:is(input[type="checkbox"], input[type=radio]).switch::after { 180background: var(--color-switch-thumb); 181box-shadow: var(--shadow-switch-thumb); 182content: ""; 183width: var(--width-switch-thumb); 184height: var(--height-switch-thumb); 185border-radius: var(--radius-switch-thumb); 186transform: translateX(calc(var(--padding-switch-thumb))); 187} 188 189:is(input[type="checkbox"], input[type=radio]).switch:checked::after { 190background-color: var(--color-switch-thumb-on); 191box-shadow: var(--shadow-switch-thumb-on); 192border: var(--border-switch-thumb-on); 193transform: translateX(calc(var(--width-switch) - var(--width-switch-thumb-on) - var(--padding-switch-thumb-on))); 194border-radius: var(--radius-switch-thumb-on); 195} 196 197:is(input[type="checkbox"], input[type=radio]).switch:hover { 198background-color: var(--color-switch-hover); 199box-shadow: var(--shadow-switch-hover); 200border: var(--border-switch-hover); 201} 202 203:is(input[type="checkbox"], input[type=radio]).switch:hover::after { 204background-color: var(--color-switch-thumb-hover); 205box-shadow: var(--shadow-switch-thumb-hover); 206border: var(--border-switch-thumb-hover); 207width: var(--width-switch-thumb-hover); 208height: var(--height-switch-thumb-hover); 209} 210 211:is(input[type="checkbox"], input[type=radio]).switch:checked:hover { 212background-color: var(--color-switch-on-hover); 213box-shadow: var(--shadow-switch-on-hover); 214border: var(--border-switch-on-hover); 215} 216 217:is(input[type="checkbox"], input[type=radio]).switch:checked:hover::after { 218background-color: var(--color-switch-thumb-on-hover); 219box-shadow: var(--shadow-switch-thumb-on-hover); 220border: var(--border-switch-thumb-on-hover); 221width: var(--width-switch-thumb-on-hover); 222height: var(--height-switch-thumb-on-hover); 223} 224