Условные операторы CSS с наведением

Этот вопрос может быть проще в условном CSS.

У меня есть пять строк с некоторым содержимым, и на основе некоторого условия я добавляю класс с именем 'предыдущий', чтобы показать другой цвет фона.

Когда я наводил курсор на содержимое предыдущего класса, я получаю прозрачный фон, что не очень хорошо.

Я хотел показать тот же цвет фона (серый), даже если он наведен.

Итак, я попробовал приведенный ниже код и попытался использовать условие :имеет в css. Если у него есть предыдущий класс, измените цвет наведения на серый. Но это не сработало.

Я ожидаю, что у меня будет тот же цвет фона, даже если он наведен.

Может ли кто-нибудь помочь мне в этом, так как мне нужно решение только от CSS/SCSS. не из джаваскрипта.

.previous {
  background-color: grey;
}
.row:hover {
  background-color: transparent;
  :has(.previous) {
      background-color: grey;
  }
}
<div class = "row">Some Content 1</div>
<div class = "row previous">Some Content 2</div>
<div class = "row">Some Content 3</div>
<div class = "row previous">Some Content 4</div>
<div class = "row">Some Content 5</div>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
3
0
5 376
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете сделать это, используя псевдокласс :not, чтобы исключить строки с классом previous из эффекта наведения. Теперь :hover будет выполняться для каждого элемента, который имеет класс .row, но не имеет класса .previous.

.row {
  background-color: lightblue;
}

.previous {
  background-color: grey;
}

.row:not(.previous):hover {
  background: transparent;
}
<div class = "row">Some Content 1</div>
<div class = "row previous">Some Content 2</div>
<div class = "row">Some Content 3</div>
<div class = "row previous">Some Content 4</div>
<div class = "row">Some Content 5</div>

Спасибо, нам нужно изменить цвет фона на прозрачный, чтобы он работал :) Престижность за использование: не условие :)

UI_Dev 19.07.2019 09:57

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

Nenad Vracar 19.07.2019 09:59
Ответ принят как подходящий

Почему бы просто не изменить порядок ваших селекторов и добавить зависание к предыдущему классу:

.row:hover {
  background-color: transparent;
}

.previous,
.previous:hover {
  background-color: grey;
}
<div class = "row">Some Content 1</div>
<div class = "row previous">Some Content 2</div>
<div class = "row">Some Content 3</div>
<div class = "row previous">Some Content 4</div>
<div class = "row">Some Content 5</div>

Кроме того, если вам нужна строка с предыдущим классом, вы просто комбинируете селекторы: .row.previous

:has это css4 и очень мало поддерживается: https://developer.mozilla.org/en-US/docs/Web/CSS/:has

Отличное решение Пит :) Спасибо

UI_Dev 19.07.2019 10:23

Вот чистое решение css.

Вы можете установить разные стили для наведения, независимо от того, имеет ли он предыдущий класс или нет.

.row:hover {
  background-color: transparent;
}
.row.previous {
  background-color: grey;
}
.row.previous:hover {
  background-color: #595959; /*any color really*/
}
<div class = "row">Some Content 1</div>
<div class = "row previous">Some Content 2</div>
<div class = "row">Some Content 3</div>
<div class = "row previous">Some Content 4</div>
<div class = "row">Some Content 5</div>

Другие вопросы по теме