То, что я хочу сделать, - это когда один определенный объект div
находится под влиянием, это повлияет на свойства другого div
.
Например, в этой демонстрации JSFiddle , когда вы наводите курсор мыши, #cube
это меняет, background-color
но то, что я хочу, это то, что, когда я наводю курсор мыши #container
, #cube
это влияет.
div {
outline: 1px solid red;
}
#container {
width: 200px;
height: 30px;
}
#cube {
width: 30px;
height: 100%;
background-color: red;
}
#cube:hover {
width: 30px;
height: 100%;
background-color: blue;
}
<div id="container">
<div id="cube">
</div>
</div>
~
для «куб находится где-то после контейнера в DOM и разделяет родителя»#container
рядом#cube
, то есть#container
следует#cube
?В этом конкретном примере вы можете использовать:
Этот пример работает только потому, что
cube
является потомкомcontainer
. Для более сложных сценариев вам нужно использовать другой CSS или JavaScript.источник
Использование одноуровневого селектора является общим решением для стилизации других элементов при наведении курсора на заданный элемент, но он работает только в том случае, если другие элементы следуют заданному элементу в DOM . Что мы можем сделать, когда другие элементы должны быть на самом деле раньше наведенного? Скажем, мы хотим реализовать виджет рейтинга сигнальной полосы, как показано ниже:
На самом деле это можно легко сделать с помощью модели flexbox CSS, установив
flex-direction
для нееreverse
так, чтобы элементы отображались в порядке, противоположном тому, в котором они находятся в DOM. Снимок экрана выше - от такого виджета, реализованного с использованием чистого CSS.Flexbox очень хорошо поддерживается 95% современных браузеров.
Показать фрагмент кода
источник
.rating div
border-right: 4px solid white;
Большое спасибо Майку и Роберту за их полезные посты!
Если у вас есть два элемента в вашем HTML, и вы хотите
:hover
более одного и нацелены на изменение стиля в другом, эти два элемента должны быть напрямую связаны - родители, дети или братья и сестры. Это означает, что оба элемента должны быть либо внутри другого, либо оба должны содержаться в одном и том же элементе большего размера.Я хотел, чтобы определения отображались в рамке справа от браузера, когда мои пользователи читали мой сайт и пересекались с
:hover
выделенными терминами; поэтому я не хотел, чтобы элемент 'definition' отображался внутри элемента 'text'.Я почти сдался и просто добавил javascript на свою страницу, но это будущее, черт возьми! Нам не нужно мириться с тем, что back sass из CSS и HTML говорит нам, где мы должны разместить наши элементы для достижения желаемого эффекта! В конце концов мы пошли на компромисс.
В то время как фактические элементы HTML в файле должны быть либо вложенными, либо содержаться в одном элементе, чтобы быть допустимыми
:hover
целями друг для друга,position
атрибут css может использоваться для отображения любого элемента там, где вам нужно Я использовал position: fixed, чтобы разместить цель моего:hover
действия там, где я хотел, на экране пользователя независимо от его расположения в HTML-документе.HTML:
CSS:
В этом примере цель
:hover
команды из элемента в пределах#explainBox
должна быть#explainBox
или внутри#explainBox
. Атрибуты позиции, назначенные #definitions, заставляют его появляться в нужном месте (снаружи#explainBox
), даже если он технически расположен в нежелательной позиции в документе HTML.Я понимаю, это считается плохой формой использования того же
#id
для более чем одного HTML-элемента; однако в этом случае случаи#light
могут быть описаны независимо из-за их соответствующих позиций в уникально#id
d элементах. Есть ли причина не повторятьid
#light
в этом случае?источник
ID
несколько раз. Просто используйтеclass
.Только это сработало для меня:
Где
.cube
находится CssClass#cube
.Протестировано в Firefox , Chrome и Edge .
источник
Вот еще одна идея, которая позволяет вам влиять на другие элементы без учета какого-либо конкретного селектора и только с использованием
:hover
состояния основного элемента.Для этого я буду полагаться на использование пользовательских свойств (переменных CSS). Как мы можем прочитать в спецификации :
Идея состоит в том, чтобы определить пользовательские свойства в главном элементе и использовать их для стилизации дочерних элементов, и, поскольку эти свойства наследуются, нам просто нужно изменить их в главном элементе при наведении.
Вот пример:
Почему это может быть лучше, чем использование специального селектора в сочетании с парением?
Я могу привести по крайней мере две причины, которые делают этот метод хорошим для рассмотрения:
border
,linear-gradient
,background-color
, иbox-shadow
т.д. Это позволит избежать нас переустановки всех эти свойств при наведении курсора мыши.Вот более сложный пример:
Как мы видим выше, нам нужно только одно объявление CSS , чтобы изменить много свойств различных элементов.
источник