Поясните по поводу псевдоэлементов и соседних селекторов
Приветствую, друзья! Мне нужно изменить внешний вид чекбокса. Решил через LABEL, тем более способ давно известен. Но возникла проблема - изменять html-код я не могу, а span::before и span::after уже плотно используются.
Решил добавить псевдоэлемент к LABEL и от него скакать. Ведь по идее input, span и label::after находятся на одном уровне вложенности. Даже браузеры в DevTools показывают всё именно так. Да и если я к LABEL применю относительное позиционирование, а к label::after - абсолютное, то он будет позиционироваться именно относительно LABEL, что как бы намекает, что label::after находится внутри LABEL. Но в итоге моя идея не работает. Подскажите, почему label::after не хочет менять фон на зелёный? Ну и может какую идею подкинете, как изменить чекбокс? Конечно без JS, с ним-то понятно) ps Вообще походу все браузеры трактуют псевдоэлементы одинаково относительно друг-друга (других браузеров), но по разному относительно нахождения псевдоэлементов в DOM. Используешь позиционирование? Ок, label::after находится внутри label. Используешь соседние селекторы? Э, не, label::after тута нету. А вот span::before и span::after находятся как раз на одном уровне вместе со span, а никак не внутри него.
<!DOCTYPE html>
<html>
<head>
<title></title>
<style>
label::after {
content:'111';
}
input:checked + span + label::after {background:red}
</style>
</head>
<body>
<label>
<input type="checkbox">
<span>Я принимаю условия пользовательского соглашения</span>
</label>
</body>
</html>
|
Цитата:
Цитата:
<!DOCTYPE html>
<html>
<head>
<title></title>
<style>
input {
position:relative;
}
input::after {
content:'111';
position:absolute;
top: 100%;
}
input:checked::after {background-color:green; color:white}
</style>
</head>
<body>
<label>
<input type="checkbox">
<span>Я принимаю условия пользовательского соглашения</span>
</label>
</body>
</html>
|
Хотя извиняюсь, сразу не проверил.
В Хроме это работает, в файрфоксе - нет Идей нет. :has - тоже не работает в файрфоксе и прочих старых браузерах. |
<label> <input type="checkbox"> <span>Я принимаю условия пользовательского соглашения</span> </label>
label input[type="checkbox"] {
opacity: 0;
pointer-events: none;
position: absolute;
}
label input[type="checkbox"] + span::before {
background-position: center center;
background-repeat: no-repeat;
background-size: auto 20px;
border: 1px solid #000000;
border-radius: 4px;
content: '';
cursor: pointer;
display: inline-block;
height: 24px;
margin-right: 8px;
vertical-align: middle;
width: 24px;
}
label input[type="checkbox"]:checked + span::before {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' width='100' height='100' viewBox='0 0 24 24'%3E%3Cpath d='M 20.292969 5.2929688 L 9 16.585938 L 4.7070312 12.292969 L 3.2929688 13.707031 L 9 19.414062 L 21.707031 6.7070312 L 20.292969 5.2929688 z'%3E%3C/path%3E%3C/svg%3E");
}
label input[type="checkbox"]:disabled + span::before {
cursor: default;
opacity: 0.5;
}
label input[type="checkbox"]:focus + span::before {
outline: 1px solid blue;
}
|
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 20:11. |