Подсветка только элемента под мышью
http://codepen.io/anon/pen/LErOQZ
при наведении на div с текстом 2 или 3 подсвечивается и родительский элемент 1. Не могу придумать как сделать, чтобы при наведении на элемент 2 или 3 только этот элемент и подсвечивался. |
zm_sansan,
.a .a:hover {} ? |
рони, для частного случая верно, но div'ы могут быть вложены друг в друга любое количетсво раз. забыл указать
т.е. такой случай http://codepen.io/anon/pen/EaRbrP при наведении на любой div только он и должен подсвечиваться, родительские div не должны. при на ведении на корневой div соответсвенно тоже подсвечиваться должен |
Цитата:
|
zm_sansan,
а указать особый класс для нужных элементов? |
особые это те на которые наведён курсор, но почему то родительские тоже захватывает
|
zm_sansan,
что-то я не могу придумать реализацию на CSS. Может, тебе сойдёт пример на JS? |
сойдёт конечно
|
|
спасибо) работает как надо
|
zm_sansan,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.lightblue {
background: lightblue;
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$(function() {
$(".a:not(:has(>.a))").on('mouseenter mouseleave', function(event) {
$(this).toggleClass('lightblue', event.type == 'mouseenter')
});
});
</script>
</head>
<body>
<div class='a'> 1
<div class='a'> 2 </div>
<div class='a'> 3
<div class='a'> 4 </div>
</div>
</div>
</body>
</html>
|
рони, спасибо, но то что я имел в виду сделал Safort, но только я не понимаю как его код переписать на JQuery. И не совсем понимаю как работает.
|
Цитата:
function lightEl(e) {
//выводит в консоль объект события содержащий нужную инфу. Я его просто забыл убрать
console.log(e);
// в e.target содержится ссылка на наведённый элемент.
// метод toggle() добавляет элементу нужный класс, а если этот класс уже есть, то удаляет его.
e.target.classList.toggle('lightme');
}
//вешаем на элемент-родитель обработчики событий.
document.querySelector('#el').addEventListener('mouseover', lightEl , false);
document.querySelector('#el').addEventListener('mouseout', lightEl , false);
Код можно и сократить:
function lightEl(e) {
e.target.classList.toggle('lightme');
}
var el = document.querySelector('#el');
el.addEventListener('mouseover', lightEl , false);
el.addEventListener('mouseout', lightEl , false);
|
Safort,
а почему родительские элементы перестали подсвечиваться? Я порядок действий не понимаю как всё происходит. Т.е. откуда начинается всплытие, если, например, на элемент 3 навожу курсор, как меняется при этом подсветка.. дочерних же элементов много и они на разных уровнях иерархии |
|
спасибо, это и читаю)
|
zm_sansan,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.lightblue {
background: lightblue;
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$(function(){
$(".a").on('mouseover mouseout',function(event) {
event.stopPropagation();
$(this).toggleClass('lightblue', event.type == 'mouseover')
});
});
</script>
</head>
<body>
<div class='a'> 1
<div class='a'> 2 </div>
<div class='a'> 3
<div class='a'> 4 </div>
</div>
</div>
<div class='a' id="el"> 1
<div class='a'> 2 </div>
<div class='a'> 3 </div>
</div>
</body>
</html>
|
рони,
Спасибо, всё понятно, останавливаем всплытие значит и назначаем или убираем класс:) |
| Часовой пояс GMT +3, время: 17:00. |