Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать активный элемент при ховере (https://javascript.ru/forum/misc/12375-kak-sdelat-aktivnyjj-ehlement-pri-khovere.html)

TicTac 14.10.2010 19:05

Как сделать активный элемент при ховере
 
есть такое меню
<ul>
<li><a href="#">Металопрокат</a></li>
 <li>
            	<a class="png" href="#">Услуги</a>
            	<ul>
                	<li><a href="#">Профнастил</a></li>
                    <li><a href="#">Металопрокат</a></li>
                    <li><a href="#">Мобильные модульные здания</a></li>
                    <li><a href="#">Гнутые профиля</a></li>
                </ul>
            </li>
 <li><a href="#">Гнутые профиля</a></li>
</ul>


я сделал его выпадающим выпадает это
<ul>
                	<li><a href="#">Профнастил</a></li>
                    <li><a href="#">Металопрокат</a></li>
                    <li><a href="#">Мобильные модульные здания</a></li>
                    <li><a href="#">Гнутые профиля</a></li>
                </ul>


но теперь хочу вернуться в родительский li
<li>
      <a class="png" href="#">Услуги</a>
       <ul>..я тут сейчас..</ul>
</li>


и дописать в li класс, но как это сделать именно к нему, выходит выбрать все li этот и те что в вып. меню(

Был бы очень благодарен за помощь.

danik.js 15.10.2010 08:25

Сам то понял че написал?

TicTac 15.10.2010 12:29

конечно понял.

По шагам еще раз.

1. Есть такое меню
<ul>
<li><a href="#">Металопрокат</a></li>
 <li>
            	<a href="#">Услуги</a>
            	<ul>
                 <li><a href="#">Профнастил</a></li>
                    <li><a href="#">Металопрокат</a></li>
                    <li><a href="#">Мобильные модульные здания</a></li>
                    <li><a href="#">Гнутые профиля</a></li>
                </ul>
            </li>
 <li><a href="#">Гнутые профиля</a></li>
</ul>


2. На ссылках основного на hover весит фон
3. Выпадает меню у меня так
function openSubmenu(){
			$(this).find('ul').css('visibility', 'visible');
			
	}
	
	function closeSubmenu(){
			$(this).find('ul').css('visibility', 'hidden');
	}
	
	$(".top_menu li").bind("mouseover", openSubmenu);
	$(".top_menu li").bind("mouseout", closeSubmenu);


4. При перемещении курсора в список тот который выпал пропадает естественно ховер на ссылке.
5. Я хочу сделать чтобы ссылка или li основного меню оставалась подсвечиваемой чтобы видеть что я в этом меню
6. Для этого хочу в li на которой $(".top_menu li").bind("mouseover", openSubmenu) дописать класс и использовать класс cur
7. При $(".top_menu li").bind("mouseout", closeSubmenu); удалить класс cur

8. Не могу после $(this).find('ul').css('visibility', 'visible'); добраться по DOM вверх к li (родителя элемента ul) и дописать ему класс cur


Вот и все, кто нибудь подскажет?

TicTac 15.10.2010 12:33

Все я разобрался, почему не видел результата при использов. просто .parent() :)

danik.js 15.10.2010 12:56

Это делается не на js а на чистом css:
.top_menu ul{
    display: none;
}
.top_menu li:hover ul{
    display: block;
}
.top_menu>li:hover>a{
    color: red;
}

Это так, набросок, можешь погуглить.

TicTac 15.10.2010 14:00

Цитата:

Сообщение от danik.js
Это делается не на js а на чистом css:

не вижу в этом смысла.

danik.js 15.10.2010 17:01

Цитата:

Сообщение от TicTac
не вижу в этом смысла.

Сожалею...

TicTac 15.10.2010 21:05

Цитата:

Сообщение от danik.js
том смысла.

в смысле сожалею?

от чего мы уходим к чему вернемся при использованию только css
если на чистом css сожалею именно тебе

за гавнокод программисты отдельно поблагодарят

subzey 15.10.2010 22:19

А css всё ж милее, всех красивей и белее.

TicTac 15.10.2010 22:35

subzey, хорошо
далеко не будем, мне нужно ие6 included

какова реализация будет?

Kolyaj 15.10.2010 22:40

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

subzey 15.10.2010 22:48

Для ие6 костыли или бихейвьер. Остальным css.

В конце-то концов, в России доля ie6 менше, чем у Opera Mini.

subzey 15.10.2010 22:52

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

Kolyaj 15.10.2010 22:54

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

subzey 15.10.2010 22:57

Именно. Вспомните в интерфейсе Виндов или Макоси хоть один элемент, который бы требовал правильного перемещения курсора мыши.

danik.js 16.10.2010 02:36

Цитата:

Сообщение от Kolyaj
CSS-меню, работающие по ховеру -- самые уродские самые неюзабельные меню.

Согласен. Горизонтальные еще ниче, а вот вертикальные..

Зато они работают и без js. Про доступность ничего не слышали? Про ненавязчивый js?
А с js что? Сам сталкивался неоднократно - страница недогружается и скрипт меню тупо отваливается - кайфово, да?

Если вам не нра резкость css, добавьте анимацию и задержки на js, но только ПОСЛЕ того как сделали рабочее на css.
Цитата:

Сообщение от subzey
Вспомните в интерфейсе Виндов или Макоси хоть один элемент, который бы требовал правильного перемещения курсора мыши.

Контекстное многоуровневое меню, неа? Лишние клики - всегда неудобно.

subzey 16.10.2010 10:32

danik.js,
Они не требуют даже наличия мыши как таковой. :)

danik.js 16.10.2010 11:32

Цитата:

