Использование: наведите курсор для изменения css другого класса?
Есть ли способ изменить css для одного класса при наведении на элемент из другого класса, используя только css?
Что-то вроде:
.item:hover .wrapper { /*some css*/ }
Только 'wrapper' не находится внутри 'item', это где-то еще.
Я действительно не хочу использовать javascript для чего-то такого простого, но если мне нужно, как бы я это сделал? Здесь моя неудачная попытка:
document.getElementsByClassName('item')[0].onmouseover="document.getElementsByClassName('wrapper')[0].style.background="url('some url')";";
Есть только один элемент каждого класса. Не знаю, почему они не использовали идентификаторы, когда они делали шаблон, но это было именно так, и я не могу его изменить.
[изменить]
Это меню. Каждый элемент меню имеет отдельный класс. При наведении на элемент подменю появляется вправо. Это похоже на наложение, когда я использую инструмент "Inspect Element", я вижу, что весь сайт html изменяется, когда подменю активно (что означает ничего, кроме подменю). Класс, который я называю "оберткой", имеет css, который управляет фоном для подменю. Там действительно нет связи, которую я вижу между двумя классами.
Ответы
Ответ 1
Это невозможно в CSS на данный момент, если вы не хотите выбирать дочерний или родственный элемент (тривиальный и описанный в других ответах здесь).
Для всех остальных случаев вам понадобится JavaScript. jQuery и фреймворки, такие как Angular, могут справиться с этой проблемой с относительной легкостью.
[изменить]
С помощью нового селектора CSS (4) : has() вы сможете настроить целевые родительские элементы/классы, сделав Решение CSS-Only будет доступно в ближайшем будущем!
Ответ 2
Есть два подхода, которые вы можете предпринять, чтобы повлиять на зависавший элемент (E
) другой элемент (F
):
-
F
является дочерним элементом E
или
-
F
- элемент более позднего родства (или родственного потомка) E
(в том, что E
появляется в разметке /DOM до F
):
Чтобы проиллюстрировать первый из этих параметров (F
как потомок/дочерний элемент E
):
.item:hover .wrapper {
color: #fff;
background-color: #000;
}
Чтобы продемонстрировать второй вариант, F
является элементом sibling в E
:
.item:hover ~ .wrapper {
color: #fff;
background-color: #000;
}
В этом примере, если .wrapper
был непосредственным родственником .item
(без других элементов между ними), вы также можете использовать .item:hover + .wrapper
.
демонстрация JS Fiddle.
Литература:
Ответ 3
Предоставленный .wrapper находится внутри .item и при условии, что вы либо не в IE 6, либо .item - это тег, CSS, который у вас есть, должен работать нормально. У вас есть доказательства, чтобы предположить, что это не так?
EDIT:
Только CSS не может повлиять на то, что не содержится в нем. Чтобы это произошло, отформатируйте свое меню так:
<ul class="menu">
<li class="menuitem">
<a href="destination">menu text</a>
<ul class="menu">
<li class="menuitem">
<a href="destination">part of pull-out menu</a>
... etc ...
и ваш CSS:
.menu .menu {
display: none;
}
.menu .menuitem:hover .menu {
display: block;
float: left;
// likely need to set top & left
}
Ответ 4
Вы можете сделать это, выполнив следующий CSS. вы можете поставить здесь css, вам нужно повлиять на дочерний класс в случае наведения на корневой каталог
.root:hover .child {
}