Закладки на чистом CSS3

14-02-11 Css, Html Animation, Tabs 1

CSS3 становится очень популярным, практически все современные браузеры поддерживают этот стандарт. Многие фичи, которые раньше можно было сделать только с помощью JavaScript, сегодня можно реализовать на чистом CSS.

В этой статье мы рассмотрим создание закладок с использованием только CSS.

Прежде всего, для замены функционала JavaScript чистым CSS, надо найти способ отслеживать нажатия на кнопки с помощью CSS. Мы будем использовать скрытые переключатели (radio button), которые будут указывать на соответствующий им тег <label>. Тег <label> будет работать как кнопка и при нажатии на него будет меняться атрибут checked соответствующего переключателя. Теперь мы можем обрабатывать нажатия с помощью селектора :checked.

HTML

<ul class="tabs">
        <li>
          <input type="radio" checked name="tabs" id="tab1">
          <label for="tab1">tab 1</label>
          <div id="tab-content1" class="tab-content animated fadeIn">
            ...
          </div>
        </li>
        <li>
          <input type="radio" name="tabs" id="tab2">
          <label for="tab2">tab 2</label>
          <div id="tab-content2" class="tab-content animated fadeIn">
            ...
          </div>
        </li>
        <li>
          <input type="radio" name="tabs" id="tab3">
          <label for="tab3">tab 3</label>
          <div id="tab-content3" class="tab-content animated fadeIn">
            ...
          </div>
        </li>
</ul>

Из разметки вы можете видеть, что для каждой закладки необходимы переключатель (radio button), метка (тег <label>) и, собственно, контейнер, содержащий текст закладки. И все элементы находятся на одном уровне, что отличается от обычной структуры закладок, сделанных с помощью JavaScript. Это возможно благодаря селектору «~», который позволяет применять стили к элементам одного уровня (имеющих общего родителя).

Таким образом вы можете полностью реализовать функции закладок абсолютно без JavaScript.

CSS

body, html {
          height: 100%;
          margin: 0;
          -webkit-font-smoothing: antialiased;
          font-weight: 100;
          background: #aadfeb;
          text-align: center;
          font-family: helvetica;
      }

      .tabs input[type=radio] {
          position: absolute;
          top: -9999px;
          left: -9999px;
      }
      .tabs {
        width: 650px;
        float: none;
        list-style: none;
        position: relative;
        padding: 0;
        margin: 75px auto;
      }
      .tabs li{
        float: left;
      }
      .tabs label {
          display: block;
          padding: 10px 20px;
          border-radius: 2px 2px 0 0;
          color: #08C;
          font-size: 24px;
          font-weight: normal;
          font-family: 'Lily Script One', helveti;
          background: rgba(255,255,255,0.2);
          cursor: pointer;
          position: relative;
          top: 3px;
          -webkit-transition: all 0.2s ease-in-out;
          -moz-transition: all 0.2s ease-in-out;
          -o-transition: all 0.2s ease-in-out;
          transition: all 0.2s ease-in-out;
      }
      .tabs label:hover {
        background: rgba(255,255,255,0.5);
        top: 0;
      }

      [id^=tab]:checked + label {
        background: #08C;
        color: white;
        top: 0;
      }

      [id^=tab]:checked ~ [id^=tab-content] {
          display: block;
      }
      .tab-content{
        z-index: 2;
        display: none;
        text-align: left;
        width: 100%;
        font-size: 20px;
        line-height: 140%;
        padding-top: 10px;
        background: #08C;
        padding: 15px;
        color: white;
        position: absolute;
        top: 53px;
        left: 0;
        box-sizing: border-box;
        -webkit-animation-duration: 0.5s;
        -o-animation-duration: 0.5s;
        -moz-animation-duration: 0.5s;
        animation-duration: 0.5s;
      }

В демо также использована CSS библиотека для анимации чтобы добавить немного эффектов анимации при появлении текста закладок.

Хочешь получать статьи на почту?

Подпишись на обновления!
* Ваш email не будет разглашен/продан. Вы сможете отписаться в любое время.

1 Комментарий

  1. Георгий:

    Спасибо за отличную идею!
    Но я столкнулся с серьезной проблемой. Как быть, если после получившегося … я хочу вставить div’ы и прочие элементы??? Ведь они загораживаются всплывающим содержимом закладок, потому что у .tab-content абсолютное позиционирование.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *