CSS псевдоклассы изменяют значение select, когда мышь покидает Firefox
У меня есть интересная проблема, которую нужно решить.
Я использую комбинацию псевдоклассов (точно как здесь: div[data-used="true"]:hover::after
) для изменения содержимого моего элемента after
, Когда hover
как здесь:
select{
color: #9E9E9E;
font-size: 16px;
padding: 12px;
background: #ffffff;
border-radius: 4px;
border: solid 1px;
border-bottom-width: 3px;
border-color: #BDBDBD;
outline: none;
margin: 4px 8px;
height: 48px;
box-sizing: border-box;
vertical-align: bottom;
line-height: 21px;
}
select:hover{
border-color: #03A9F4 !important;
color: #03A9F4 !important;
background: #fff !impotrant;
box-shadow: 0px 0px 6px 1px rgba(33, 150, 243, 0.36);
}
select:first-of-type{
margin-left: 0;
}
div[data-used="true"]{
position: relative;
display: inline-block;
}
div[data-used="true"]::after{
content: "✓";
position: absolute;
padding: 4px;
background: #FFF;
width: 15px;
height: 26px;
box-sizing: border-box;
z-index: 1;
bottom: 2px;
line-height: 17px;
text-indent: -9px;
font-size: 15px;
color: #8BC34A;
font-weight: 600;
left: -1px;
transform: translateY(-50%);
}
div[data-used="true"]:hover::after{
content: "✖";
text-indent: -11px;
line-height: 17px;
font-size: 18px;
color: #2196F3;
background: #fff;
font-weight: 400;
}
<div class="req" data-used="true">
<label>
<div class="addad-step-box">
<div class="addad-step">Rodzaj paliwa<sup>*</sup></div>
</div>
</label>
<select id="xyz_paliwo">
<option>-- wybierz --</option>
<option>Benzyna</option>
<option>Diesel</option>
<option>Benzyna + LPG</option>
<option>Benzyna + CNG</option>
<option>Hybryda</option>
<option>Elektryczny</option>
<option>Wodór</option>
<option>Etanol</option>
</select>
</div>
Как вы можете видеть, в Firefox, когда вы выбираете что-то, а затем снова нажимаете на список, но вы не нажимаете на какое-либо новое значение, но наведите курсор мыши на новое значение, а затем оставьте мышь вне select, select изменяет значение...
Не знаю. почему?.
Есть идеи?
1 ответ:
Что обычно происходит
В обычной ситуации (без всех этих свойств CSS) с открытым
<select
>, когда мышь проходит над<select>
элементами, они рассматриваются последовательно как выбранные (показан синий фон).Если вы нажмете на элемент, он сохранит этовыбранное состояние.
<select
> закрывается, запускаются события JS, и показанное значение<select>
является этим выбранным элементом. Если вы снова откроете<select>
, Элемент все еще находится в синий.Если вы нажмете кнопку "прочь" во время открытия
<select
>, выбранный элемент будет сброшен на предыдущий.Что здесь произошло
Ошибка возникла в результате пересечения двух типов поведения Firefox:
- при изменении содержания
div::after
рендерингdiv
(и его детей) пересчитывается.- A
<select>
всегда считает свой выбранный предмет (тот, что с синим фоном) своим текущим значением.Шаг за шагом :
- вы нажимаете на
<select>
, это открывает меню.- мышь проходит над
<select>
элементами, которые рассматриваются последовательно каквыбранные .- мыши выходят из
<div>
, так что :
::after
содержание изменено<div>
содержание пересчитывается<select>
сбрасывается, поэтому показан в его закрытом состоянии- И... последний элемент, на который была наведена мышь, все еще выбран
Итак "визуально закрытый"
<select>
показывает этот последний выбранный элемент как выбранный. Никаких событий в JS срабатывает. Но это не только визуальная ошибка. В Firefox значение<select>
(elem.value
) изменяется при наведении курсора мыши на его элементы.См. скрипка
Как это исправить
Это поведение Firefox
<select>
, вы ничего не можете сделать против этого, кроме как создать свой собственный select в Js.Чтобы предотвратить закрытие
<select>
, когда мышь уйдет, удалить:div[data-used="true"]::after:hover{ content: "✖"; }