Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Вёрстка веб-сайтов > Выделение текущего пункта меню


Автор: initmax 18.8.2009, 08:38
<li><a href="http://www.dynamicdrive.com/">Home</a></li>
<li id=”area”><a href="http://www.dynamicdrive.com/style/">CSS Codes</a></li>
<li><a href="http://www.dynamicdrive.com/forums/">Forums</a></li>
<li><a href="http://tools.dynamicdrive.com">Webmaster Tools</a></li>

Есть такая задача, отмечать определённым стилем, текущий пункт меню позиционирования пользователя.
Ранее это делал так:
1) При запросе требуемой страницы вычислял номер ссылки, например "Webmaster Tools"
2) При генерации меню ссылок в заданную позицию вставлял id=”area”
как это можно организовать более корректно?

Автор: bars80080 18.8.2009, 09:17
Цитата(initmax @  18.8.2009,  08:38 Найти цитируемый пост)
как это можно организовать более корректно?

это и есть наиболее корректный вариант

Автор: Guiness 18.8.2009, 09:24
Могу предложить такой вариант:
на каждой странице елементу body присваиваете уникальный id (напр. 1 стр. id="str1", 2 стр. id="str2", 3 стр. id="str3").
Тоже самое делаете и с с каждым пунктом меню (напр. 1 п. id="first", 2 п. id="second", 3 п. id="third").
Пишите стиль где перечисляете через запятую пары id (#idстраницы #idпункта_меню):
Код

#str1 #first, #str2 #second, #str3 #third {
/*стили для выделения пункта*/
}

Автор: bars80080 18.8.2009, 09:37
Guiness, а чем принципиально отличается этот вариант от уже озвученного? распознавать что за ссылка и вставлять идентификатор всё равно придётся

Автор: Guiness 18.8.2009, 09:44
Тем, что в первом случае работает скрипт, а во втором нет, т.к. это пишется в html ручками - меньше затрат на формирование страницы.
Естественно есть случаи, когда этот способ не оптимальный, например если страницы и меню для них генерируются с 0.
Но если есть постоянный набор страниц - вариант неплохой.

Автор: bars80080 18.8.2009, 09:48
что в таком случае мешает таким же способом "ручками" расписать идентификаторы в меню?

Автор: skyboy 18.8.2009, 09:49
мне кажется, лучше тут использовать классы. но это так, придирка к семантике.

Автор: initmax 18.8.2009, 09:54
Да дело как говорится в другом, а именно в нагрузке на трафик, допустим меню состоит из 10 пунктов, и при выборе каждого из пунктиков оно должно пересылаться по новой, с проинициализированным id. Поскольку все стремятся к разгрузке трафика и сервера, переходят на DIV вёрстку. Очевидно есть вариант помечать выбранный пункт меню "на месте" без повторной пересылки трафика и нагрузки на сервер.

Автор: Guiness 18.8.2009, 10:25
Я перемудрил smile  немного с кодом.
Имхо выгоднее делать с idшникам чем с js, т.к. траффик увеличится не на много, а js есть ресурсов дай боже как, особенно при работе с домом.

Автор: bars80080 18.8.2009, 14:23
Цитата(initmax @  18.8.2009,  09:54 Найти цитируемый пост)
Очевидно есть вариант помечать выбранный пункт меню "на месте" без повторной пересылки трафика и нагрузки на сервер. 

т.е. ты хочешь сразу перегонять весь объём страниц? это называется закладки на javascript
но по-моему полный бред. понятное дело когда оно используется в форме с несколкьими закладочками, а общий объём контента 10-20 кБ.
 совсем другое когда десять страниц, каждая по 100-200 кБ, получается при загрузке искомой страницы всё равно придётся грузить 1-2 МБ.

если же говорится о дозагрузке контента без перезагрузки страницы - дык, это же аякс. тогда какая разница как меню нарисовано? оно просто будет перерисовываться средствами javascript

Автор: Guiness 18.8.2009, 22:22
Мой способ хорош тем, что позволяет обойтись без js, при этом меню на каждой странице абсолютно одинаково, что позволяет его вставлять на сервере без каких-либо изменений, да и вообще выглядит помоему довольно элегантно, а затраты траффика мизерные, даже может меньше чем на загрузку js-скрипта для вставки idшников.

Автор: bars80080 18.8.2009, 23:21
Guiness, при всём уважении. какие принципиальные отличия твоего способа от того что автор написал в первом посте?

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

но самое главное: непонятно, чем твой метод, отличается от метода предложенного автором, кроме явного минуса в реализации

Автор: Guiness 19.8.2009, 09:18
Автор попросил альтернативный вариант - я предложил.
Главное отличие в том, что отсутствует код js поэтому страница выполняется значительно быстрее и нагрузка на траффик не больше, чем с js + если у браузера (ie) отключена обработка скриптов, то всеравно будет работать.
Цитата

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

Не вижу как вторжение в структуру промежуточных тэгом может запороть все стили, у меня используется 2 idшника, если их имена не менять все будет работать по прежнему в любом случае.
Нагромождения стилей тоже не вижу, т.к. используется только один стиль.

P.S. а высокое сцепление кода - понятие из ООП и с CSS его соотнести очень сложно.

Автор: bars80080 19.8.2009, 09:40
Guiness, четвёртый раз говорю, что твой вариант ни капли не альтернативный
также перечитай посты автора, он нигде не упоминает js. у него всё реализовано на css, плюс динамическая генерация страниц сервером


Цитата(Guiness @  19.8.2009,  09:18 Найти цитируемый пост)
Не вижу как вторжение в структуру промежуточных тэгом может запороть все стили, у меня используется 2 idшника, если их имена не менять все будет работать по прежнему в любом случае.
Нагромождения стилей тоже не вижу, т.к. используется только один стиль.

в реальной ситуации на странице не два idшника и не один стиль, а десятки, и целая колбаса вложенных структур


Цитата(Guiness @  19.8.2009,  09:18 Найти цитируемый пост)
а высокое сцепление кода - понятие из ООП и с CSS его соотнести очень сложно. 

в данном случае, это понятие очень корректно

Автор: Guiness 19.8.2009, 09:50
Цитата
он нигде не упоминает js

Согласен - похоже я сам это придумал. smile 
 Предлагаю закончить спор ввиду его непродуктивности.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)