<label class="c-checkbox" for="checkbox-1">
<input id="checkbox-1" class="c-checkbox__input" type="checkbox" />
<div class="c-checkbox__state">
<div class="c-checkbox__control">
<svg class="c-checkbox__icon icon icon--input-check" stroke="currentColor">
<use xlink:href="img/svg/sprite.svg#input-check" />
</svg>
</div>
<div class="c-checkbox__title">Заголовок 1</div>
</div>
</label>
<label class="c-radio" for="radio-1">
<input
class="c-radio__input"
type="radio"
name="radio"
id="radio-1"
value="radio-1"
/>
<div class="c-radio__state">
<div class="c-radio__control"></div>
<div class="c-radio__title">Заголовок 1</div>
</div>
</label>
<label class="c-switch" for="switch-off">
<input
class="c-switch__input"
type="checkbox"
name="switch-off"
id="switch-off"
/>
<div class="c-switch__state">
<div class="c-switch__control"></div>
<div class="c-switch__title">Выключатель</div>
</div>
</label>
<div class="c-input-field">
<div class="c-input">
<label class="c-input__label" for="text-1">
<div class="c-input__title">Отключено</div>
<div class="c-input__input-wrapper">
<input
class="c-input__input"
id="text-1"
type="text"
placeholder="Ввод недоступен"
disabled
/>
</div>
</label>
</div>
</div>
.c-checkbox {
--clr-checkbox-checked-back: var(--clr-primary-1);
--clr-checkbox-checked-border: var(--clr-primary-1);
--clr-checkbox-input-border: var(--clr-gray-2);
--clr-checkbox-disabled: var(--clr-gray-2);
--clr-checkbox-disabled-title: var(--clr-gray-2);
--clr-checkbox-animation: var(--clr-sym-checkbox-animation);
cursor: pointer;
}
.c-checkbox__icon {
color: var(--clr-white);
display: none;
fill: none;
}
.c-checkbox__input {
position: absolute;
left: -100vw;
opacity: 0;
}
.c-checkbox__state {
display: flex;
align-items: center;
margin: 1rem 1.3125rem;
}
.c-checkbox__title {
font-weight: 400;
font-size: 1rem;
line-height: 1.5;
color: var(--clr-font);
}
.c-checkbox__control {
width: 1.75rem;
height: 1.75rem;
border-radius: 4px;
border: 1px solid var(--clr-checkbox-input-border);
display: flex;
align-items: center;
justify-content: center;
margin-right: 0.75rem;
}
@keyframes borderGrow {
from {
outline: 0rem solid rgba(var(--clr-checkbox-animation), 0.3);
}
to {
outline: 1.875rem solid rgba(var(--clr-checkbox-animation), 0);
}
}
.c-checkbox__input:checked ~ .c-checkbox__state .c-checkbox__control {
background-color: var(--clr-checkbox-checked-back);
border: 1px solid var(--clr-checkbox-checked-border);
}
.c-checkbox__input:focus:checked ~ .c-checkbox__state .c-checkbox__control {
animation: borderGrow 300ms ease-out;
}
.c-checkbox__input:checked ~ .c-checkbox__state .c-checkbox__control .c-checkbox__icon {
display: inline-block;
}
.c-checkbox__input:focus ~ .c-checkbox__state .c-checkbox__title {
text-decoration: underline;
}
.c-checkbox__input:disabled ~ .c-checkbox__state .c-checkbox__control {
background-color: var(--clr-checkbox-disabled);
}
.c-checkbox__input:disabled ~ .c-checkbox__state .c-checkbox__title {
color: var(--clr-checkbox-disabled-title);
}
.c-checkbox__input:disabled ~ .c-checkbox__state .c-checkbox__control .c-checkbox__icon {
display: none;
}
.c-radio {
--clr-radio-unchecked-border: var(--clr-gray-2);
--clr-radio-color: var(--clr-primary-1);
--clr-radio-title: var(--clr-gray-2);
--clr-radio-disabled-back: var(--clr-gray-2);
--clr-radio-disabled-border: var(--clr-gray-2);
display: inline-flex;
cursor: pointer;
}
.c-radio__input {
opacity: 0;
position: absolute;
left: -100vw;
}
.c-radio__state {
display: flex;
align-items: center;
margin: 1rem 1.3125rem;
}
.c-radio__control {
position: relative;
width: 1.75rem;
height: 1.75rem;
border: 1px solid var(--clr-radio-unchecked-border);
border-radius: 50%;
margin-right: 0.75rem;
}
.c-radio__title {
font-weight: 400;
font-size: 1rem;
line-height: 1.5;
color: var(--clr-font);
}
.c-radio__input:checked ~ .c-radio__state .c-radio__control {
border: 2px solid var(--clr-radio-color);
}
.c-radio__input:checked ~ .c-radio__state .c-radio__control::after {
width: 1.125rem;
height: 1.125rem;
content: "";
position: absolute;
background-color: var(--clr-radio-color);
border-radius: 50%;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
.c-radio__input:focus ~ .c-radio__state .c-radio__title {
text-decoration: underline;
}
.c-radio__input:disabled ~ .c-radio__state .c-radio__title {
color: var(--clr-radio-title);
}
.c-radio__input:disabled ~ .c-radio__state .c-radio__control {
background-color: var(--clr-radio-disabled-back);
border: 2px solid var(--clr-radio-disabled-border);
}
.c-switch {
display: inline-flex;
cursor: pointer;
}
.c-switch__input {
opacity: 0;
position: absolute;
left: -100vw;
}
.c-switch__control {
position: relative;
width: 3.25rem;
height: 1.75rem;
border: 1px solid var(--clr-gray-2);
border-radius: 1rem;
box-sizing: border-box;
margin-right: 0.75rem;
transition: background-color 0.2s;
}
.c-switch__state {
display: flex;
align-items: center;
margin: 1rem 1.3125rem;
}
.c-switch__control::before {
content: "";
width: 1.5rem;
height: 1.5rem;
position: absolute;
left: 0.0625rem;
top: calc(50% - 0.75rem);
background-color: var(--clr-gray-2);
border-radius: 50%;
transition: left 0.2s;
}
.c-switch__input:checked ~ .c-switch__state .c-switch__control {
border: 1px solid var(--clr-primary-1);
background-color: var(--clr-primary-1);
}
.c-switch__input:checked ~ .c-switch__state .c-switch__control::before {
left: 1.5625rem;
background-color: var(--clr-white);
}
.c-switch__input:disabled ~ .c-switch__state .c-switch__control {
background-color: var(--clr-gray-2);
}
.c-switch__input:disabled ~ .c-switch__state .c-switch__control::before {
background-color: var(--clr-gray-3);
}
.c-switch__input:focus ~ .c-switch__state .c-switch__title {
text-decoration: underline;
}
.c-input {
--clr-input-back: var(--clr-sym-input-back);
--clr-input-border: var(--clr-gray-2);
--clr-input-placeholder: var(--clr-gray-2);
--clr-input-invalid: #F03D3E;
--clr-input-icon-valid: #374FC7;
--clr-input-border-focus: var(--clr-primary-1);
--clr-input-back-disabled: var(--clr-sym-input-back-disabled);
}
.c-input__title {
font-weight: 500;
font-size: 0.75rem;
line-height: 1.5;
text-transform: uppercase;
margin-bottom: 0.3125rem;
color: var(--clr-gray-3);
}
.c-input__input::placeholder {
color: var(--clr-input-placeholder);
}
.c-input__input {
all: unset;
display: initial;
width: 100%;
font-weight: 400;
font-size: 1.25rem;
line-height: 1.3;
}
.c-input__input-wrapper {
padding: 1.0625rem 0 0.8125rem 1.5rem;
border: 1px solid var(--clr-input-border);
border-radius: 8px;
transition: border 100ms ease-in-out;
}
.c-input__input-wrapper:has(> .c-input__input + .icon) {
padding-right: 3.125rem;
}
.c-input__input-wrapper:has(> .c-input__input:disabled) {
background-color: var(--clr-input-back-disabled);
cursor: no-drop;
}
.c-input__input-wrapper:has(> .c-input__input:focus) {
border: 1px solid var(--clr-input-border-focus);
}
.c-input__input-wrapper:has(> .c-input__input.c-input__invalid) {
border: 1px solid var(--clr-input-invalid);
}
.c-input__input-wrapper:has(> .c-input__icon) {
position: relative;
}
.c-input__icon {
position: absolute;
top: 1.125rem;
right: 1.125rem;
opacity: 0;
}
.c-input__icon--valid {
color: var(--clr-input-icon-valid);
}
.c-input__icon--invalid {
color: var(--clr-input-invalid);
}
.c-input .c-input__icon.c-input__icon--valid,
.c-input .c-input__icon.c-input__icon--invalid {
opacity: 1;
}