Горизонтальное меню с вкладками на CSS и JavaScript
Сегодня мы будем делать горизонтальное меню с вкладками для размещения на сайте. Но это не обычное навигационное меню, оно делается немного иначе, это меню для отображения различных блоков информации без перехода на другие страницы. Такое горизонтальное меню используется, например, в интернет-мгазинах, когда на одной странице представлено описание товара, фотографии, какие-нибудь дополнительные характеристики, отзывы посетителей и т.д., и вся эта информация переключается как раз таким меню с вкладками.Начнем с проектирования. Нам надо создать в HTML-коде меню с названиями вкладок и блоки с содержимым, которые соответствуют той или иной выбранной вкладке.
Code (HTML) : Убрать нумерацию
- <!-- меню с вкладками -->
- <ul id="menu">
- <li id="goods">Товар</li>
- <li id="descr">Описание</li>
- <li id="foto">Фотография</li>
- <li id="price">Цена</li>
- <li id="shops">Где купить</li>
- </ul>
- <!-- контейнер со страницами -->
- <div id="container">
- <div id="goods_content">Товар</div>
- <div id="price_content">Цена на товар</div>
- <div id="shops_content">Адреса магазинов</div>
- <div id="descr_content">Описание</div>
- <div id="foto_content">Фотографии</div>
- </div>
Теперь добавим стили. Нам надо сделать так, чтобы список был выстроен горизонтально, обозначить неактивные вкладки, выделить активную вкладку, сделать неактивные блоки контента скрытыми и показать активный блок.
Code: Убрать нумерацию
- /* строка меню */
- #menu {
- margin: 0px;
- padding: 0px 5px 0px 5px;
- list-style: none;
- height: 32px;
- border-bottom: 2px solid #DDDDDD;
- background: #FFFFFF;
- font-family: Arial;
- }
- /* вкладка меню */
- #menu li {
- float: left;
- display: inline;
- margin: 0px 2px -1px 0px;
- padding: 5px 25px 5px 25px;
- cursor: pointer;
- color: #999999;
- background: #F4F4F4;
- border: 2px solid #DDDDDD;
- font-weight: bold;
- border-radius: 16 16 0 0;
- }
- /* активная вкладка меню */
- .tab_active {
- border-bottom: 2px solid #FFFFFF !important;
- color: #000000 !important;
- background: #FFFFFF !important;
- }
- /* контейнер с блоками контента */
- #container {
- clear: both;
- border: 2px solid #DDDDDD;
- border-width: 0px 2px 2px 2px;
- border-radius: 0 0 8 8;
- padding: 5px;
- }
- /* скрытый блок контента */
- #container .tab_content {
- display: none;
- }
- /* видимый блок контента */
- .visible {
- display: block !important;
- }
Code: Убрать нумерацию
- /* строка меню */
- #menu {
- margin: 0px;
- padding: 0px 5px 0px 5px;
- list-style: none;
- height: 32px;
- border-bottom: 2px solid #DDDDDD;
- background: #FFFFFF;
- font-family: Arial;
- position: relative;
- top: 10px;
- }
- /* вкладка меню */
- #menu li {
- float: left;
- display: inline;
- margin: 0px 2px -1px 0px;
- padding: 5px 25px 5px 25px;
- height: 20px;
- cursor: pointer;
- color: #999999;
- background: #F4F4F4;
- border: 2px solid #DDDDDD;
- font-weight: bold;
- border-radius: 16 16 0 0;
- }
- /* активная вкладка меню */
- .tab_active {
- border-bottom: 2px solid #FFFFFF !important;
- color: #000000 !important;
- background: #FFFFFF !important;
- height: 30px !important;
- position: relative;
- top: -10px;
- }
- /* контейнер с блоками контента */
- #container {
- clear: both;
- border: 2px solid #DDDDDD;
- border-width: 0px 2px 2px 2px;
- border-radius: 0 0 8 8;
- padding: 5px;
- }
- /* скрытый блок контента */
- #container .tab_content {
- display: none;
- }
- /* видимый блок контента */
- .visible {
- display: block !important;
- }
Code (HTML) : Убрать нумерацию
- <!-- меню с вкладками -->
- <ul id="menu">
- <li id="goods" class="tab_active">Товар</li>
- <li id="descr">Описание</li>
- <li id="foto">Фотография</li>
- <li id="price">Цена</li>
- <li id="shops">Где купить</li>
- </ul>
- <!-- контейнер со страницами -->
- <div id="container">
- <div id="goods_content" class="tab_content visible">Товар</div>
- <div id="price_content" class="tab_content">Цена на товар</div>
- <div id="shops_content" class="tab_content">Адреса магазинов</div>
- <div id="descr_content" class="tab_content">Описание</div>
- <div id="foto_content" class="tab_content">Фотографии</div>
- </div>
Code (HTML) : Убрать нумерацию
- <!-- меню с вкладками -->
- <ul id="menu">
- <li id="goods" class="tab_active" onclick="tab(this);">Товар</li>
- <li id="descr" onclick="tab(this);">Описание</li>
- <li id="foto" onclick="tab(this);">Фотография</li>
- <li id="price" onclick="tab(this);">Цена</li>
- <li id="shops" onclick="tab(this);">Где купить</li>
- </ul>
Code (JavaScript) : Убрать нумерацию
- function tab(el) {
- // Получить список вкладок меню
- var menu=el.parentNode;
- var tabs=menu.getElementsByTagName('li');
- for (var i=0; i<tabs.length; i++) {
- // Вкладка
- var tab=tabs[i];
- // Блок контента
- var content=document.getElementById(tab.id+'_content');
- // Это вкладка на которой кликнули мышкой
- if (tab.id==el.id) {
- // Сделать вкладку активной
- tab.className='tab_active';
- // Показать связанный с ней блок контента
- if (content) {
- content.className='tab_content visible';
- }
- }
- else {
- // Сделать вкладку неактивной
- tab.className='';
- // Скрыть связанный с ней блок контента
- if (content) {
- content.className='tab_content';
- }
- }
- }
- }
Просмотров: 16554 | Комментариев: 15
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Сергей
(25.12.2013 в 16:10):
В фаербаге всё работает, на другом блоге тоже, видимо ошибка в стилях самого блога где-то ((
ManHunter
(25.12.2013 в 15:14):
На демо-странице же все работает. Открывай в фаербаге сводный стиль, ищи откуда берется отступ.
Сергей
(25.12.2013 в 14:48):
Нужна помощь по данному меню, установил - всё работает прекрасно, но есть одна заковыка, на каждой последующей вкладке контент сдвигается всё ниже и ниже и на последней вкладке отрыв от топа очень большой, никакие марджины с паддингами не помогают! Не подскажете как сделать, чтобы контент на каждой вкладке начинался с одного и того же места (10 пикселей от вкладок)?
ManHunter
(14.09.2013 в 19:45):
Может быть сперва стоило бы выяснить, что делает та или иная технология и зачем они нужны? И да, тут нет ни строчки на Java.
Михаил
(14.09.2013 в 19:18):
Спасибо, а сделать ее только на css или на php можно? Без Java.
ManHunter
(09.07.2013 в 07:29):
Генерировать меню на сервере при отрисовке страницы и подставлять нужные стили нужным вкладкам.
Павел
(09.07.2013 в 01:49):
А если, например, во вкладках ссылки на страницы и при нажатии на любую из сылок идет переход, но выделение вкладки снимается, как можно зафиксировать вкладку, чтобы горела сама вкладка и ссылка во вкладке текущей страницы?
Станислав
(29.06.2013 в 07:25):
Спасибо большое с удовольствием воспользуюсь.
Ярослав
(18.06.2013 в 18:25):
Спасибо большое за код и знания.
Очень пригодилось.
Очень пригодилось.
Лена
(13.05.2013 в 17:17):
Это я знаю, спасибо. Буду думать )))
ManHunter
(13.05.2013 в 17:09):
Подсказка:
<a href="drugaya_stranica.html">другая страница</a>
Но код для этого надо не "подправить", а целиком переписывать.
<a href="drugaya_stranica.html">другая страница</a>
Но код для этого надо не "подправить", а целиком переписывать.
Лена
(13.05.2013 в 17:08):
Подскажите, пожалуйста, как поправить код, чтобы при клике загружалось содержимое другой страницу, то есть сделать ссылку. Спасибо!
Isaev
(03.05.2013 в 14:45):
Какая приятная менюшка... и главное всё на 1 страничке )
Михаил
(29.04.2013 в 11:20):
Спасибо за Знания
Добавить комментарий
Заполните форму для добавления комментария
Измучался уже с этой проблемой, но решение оказалось банальней некуда! Бывает...