соседнему Sibling Selector (+
) работает на соседнем следующем собрата в DOM, а не предыдущий. В этом случае div
, который вы хотите показывать при зависании на img
, находится выше или до img
в DOM, и поэтому селектор +
не будет работать.
Вы должны либо изменить свой HTML, как в приведенном ниже фрагменте, либо использовать альтернативные методы (включая JS).
.shopbar_image_container img {
height: 190px;
width: 190px;
cursor: pointer;
position: relative; /* added for positioning relative to img */
}
.shopbar_image_over {
display: none;
height: 190px;
width: 190px;
opacity: 0.2;
background: #444;
position: absolute;
top: 8px; /* added for positioning */
cursor: pointer;
}
.shopbar_image_container img:hover + .shopbar_image_over {
display: block;
}
<div class="shopbar_image_container">
<img src="img/t.jpg" />
<div class="shopbar_image_over"></div>
</div>
Вариант 2: (Используя JS)
Здесь HTML-структура не изменяется, но JS используется для отображения div
, когда мышь находится над img
. Поскольку div
расположен абсолютно над img
, мышь находится на div
, и когда мышь отсутствует, div
скрыт.
document.getElementById("baseImage").onmouseover = function() {
document.getElementById("divToShow").style.display = "block";
}
document.getElementById("divToShow").onmouseout = function() {
document.getElementById("divToShow").style.display = "none";
}
.shopbar_image_container img {
height: 190px;
width: 190px;
cursor: pointer;
}
.shopbar_image_over {
display: none;
height: 190px;
width: 190px;
opacity: 0.2;
background: #444;
position: absolute;
cursor: pointer;
}
<div class="shopbar_image_container">
<div class="shopbar_image_over" id="divToShow"></div>
<img src="img/t.jpg" id="baseImage" />
</div>
'+' работает на соседнем следующем собрата в DOM, а не предыдущий. Вы должны изменить свой HTML или использовать другие способы. – Harry
Вы не можете переместить назад дерево DOM с помощью CSS (сравните его с регулярным выражением, каким-то образом). –