Как выбрать верхний элемент с использованием сss

Проблема заключается в следующем. Есть верстка такого типа:

<ul class="products columns-3">
  <li class="post-23">
    <a href="" class="">
      <img class="img" alt="">
      <h2 class="product__title"></h2>
      <a href="#" class="add" style="cursor: pointer;"></a>
    </a>
  </li>
</ul>

Могу ли я селектором css при наведении на ссылку с классом "add" выбрать тег "img" и изменить ему background-color. Или для этого необходимо использовать связку с JS. Спасибо за советы!


Ответы (2 шт):

Автор решения: Алексей Шиманский

Только скриптом. Есть у CSS псевдокласс :focus-within, но там очень специфичная особенность и я бы не рекомендовал использовать в текущем случае.

$('.products').on('mouseenter', '.add', function() {
    $(this).closest('li').find('img').addClass('test');       
});
img {
  width: 50px;
}
.test {
  width: 100px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<ul class="products columns-3">
  <li class="post-23">
    <a href="" class="">
      <img class="img" alt="" src="https://i.ytimg.com/vi/NKk6rGDpq6Y/sddefault.jpg">
      <h2 class="product__title"></h2>
      <a href="#" class="add" style="cursor: pointer;">ссылка</a>
    </a>
  </li>
</ul>

→ Ссылка
Автор решения: humster_spb

Есть небольшой лайфхак, благодаря которому можно решить Вашу задачу, не используя js: нужно в вёрстке поменять местами .add и .img, а с помощью относительного позиционирования - поменять обратно (тогда визуально картинка будет идти до ссылки, но в потоке - после, и можно с помощью css менять её внешний вид).

Вёрстку Вам, кстати, в любом случае придётся править, потому что у Вас ссылка в ссылке - это ошибка и работать такая конструкция не будет.

.add, .img {
  position: relative;
}
.add {
  top: 85px;
}
.img {
  bottom: 85px;
}
.add:hover ~ .img {
  background-color: red;
}
<ul class="products columns-3">
  <li class="post-23">
      <a href="#" class="add" style="cursor: pointer;">ссылка</a>
      <h2 class="product__title">Заголовок</h2>
      <img class="img" src="" alt="Картинка">
  </li>
</ul>

→ Ссылка