Делаем красивые табы (вкладки) с помощью CSS и JQuery

Разместил / Просмотров: 20 194 / комментариев 15

Здравствуйте, уважаемые читатели блога. В этот, такой морозный день мы будем делать с Вами красивые табы с помощью CSS и JQuery. Оказывается, что эти, так называемые, табы очень полезны для сайта в целом, они позволяют существенно сэкономить место на странице. Их можно разместить везде, в сайдбаре, или не посредственно, в самом контенте, статье.

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

Посмотреть пример

Ну а теперь пришло время перейти к самому уроку, и так, поехали.

HTML

Сама оболочка табов довольно проста, она состоит из тегов <ul> и </div>. давайте посмотрим:

</pre>
<ul id="tabs">
	<li><a title="tab1" href="#">Один</a></li>
	<li><a title="tab2" href="#">Два</a></li>
	<li><a title="tab3" href="#">Три</a></li>
	<li><a title="tab4" href="#">Четыре</a></li>
</ul>
<div id="content">
<div id="tab1">Один контент</div>
<div id="tab2">Второй контент</div>
<div id="tab3">Третий контент</div>
<div id="tab4">Четвёртый контент</div>
</div>
<pre>

Как видите теги <ul> — это будущие заголовки табов, этому тегу мы присвоили id=»tabs», которой далее будет использоваться при построении CSS стилей.

Между тегами <div id=»content»></div> будет располагаться сам основной контент.

Теперь давайте придадим нашим табам красивый вид.

CSS

Данные стили очень просты и понятны, которые Вы с лёгкостью сможете изменить по Вашему усмотрению, тем более никаких изображений, только CSS.

#tabs
{
  overflow: auto;
  width: 100%;
  list-style: none;
  margin: 0;
  padding: 0;
}

#tabs li
{
    margin: 0;
    padding: 0;
    float: left;
}

#tabs a
{
    -moz-box-shadow: -4px 0 0 rgba(0, 0, 0, .2);
    -webkit-box-shadow: -4px 0 0 rgba(0, 0, 0, .2);
    box-shadow: -4px 0 0 rgba(0, 0, 0, .2);
    background: #ad1c1c;
    background:    -moz-linear-gradient(220deg, transparent 10px, #ad1c1c 10px);
    background:    -webkit-linear-gradient(220deg, transparent 10px, #ad1c1c 10px);
    background:     -ms-linear-gradient(220deg, transparent 10px, #ad1c1c 10px);
    background:      -o-linear-gradient(220deg, transparent 10px, #ad1c1c 10px);
    background:         linear-gradient(220deg, transparent 10px, #ad1c1c 10px);
    text-shadow: 0 1px 0 rgba(0,0,0,.5);
    color: #fff;
    float: left;
    font: bold 12px/35px 'Lucida sans', Arial, Helvetica;
    height: 35px;
    padding: 0 30px;
    text-decoration: none;
}

#tabs a:hover
{
    background: #c93434;
    background:    -moz-linear-gradient(220deg, transparent 10px, #c93434 10px);
    background:    -webkit-linear-gradient(220deg, transparent 10px, #c93434 10px);
    background:     -ms-linear-gradient(220deg, transparent 10px, #c93434 10px);
    background:      -o-linear-gradient(220deg, transparent 10px, #c93434 10px);
    background:         linear-gradient(220deg, transparent 10px, #c93434 10px);
}

#tabs a:focus
{
    outline: 0;
}

#tabs #current a
{
    background: #fff;
    background:    -moz-linear-gradient(220deg, transparent 10px, #fff 10px);
    background:    -webkit-linear-gradient(220deg, transparent 10px, #fff 10px);
    background:     -ms-linear-gradient(220deg, transparent 10px, #fff 10px);
    background:      -o-linear-gradient(220deg, transparent 10px, #fff 10px);
    background:         linear-gradient(220deg, transparent 10px, #fff 10px);
    text-shadow: none;
    color: #333;
}

#content
{
    background-color: #fff;
    background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ddd));
    background-image: -webkit-linear-gradient(top, #fff, #ddd);
    background-image:    -moz-linear-gradient(top, #fff, #ddd);
    background-image:     -ms-linear-gradient(top, #fff, #ddd);
    background-image:      -o-linear-gradient(top, #fff, #ddd);
    background-image:         linear-gradient(top, #fff, #ddd);
    -moz-border-radius: 0 2px 2px 2px;
    -webkit-border-radius: 0 2px 2px 2px;
    border-radius: 0 2px 2px 2px;
    -moz-box-shadow: 0 2px 2px #000, 0 -1px 0 #fff inset;
    -webkit-box-shadow: 0 2px 2px #000, 0 -1px 0 #fff inset;
    box-shadow: 0 2px 2px #000, 0 -1px 0 #fff inset;
    padding: 30px;
}

#content div
{
    height: 220px;
}

Теперь нам нужно сделать плавное переключение между табами, это реализовывать мы будем с помощью JQuery.

JQuery

$(document).ready(function() {
        $("#content div").hide(); // Скрытое содержимое
        $("#tabs li:first").attr("id","current"); // Какой таб показать первым
        $("#content div:first").fadeIn(); // Показ первого контента таба

    $('#tabs a').click(function(e) {
        e.preventDefault();
        $("#content div").hide(); //Скрыть всё содержимое
        $("#tabs li").attr("id",""); //Сброс идентификаторов
        $(this).parent().attr("id","current"); // Активация идентификаторов
        $('#' + $(this).attr('title')).fadeIn(); // Показать содержимое текущей вкладки
    });
})();

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

Посмотреть пример

Совместимость с браузерами

Эти табы поддерживают практически все браузеры, только в некоторых они будут выглядеть чуть по другому, потому что многие, ещё пока, не поддерживают CSS3.

Вот и всё, надеюсь Вам понравилось :-) Если что то Вам будет не понятно обязательно спрашивайте в комментариях. До скорых встреч.

  • Евгений

    Премного благодарен! :))

  • Очень рад, что данный пост был Вам полезен :-)

  • Здравствуйте. У меня вот такой вопросик. Если я на данных табах подключу комментарии на сайте, то окно будет вниз вытягиваться, или комменты под него зайдут.

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

  • Валерий

    А как можно к пунктам привязать модули что бы их вывести на джумла 2.5?

  • Валерий, с джумлой я ничем Вам помочь не смогу.

  • Алена

    Куда и как писать код JQuery? Не все такие умные как вы (((

  • Алёна, между тегами head и /head. Ещё не забудьте добавить перед кодом и после кода

  • Дима

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

  • Дима, что то не правильно делаете, проверьте ещё раз всё.

  • Дима

    я уже всё перепробывал..Александр спасайте!!

  • Дима

    из вот такого кода

    Фильмы

    Сериалы

    Мультфильмы

    Телешоу

    hgfhfghgfhgfhgfhgfh

    gfhgfhgfhgfhfgh

    получаеться что на фото и ещё табы не выделяються активным белым
    а я всё делал по инструкции

  • Дима

    получаеться что на фото и ещё табы не выделяються активным белым
    а я всё делал по инструкции

  • Возможно какие то классы конфликтуют

  • олег

    Подскажите как убрать еффект при нажатии на вкладку «выкидывает на верх страницы»