@amVeronika

Запретить срабатывание :hover css до повторного наведения без js?

У меня чекбокс кастомный(в виде прямоугольной кнопки) - задний фон белый.
При наведении, когда input not(:checked), background с белого меняется на синий путем выезжания слева направо псевдоэлемента ::before. При отведении мыши с input, задний фон просто становится opacity = 0.
Сам input в момент :checked меняет задний фон на синий.
При повторном :hover, когда элемент :checked, задний фон - background становится белым. Таким же путём, выезжания слева направо псевдоэлемента только уже ::after.
Всё бы ничего, но при наведении мыши на input , когда белый фон к примеру сменится на синий и я нажимаю @click, то тут же применяется второй :hover...
<div>
   <input id="id">
   <label for="id"><span></span>
   </label>
</div>


input + .wrap {
    cursor: pointer;
    position: relative;
    overflow: hidden;

    $radius: 40;
    $base-px: 16;

    &::before {
        content: "";
        position: absolute;
        bottom: 0;
        left: 0;
        top: 0;
        right: 0;
        background: blue;
        box-shadow:
            inset 0 0 em(50, $base-px) rgb(255 255 255 / 5%),
            inset 0 em(3, $base-px) em(3, $base-px) rgb(255 255 255 / 15%);
        border-radius: em($radius, $base-px);
        opacity: 0;
        transform: translateX(-101%);
        transition: transform 0ms ease 340ms, opacity 300ms ease;
        z-index: 1;
    }

    &::after {
        content: "";
        position: absolute;
        bottom: 0;
        left: 0;
        top: 0;
        right: 0;
        background: white;
        box-shadow:
            inset 0 0 em(50, $base-px) rgb(255 255 255 / 5%),
            inset 0 em(3, $base-px) em(3, $base-px) rgb(255 255 255 / 15%);
        border-radius: em($radius, $base-px);
        opacity: 0;
        transform: translateX(-101%);
        transition: transform 0ms ease 340ms, opacity 300ms ease;
        z-index: 1;
    }

    // fix safari bug
    isolation: isolate;
}
input:not(:checked) + .wrap{
    background: white;
    color: black;
    transition: color 0.55s ease, background 0.55s ease;

    &:hover {
        color: white;
        transition: color 0.55s ease 300ms;

        &::after {
            opacity: 0;
        }

        &::before {
            opacity: 1;
            transform: translateX(0);
            transition: transform 300ms ease 300ms, opacity 0ms ease 300ms;
        }
    }
}
input:checked + .wrap {
    background: blue;
    color: white;

    //transition: color 0.55s ease, background 0.55s ease;

    &:hover {
        color: black;
        transition: color 0.55s ease 300ms;

        &::before {
            opacity: 0;
        }

        &::after {
            opacity: 1;
            transform: translateX(0);
            transition: transform 300ms ease 300ms, opacity 0ms ease 300ms;
        }
    }
}
  • Вопрос задан
  • 115 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы