CSS наведите указатель мыши на div, но не наведите указатель на его детей
Я посмотрел, был ли уже задан этот вопрос, но ничего не нашел, только вопросы по правилу обратного CSS, которое я ищу.
У меня есть div, который содержит один или несколько дочерних элементов, и я хочу, чтобы он менял свой фон на зависании, но не зависал ни одного из его дочерних элементов; Мне нужно правило: hover ограничиваться чистым элементом, а не его потомками, которые он содержит. Не являясь родительским правилом в CSS и являясь: hover срабатывает всякий раз, когда мышь проходит над родителем и его дочерними элементами, я оказываюсь вне идей, и, возможно, этого результата невозможно достичь только с помощью CSS.
Однако вопрос о CSS, поэтому не требуется решение JS или JQuery (я могу предоставить это самостоятельно)
Я заранее благодарю вас за любые идеи или предложения.
Код:
HTML
<div class="parent">Text of the parent
<p class="class1">I do not need to trigger parent background color change!</p>
</div>
CSS
.parent {
background: #ffffff;
}
.parent:hover {
background: #aaaaff;
}
.class1 {
margin: 10px;
}
Ответы
Ответ 1
Возможность останавливать эффект наведения элемента при зависании дочернего элемента в настоящее время невозможна с помощью селекторов CSS, которые у нас есть, это как можно ближе получить без javascript - воздействовать на ребенка на зависание в дополнение к влиянию на родителя. Это будет работать, только если ребенок составляет 100% от ширины и высоты родительского
В в проекте CSS4 есть родительский селектор !
, который можно использовать в следующих случаях:
.parent! .class1:hover {
background: #ffffff;
}
Но у нас еще нет этой возможности
Ответ 2
Вы можете просто добиться этого, добавив это свойство в дочерний класс CSS.
pointer-events: none;
Это сработало для меня.
Ответ 3
Fiddle на основе этого ответа:
<style>
.parent { padding: 100px; width: 400px; height:400px; position: relative; z-index: 998; }
.parent:hover { background-color: green; }
.child { padding: 100px; width: 200px; height:200px; position: relative; z-index: 1000; }
.child:hover { background-color: blue; }
.parent-overwrite { padding: inherit; width: inherit; height: inherit; position: absolute; top: 0; left: 0; z-index: 999; background-color: #FFF; display: none; }
.child:hover ~ .parent-overwrite { display: block; }
</style>
<div class="parent">
<div class="child">Child</div>
<div class="parent-overwrite"></div>
</div>
Вам следует использовать JavaScript. В настоящее время он не является действительно с чистым CSS, как уже сказал Зак Саулье.
Ответ 4
Вы не можете сделать это с помощью чистого CSS, но его легко достичь с помощью jQuery.
Поэтому, когда вы наведите указатель мыши на ребенка, вы не хотите изменять родителя.
https://jsfiddle.net/8nqfLgsk/2/
$(".list-categories li a").hover( function(){
$(this).toggleClass("active-btn");
});
В основном с этим вы добавляете только класс к элементу, над которым вы находитесь, не изменяя родителя.
Ответ 5
В каждом дочернем классе просто добавьте это свойство css:
cursor: pointer;