(нет. Я обновил этот ответ после того, как заметил проблему с HTML).
Я упростил ваш CSS, чтобы попытаться изолировать проблему (я удалил свойства видимости, которые ничего не делают, а также селекторы > *
)
Неудивительно, что в этом случае непредсказуемое поведение, потому что строго говоря, вы не должны помещать элемент уровня блока, такой как <div>
, внутри элемента <a>
.
Похоже, что в этом случае неправильно сформированный HTML, Chrome не распознает значение непрозрачности тега привязки (<a>
), если я не сделаю что-то вроде установки его на display: block
или display:inline-block
. FireFox, Edge и IE распознают непрозрачность независимо.
Лучшим решением было бы исправить ваш HTML, чтобы элементы уровня блока правильно оборачивали встроенные элементы.
.links {
font-weight: bold;
font-size: 20px;
}
.hover:hover a {
opacity: 0.3;
}
.hover a:hover {
opacity: 1;
}
<div class="links hover">
<div class="linkNav"><a href="1.html">1</a></div>
<div class="linkNav"><a href="2.html">2</a></div>
<div class="linkNav"><a href="3.html">3</a></div>
</div>
Я бы порекомендовал исправить это следующим образом, но если по какой-то причине вы не можете исправить HTM, обходной путь - установить свойство display
для ваших тегов привязки. Вот так:
.links {
font-weight: bold;
font-size: 20px;
}
.links a {
display:block;
}
.hover:hover a {
opacity: 0.3;
}
.hover a:hover {
opacity: 1;
}
<div class="links hover">
<a href="1.html"><div class="linkNav">1</div></a>
<a href="2.html"><div class="linkNav">2</div></a>
<a href="3.html"><div class="linkNav">3</div></a>
</div>
Или альтернативное решение - вы можете просто нацелить альтернативный элемент, такой как внутренний div
вместо тега a
.
JSFiddle ссылки для различных решений и оригинального CVE, который демонстрирует проблему (полезно для тестирования в разных браузерах):
Решение путем установки display block
Решение путем изменения селектора на целевой внутренний div
Оригинальный CVE, который работает в большинстве браузеров, но не в Chrome