Как делать табы на jQuery
773

Как делать табы на jQuery

8 октября 2008, 18:36JavaScriptрейтинг +9-

Всем привет! Сегодня мы покажем как делать табы (они же вкладки) с помощью jQuery. Табы довольно популярная штука в современном вебе, так что любой уважающий себя человек просто обязан знать, как их делать. Поехали.

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

Итак, для начала нам нужен HTML. Скажем, у нас будет всего 3 таба (соотвественно и 3 вида содержимого). Пишем следующий код:

<h1>Цитаты</h1>
<div class="tabs">
<!-- Это сами вкладки -->
<ul class="tabNavigation">
<li><a class="" href="#first">Д.Огилви</a></li>
<li><a class="" href="#second">Миллер</a></li>
<li><a class="" href="#third">Черчилль</a></li>
</ul>
<!-- Это контейнеры содержимого -->
<div id="first">
<h2>Д.Огилви</h2>
<p>Лучший способ превратить работника в генератор идей это возложить на него самую высокую ответственность.</p>
</div>
<div id="second">
<h2>Миллер</h2>
<p>Деньги не имеют значения — пока они у вас есть.</p>
</div>
<div id="third">
<h2>Черчилль</h2>
<p>Пессимист видит трудности при каждой возможности; оптимист в каждой трудности видит возможности.</p>
</div>
</div>

Обратите внимание, что имя якоря ссылки таба соотвестсвует id дива.

Теперь добавим сюда стилей по вкусу:

div.tabs {
background: #333;
padding: 1em;
}

div.container {
margin: auto;
width: 90%;
margin-bottom: 10px;
}

ul.tabNavigation {
list-style: none;
margin: 0;
padding: 0;
}

ul.tabNavigation li {
display: inline;
}

ul.tabNavigation li a {
padding: 3px 9px;
background-color: #666;
color: #000;
text-decoration: none;
}

ul.tabNavigation li a.selected,
ul.tabNavigation li a.selected:hover {
background: #FFF;
color: #000;
}

ul.tabNavigation li a:hover {
background: #ccc;
color: #000;
}

ul.tabNavigation li a:focus {
outline: 0;
}

div.tabs div {
padding: 5px;
margin-top: 3px;
border: 1px solid #FFF;
background: #FFF;
}

div.tabs div h2 {
margin-top: 0;
}

Финальным штрихом будет JavaScript код:

$(function () {
var tabContainers = $('div.tabs > div'); // получаем массив контейнеров
tabContainers.hide().filter(':first').show(); // прячем все, кроме первого
// далее обрабатывается клик по вкладке
$('div.tabs ul.tabNavigation a').click(function () {
tabContainers.hide(); // прячем все табы
tabContainers.filter(this.hash).show(); // показываем содержимое текущего
$('div.tabs ul.tabNavigation a').removeClass('selected'); // у всех убираем класс 'selected'
$(this).addClass('selected'); // текушей вкладке добавляем класс 'selected'
return false;
}).filter(':first').click();
});

Теперь остается посмотреть, что у нас получилось.

Надо сказать, что сегодня мы изобрели велосипед (плагинов для табов огромное количество), но зато посмотрели как работают селекторы jQuery. Еще к плюсам можно отнести то, что при отключенном JS пользователь все равно увидит информацию из табов.

На сегодня все. Вопросы и замечания — в комментариях. Пока.

Memori.rumister-wong.combobrdobr.rumoemesto.rudel.icio.uszakladki.yandex.rugoogle.com/bookmarks/

Понравилась статья?

Тогда подпишись на обновления через RSS или воспользуйся
другими способами подписки.

Читать в Яндекс.Ленте Добавить в Google Добавить в Netvibes
Подписка по электронной почте
 

RSS Комментарии