Сообщение от subzey (Сообщение 74423)
danik.js,
Они не требуют даже наличия мыши как таковой. :)

Да, на css навигация на табах летит к чертям. Все изза "отсутствия" селектора по родителю, чета типа
.menu li > a:focus < ul { display: block; }
или
.menu a:focus:parents(ul) { display: block; }

С кодом
.menu li:hover ul,
.menu li a:focus + ul{
display: block;
}
подменю появляется при фокусе, но при последующем tab-переходе, на подпункты, оно скрывается. Зато на js это вродебы можно исправить.
Кстати если кто подскажет как - буду благодарен. Надо както обробатывать события onfocus и отслеживать потерю фокуса и тд...

UPD: помоему чета тут глючит.
пишу :
.menu a : focus : parents(ul) { display: block; }
Да, действительно. глюк какойто. пишу так, но без пробелов:
.menu a : focus : parents(ul) { display: block; }
а получается так:
.menu a:focus:parents(ul) { display: block; }

monolithed 16.10.2010 11:45

Уже несколько лет делаю выпадающие меню (даже по клику) на чистом CSS, примером могут послужить работы Stu Nicholls'a:
http://www.cssplay.co.uk/menus/ul-multi-four.html
http://www.cssplay.co.uk/menus/dl-clickslide.html

Kolyaj 16.10.2010 12:21

Цитата:

Сообщение от danik.js
Про доступность ничего не слышали?

Конечно слышали. Именно с доступностью у CSS-меню хреново. Они, конечно, работают, но пользоваться-то ими невозможно.

TicTac 16.10.2010 13:30

monolithed, не перебирая браузеры захожу с которого сейчас сижу - Хром!

О чудо! Я не могу вообще попасть в сабменю, кликаю оно разворачивается и сразу же сворачивается:blink:

Цитата:

Уже несколько лет делаю выпадающие меню (даже по клику) на чистом CSS, примером могут послужить работы Stu Nicholls'a:
мне кажется вы лукавите

danik.js 16.10.2010 14:00

Цитата:

Сообщение от TicTac
не перебирая браузеры захожу с которого сейчас сижу - Хром!

Читать умеете?
Цитата:

Safari and Google Chrome have a problem with their interpretation of the mouse click.
Ну конечно такие менюшки делаются for fan, на практике лучше js.
Но и когда делают так что без js нифига не работает - это просто убивает. Это в веб-приложении можно такое позволить, но не на обычном сайте, нет.
Почитайте про "ненавязчивый js".
Каждый раз проверяю работоспособность создаваемого сайта с отключенным js. Ведь тупо изза недогруженного скрипта или откюченного js посетитель не сможет походить по ссылкам, или того хуже, сделать заказ в форме, на которую повешана валидация и ajax-отправка. Имхо это пережиток прошлого, либо чрезмерная увлеченность или слабые знания js кодеров.
Если js работает - форма должна аякснуться, меню должно плавно выпасть или спрятаться, спойлеры и табы быть скрытыми и тд. Если выключен - ничто не должно "умереть" - а просто раскрыться и быть доступным. я не прав?

monolithed 16.10.2010 14:40

Цитата:

Сообщение от TicTac (Сообщение 74450)
мне кажется вы лукавите

частичная эмуляция события onclick на CSS существует с появления псевдоклассов link, active, hover, visited, а они появились очень давно и даже всем известный Stu Nicholls не был в этом первым

За те 8 лет, что я знаком с CSS было сделано десятки разных меню как с использованием JS так и без и если речь идет о создании к.л. ролловера, то безусловно я это сделаю на CSS/HTML, но если что-то по серьезней - где нужен интерактив или цепочки событий то без JS не обойтись.

TicTac 16.10.2010 17:49

Цитата:

Сообщение от danik.js
Сообщение от TicTac
не перебирая браузеры захожу с которого сейчас сижу - Хром!
Читать умеете?
Цитата:
Safari and Google Chrome have a problem with their interpretation of the mouse click.

я зашел посмотреть на результат.

Safari and Google Chrome have a problem with their interpretation of the mouse click.

Эту поправку прилепишь рядом с меню?

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

кстати, дайте угадаю вы наверно и табличные данные верстаете дивами.

danik.js 16.10.2010 20:20

Цитата:

Сообщение от TicTac
я зашел посмотреть на результат.

Читать все еще не научились?
Цитата:

Сообщение от danik.js
такие менюшки делаются for fan

Цитата:

Сообщение от TicTac
кстати, дайте угадаю вы наверно и табличные данные верстаете дивами.

А это еще зачем? Во всем стараюсь придерживаться логики и простоты. Это сохраняет мозг и время. Ради этих целей прекращаю этот гнилой спор с вами.

TicTac 16.10.2010 22:12

danik.js, слушай
1. Я тебя сюда не звал
2. Мне нужно было решить задачу
3. Я ее решил, остальной флуд для меня составил 0 пользы
4. как я использую для чего либо, это мои проблемы, моя реализация имеет право на существование
5. Твое мнение меня не интересует, делаешь на css делай мне это не интересно... я писал(с чтением видно у тебя беда, только комплексуешь видно и мне пишешь, то там не прочитал то тут, мне это гамно не нужно зачем мне его читать)
6. Хочешь показаться умным, делай это в другом месте, а не в моем топике, проблему решил, ты мне в этом не помог, объяснил проблему доходчиво! На балаболил за-то еще на 2 страницы с своим чистым css
7. Не думай если ты что-то считаешь по своему - другие должны тоже так считать.
8. Не пиши на вы если сразу начал тыкать! будь самим собой
9. сам спор развел сам и закончил! молодец.


Часовой пояс GMT +3, время: 06:27.