Выбрать предыдущих братьев и сестер

У меня есть два изображения внутри div. Когда пользователь наводится над вторым изображением, первая непрозрачность должна идти до 40%. Проблема я в том, что я не могу выбрать img.first, когда img.second зависнет. Я попытался взглянуть на общий селектор, но кажется, что только выбирает элементы, которые появляются после вашего начального селектора.

Я знаю, что это можно сделать с помощью jQuery, но мне интересно, есть ли чистое решение CSS?

<div>
  <img class="first" src="#">
  <img class="second" src="#">
</div>

div > img.second:hover ~ img.first { opacity:0.4; filter:alpha(opacity=40); } //failed

Ответ 1

Я попытался взглянуть на общий селектор, но кажется, что он только выбирает элементы, которые появляются после вашего начального селектора.

Это правильно. Таким образом, с помощью чистого селектора CSS это невозможно.

Однако, в зависимости от вашего макета, вы можете использовать несколько правил с селекторами, такими как div:hover и img:hover, и играть со значениями непрозрачности, чтобы получить то, что вы хотите; см. другие ответы для примеров. Но если вы хотите более надежное решение, вам будет лучше с jQuery.

Ответ 2

попробуйте что-то вроде:

div:hover .img {
  opacity: 0.4;
}

div .img:hover {
  opacity: 1;
}

.img {
  display: inline-block;
  background: green;
  width: 100px;
  height: 40px;
}

demo: http://jsbin.com/idowoz/2/

Ответ 3

Попробуйте этот css:

div:hover img{
    opacity:0.5            
}
div:hover img:hover{
     opacity:1           
}  

Тест: http://jsfiddle.net/WpCtL/2/

Ответ 4

Вы можете сделать трюк, чтобы все выглядело так: http://jsfiddle.net/cwxCX/3/

<div>    
    <img src="http://placekitten.com/200/200">
    <img src="http://placekitten.com/300/300">
    <img src="http://placekitten.com/400/400">
    <img src="http://placekitten.com/500/500">
</div>

CSS

div{
    float:left;
}
img{
    width:100px;
    height:100px;
}
div img{
    float:right;
}

div img:hover ~ img{
    opacity:.4;
}