Sign in to follow this  
Freedin

Изменение нескольких стилей при наведении на блок

Recommended Posts

Уважаемые знатоки JS столкнулся вот с такой проблемой:

Допустим есть элемент (в моем случае изображение) окруженное несколькими блоками (дивами) вложенных один в один, получается изображение находится внутри всех этих дивов. Так вот необходимо сделать, чтобы при наведении на изображение менялись стили всех этих дивов.

Вот пример кода html:


<div class="sliderbox">
<div class="sliderbox-content">
<div class="sliderbox-item">
<img src="images/slide1.jpg" width="179" height="99" border="0" alt="" />
</div>
</div>
</div>

По умолчанию имеются стили для всех перечисленных классов sliderbox, sliderbox-content, sliderbox-item так вот решения только средствами CSS я не нашел решил действовать через JS, поскольку в JS не силен решил обратиться за помощью. Предполагаю, что необходимо сделать функцию которая в зависимости от onMouseOver или onMouseOut будет делать выборку значений стилей. В Интернет нашел вот такой пример кода:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Проверка</title>
<script>
function ser(obj){
obj.className="style2"; <!-- Это функция отвечает за то чтобы при наведении мышкой менялся стиль-->
}
</script>
<script>
function serr(obj){
obj.className="res"; <!-- Это функция отвечает за то что если вашка мышка не наведена на ячейку то стиль останется прежним-->
}
</script>
<link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="res" onMouseOver=ser(this) onMouseOut=serr(this)>Привет</div>

</body>
</html>

.style2 {background:url(1.jpg);} <!-- Это картинка при наведении мышкой  -->
.res {background:url(2.jpg);} <!-- Это обычная картинка -->

В данном примере идет присвоение стиля в зависимости находится ли мышка на надписи но здесь идет присвоение конкретно стиля а надо присвоить значение нескольких стилей при наведении мышки на объект (изображение) подкажите плиз как реализовать данную задачу. Понимаю что решение в принципе должно быть элементарное но в связи с тем что только начинаю изучать JS сам сделать не могу.

Share this post


Link to post
Share on other sites

а чем не подходит sliderbox:hover { стили... }

Не пойму о чем вы??? То что вы предлагаете применимо только для блока sliderbox а как же со вложенными быть. Необходимо чтобы конкретно менять стили для каждого вложенного блока.

Share this post


Link to post
Share on other sites
	<style>
.sliderbox{background:#ddd;width:300px;height:200px;}
.sliderbox:hover{background:#ff0;}
.sliderbox-content{background:#bbb;width:280px;height:180px;}
.sliderbox-content:hover{background:#0ff;}
.sliderbox-item{background:#999;width:250px;height:150px;}
.sliderbox-item:hover{background:#f00;}
</style>

Share this post


Link to post
Share on other sites

	<style>
.sliderbox{background:#ddd;width:300px;height:200px;}
.sliderbox:hover{background:#ff0;}
.sliderbox-content{background:#bbb;width:280px;height:180px;}
.sliderbox-content:hover{background:#0ff;}
.sliderbox-item{background:#999;width:250px;height:150px;}
.sliderbox-item:hover{background:#f00;}
</style>

Вы абсолютно правы в плане простоты выполнения данной задачи я как бы не новичек в CSS и HTML и так решить задачу не подходит потому что: если вы будете наводить на каждый блок будет применяться стиль непостредственно относящийся к наведенному блоку и родительским а чтобы применились все стили необходимо будет нажать на самый внутренний блок т.е. на изображение, т.е. я делаю сложную рамку для изображения при наведении и если я буду подносить курсор к краю рамки то стиль применяется только к наружному блоку внутренние остаются без изменений пока я не наведу на изображение или на внутренний блок.

А необходимо чтобы стили применялись на все перечисленные классы одновременно даже если я наведу на крайнюю часть рамки т.е. на внешний блок. Думаю тут без JS просто не обойтись.

Я вообще думал организовать такую рамку с помощью JQuery это еще больше усложняет процесс и я еще больше запутася))) Поэтому думаю простой функции на JS будет достаточно чтобы просто определить переменную которая будет подставлять нужные классы на блоки при наведении на любую чать этих блоков.

Share this post


Link to post
Share on other sites

Ну вот самый элементарный пример http://jsfiddle.net/cDSxB/

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

Накидал просто чтоб вы поняли суть. Все очень просто.

Share this post


Link to post
Share on other sites

Думаю тут без JS просто не обойтись.

Ну почему же. Можно сделать так.


<style>
.sliderbox{...}
.sliderbox:hover{...}
.sliderbox:hover .sliderbox-content{...}
.sliderbox:hover .sliderbox-item{...}
...
</style>

При наведении на .sliderbox, будут меняться стили для других его элементов.

Такой принцип применяется в выпадающих менюшках на чистом css.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Member Statistics

    46,333
    Total Members
    3,128
    Most Online
    sohaibkhalid614
    Newest Member
    sohaibkhalid614
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.