Ответ 1
Ваше решение выглядит хорошо для CSS3. Я не могу придумать, как улучшить решение для современных браузеров, так как свойство opacity
никогда не будет применяться браузерами, которые в любом случае не поддерживают его.
В отличие от IE6 и NN4 (и старше) нет другого браузера без поддержки :hover
для элементов, отличных от a
. Как подразумевается в вашем вопросе, все браузеры, поддерживающие :not()
, как известно, также полностью поддерживают :hover
.
Тем не менее, вы в конечном итоге оставляете IE7 и IE8 отсутствующими на эффекте зависания, последний из которых все еще довольно распространен. Вероятно, вы также хотите поддерживать IE6, но здесь решение, которое, я считаю, будет решать эти проблемы, если вам это нужно:
-
Опустите
:not(:hover)
в целом, чтобы ваш первый селектор стал менее конкретным, а не таким же специфичным для вашего второго селектора с:hover
, и, вы можете связаться с IE7 и IE8, t поддерживают:not()
, но поддерживают:hover
для всех визуальных элементов:div span.question { opacity: 0; } div:hover span.question { opacity: 1; }
-
Используйте свойство
visibility
вместо свойстваopacity
для доступа к IE7 и IE8, которые не поддерживают CSS3opacity
:div span.question { visibility: hidden; } div:hover span.question { visibility: visible; }
Имейте в виду, что
visibility: hidden
также сделает элемент невидимым для мыши, но в этом случае вы применяете его к дочернему элементу, поэтому родительский элемент останется видимым для наложения мышью. -
Используйте комбайны CSS2/3, которые IE6 не поддерживает, но IE7 и IE8 делают (дочерний
>
, смежный sibling+
, общий sibling~
), чтобы скрыть оба правила из IE6. Это граничит с "взломанным", но ваша ситуация такова, что детский комбинатор>
подходит очень хорошо, поэтому его можно интегрировать органично, а не взломать, как знаменитый фильтрhtml > body
:div > span.question { visibility: hidden; } div:hover > span.question { visibility: visible; }