спасибо, довольно неплохо и познавательно
sergy, 8 октября 2008, 20:30
Спасибо
Андрей [Sam] Несвой, 9 октября 2008, 8:51
Полезная статья, спасибо. Ожидал увидеть обзор одного из плагинов, сначала немного смутился, когда увидел, что Вы всё сами реализовали :)
Ney, 9 октября 2008, 10:23
Спасибо. Как раз искал простой аякс таб..
Вадим, 9 октября 2008, 14:36
Вадим, сейчас это не аякс, но переделать не сложно )
Grin, 9 октября 2008, 18:17
Grin, Чем сейчас и занимаюсь :-)
Вадим, 9 октября 2008, 18:26
сорри за занудство, однако абсолютно все версии табов, что я где либо видел, предусматривают размещение собственно селекторов прямо над областью, где сами табы и переключаются. инерция мышления, ни в одном примере не видел чтобы табы были отделены от переключаемой области. например, при 2-колоночной верстке - в навигационной колонке селекторы, во 2-й, контентной колонке - сами табы...
kikaha, 10 октября 2008, 4:33
Interesnyi primer. V svoe vremya vyuchil jQuery izza togo chto ne mog naiti podhodyaschego legkogo i udobnogo plagina dlya tabov... V rezul'tate napisal svoi. @kikaha - Na apple.com/safari zakladki realizovany sboku. A voobsche eto vopros dizaina, a implementaciya odna i tazhe.
Shimon, 10 октября 2008, 18:58
@Shimon - ну занудный я, понятно что это вопрос дизайна, просто новички видят все примеры единообразно и считают что только таким образом и можно реализовать данный эффект, и никак иначе, то есть это замечание к оформлению примеров, не претензия ни в коем случае :)
kikaha, 10 октября 2008, 21:25
Хороший обзор, только смущает принудительное использование якорей в ссылках, я лично предпочитаю, что бы там были прямые ссылки на ресурсы расположенные в табах, что бы они были доступны и с JS и без них, и по клику средней кнопкой. Но это в принципе не сильно меняет идею ) 2 kikaha по сути если они будут расположены в разных местах, то поменяется лишь селектор контейнера.
Денис Чистяков, 12 октября 2008, 14:55
Денис, все зависит от того, как вы показываете содержимое табов. Если оно грузится аяксом, то да, ваш вариант правильный. Если же содержимое уже находится на этой странице (как у нас), то нет смысла делать ссылки, якори в этом случае самое то
Grin, 13 октября 2008, 17:11
Еще в качестве улучшения можно предложить создавать сами закладки (те, что надо контентом) динамически на JS. Тогда при отключенных скриптах будет просто 3 области без ненужных табов
Grin, 13 октября 2008, 17:13
Тоже самое бы и для вертикальных табов... Ибо с js не очень хорошо дружу, разбираться с jquery в подробностях времени нет, а сделать нужно...
Накукрыскин, 25 ноября 2008, 21:34
а вертикальные табы можно сделать? т.е., чтобы табы были не сверху, а, например, слева или справа.
Антон, 6 декабря 2008, 18:02
Спасибо, только что и себе прикрутил... :) Но появился такой вопрос: можно ужать код, если ставить 3-5 блоков, в каждом по 2-3 таба ? Я не сильно пока разбираюсь в Джиквери, но вроде бы чуток сократил... Все равно получается код почти в 20 строк, если не сложно, приведите, пожалуйста, пример, хотя бы на 2 блока.

Странно, что скрипт (поставил в комменты), который просто раздвигается/задвигается занимает всего(!) 1-3 строчки ??? :)
Зайва Игорь Леонидович, 16 декабря 2008, 9:06
спс!!
Создатель веба, 18 декабря 2008, 0:13
Спасибо за решение. Но у меня возник вопрос: как в данном примере правильно сделать запоминание текущего таба с помощью плагина "Cookie for jQuery"? Если можно покажите пример с кодом.
Спасибо.
anree@pisem.net, 30 декабря 2008, 23:26
Ну в общем отвечу сам на свой предыдущий пост. Использовал стандартный Cookie плагин для jQuery, и немного изменив код примера добился "запоминания" последней выбранной вкладки после перезагрузки страницы записывая индекс вкладки в кукисы. Т.к. я только учусь возможно мое решение неверное но оно работает. Было бы интересно увидеть другой вариант реализации.

var tabContainers = $('div.tabs > div');
var saved_tab = parseInt($.cookie('saved_tab')) || 0;

tabContainers.hide().filter(':eq('+saved_tab+')').show();
$('div.tabs ul.tabNavigation a').click( function () {

var index = $('div.tabs ul.tabNavigation a').index(this);
$.cookie('saved_tab', index);
tabContainers.hide();
tabContainers.filter(':eq('+index+')').show();
$('div.tabs ul.tabNavigation a').removeClass('selected');
$(this).addClass('selected');
return false;
}).filter(':eq('+saved_tab+')').click();
anree@pisem.net (Андрей Шкодяк / Украина, Хмельницкий), 31 декабря 2008, 3:25
Простите, немного занудно выглядит, но куда вставлять javascript
Трейсер, 5 января 2009, 16:27
Трейсер, в принципе нет особой разницы куда вы его вставите
Grin, 5 января 2009, 16:47

Спонсоры

Wi-Fi точки в твоем городе
Profit-project.ru - заработай на своих сайтахРеклама на сайте

Блогорол