Есть ли способ применить фильтр оттенков серого к остальной части страницы при наведении курсора на элемент?

Я новичок в этом и пытаюсь настроить свой профиль на веб-сайте, поддерживающем кодирование html/css. Я понял, как перевести мои изображения в оттенки серого до наведения, но мне интересно, есть ли способ перевести остальную часть страницы в оттенки серого при наведении, чтобы изображение было единственным цветным элементом.

Все, что я пробовал, в буквальном смысле просто бросало что-то в стену и смотрело, прилипнет ли оно, поскольку я даже не знаю, с чего начать с чего-то подобного, поэтому я не верю, что добавление моих неудачных попыток окажет какую-либо помощь. Ниже приведен мой текущий код изображений, все они имеют один и тот же идентификатор CSS.

.img{
  filter: Grayscale(100%);
}

.img:hover {
  transform: scale(X);
  filter: drop-shadow(Xpx Xpx  #xxx) !important;
  filter: Grayscale(0%);
}

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

Можете ли вы предоставить минимально воспроизводимый пример , чтобы участники могли помочь вам с вашей проблемой? Также прочтите как задать хороший вопрос. Вы получите лучшие ответы, если будете следовать этому руководству.

Tushar Jadav 21.06.2024 07:43
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
1
1
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете добиться чего-то подобного, используя CSS-селектор :has(). Проверяем body, есть ли в данный момент img, на который наведен курсор. Если да, примените следующий CSS ко всем (*) элементам, которые не являются img, на которые в данный момент наведен курсор.

изменить: вы можете обменять img в этом селекторе на любой другой селектор/класс, просто обязательно замените оба.

edit2: как упоминалось в комментариях @CBroe, вы можете изменить селектор на body:has(img:hover) *:not(:hover) (удалив второй селектор img, чтобы он работал, когда нужные элементы вложены.

body:has(img:hover) *:not(:hover) {
  filter: grayscale(1);
}
<img src = "https://picsum.photos/id/1/300"/><img src = "https://picsum.photos/id/11/300"/><img src = "https://picsum.photos/id/21/300"/><img src = "https://picsum.photos/id/31/300"/><img src = "https://picsum.photos/id/41/300"/><img src = "https://picsum.photos/id/51/300"/><img src = "https://picsum.photos/id/61/300"/><img src = "https://picsum.photos/id/71/300"/><img src = "https://picsum.photos/id/81/300"/><img src = "https://picsum.photos/id/91/300"/><img src = "https://picsum.photos/id/101/300"/>

Это больше не будет работать, как только изображение будет вложено в любой другой элемент.

CBroe 21.06.2024 09:24

@CBroe, ты прав. Однако изменение селектора может заставить его снова работать. Поскольку наведен только один элемент, селектор также может выглядеть следующим образом. Работает вложенно. body:has(img:hover) *:not(:hover)

makkusu 21.06.2024 09:40

Удаление второго селектора img помогло! Спасибо большое ♡

slipoden cider 21.06.2024 10:23

Следует отметить, что сами родительские элементы также не будут фильтроваться. Поэтому, если у них есть фоновый цвет/изображение, оно не будет фильтроваться, а если у них несерый цвет, их текстовые узлы также не будут фильтроваться. (и вам, вероятно, следует удалить второй img из последнего селектора даже во фрагменте).

Kaiido 21.06.2024 11:09

@Kaiido Я понял это после применения кода, но на самом деле мне очень нравится эффект, который он дает. Спасибо за подробное объяснение, я запишу это для будущих начинаний!

slipoden cider 21.06.2024 19:29

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