Все для CMS » Вебмастеру » Полезные статьи » Анимированные вкладки контента на CSS3

Анимированные вкладки контента на CSS3

  • 0
Данный материал предоставлен сайтом All4Cms.ru исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Скачать бесплатно Анимированные вкладки контента на CSS3.

В этом уроке мы реализуем несколько простых вкладок с содержанием с помощью радио-кнопки вместе с псевдо-классом:checked применяя CSS3.

Данный пример работает только в браузерах поддерживающих CSS3.

HTML

Мы применим элементы input для подключения к div с классом content. Содержание подразделение включает в себя все "закладки".

Для каждого input элемента мы будем иметь label элемента. Все label будут стилизованы как вкладки.

<section class="tabs">
    <input id="tab-1" type="radio" name="radio-set" class="tab-selector-1" checked="checked" />
    <label for="tab-1" class="tab-label-1">О нас</label>
     
    <input id="tab-2" type="radio" name="radio-set" class="tab-selector-2" />
    <label for="tab-2" class="tab-label-2">Сервисы</label>
     
    <input id="tab-3" type="radio" name="radio-set" class="tab-selector-3" />
    <label for="tab-3" class="tab-label-3">Портфолио</label>
     
    <input id="tab-4" type="radio" name="radio-set" class="tab-selector-4" />
    <label for="tab-4" class="tab-label-4">Контакты</label>
             
    <div class="clear-shadow"></div>
                 
    <div class="content">
        <div class="content-1">
            <p>Ваши материалы</p>
        </div>
        <div class="content-2">
            <p>Ваши материалы</p>
        </div>
        <div class="content-3">
            <p>Ваши материалы</p>
        </div>
        <div class="content-4">
            <p>Ваши материалы</p>
        </div>
    </div>
</section>

Каждый элемент input имеет значение и мы можем внести свой input selected по умолчанию, добавив checked атрибут.

CSS

Сначала определим некоторые размеры и скроем input, устанавливая их непрозрачность до 0:

.tabs {
    position: relative;
    margin: 40px auto;
    width: 750px;
}
 
.tabs input {
    position: absolute;
    z-index: 1000;
    width: 120px;
    height: 40px;
    left: 0px;
    top: 0px;
    opacity: 0;
    cursor: pointer;
}
.tabs input#tab-2{
    left: 120px;
}
.tabs input#tab-3{
    left: 240px;
}
.tabs input#tab-4{
    left: 360px;
}

Input будем рассматривать как label. Будет казаться, будто мы нажимаем на label, на самом деле мы будем нажимать на input .

Далее, мы сделаем label выглядящими как вкладки, определив некоторые стили для них. Заметим, что каждый из label имеет свой z-index. Box-shadow добавят глубины и реализма вкладки.

.tabs label {
    background: linear-gradient(top, #5ba4a4 0%,#4e8c8a 100%);
    font-size: 15px;
    line-height: 40px;
    height: 40px;
    position: relative;
    padding: 0 20px;
    float: left;
    display: block;
    width: 80px;
    color: #385c5b;
    letter-spacing: 1px;
    text-transform: uppercase;
    font-weight: bold;
    text-align: center;
    text-shadow: 1px 1px 1px rgba(255,255,255,0.3);
    border-radius: 3px 3px 0 0;
    box-shadow: 2px 0 2px rgba(0,0,0,0.1), -2px 0 2px rgba(0,0,0,0.1);
}
 
.tabs input:hover + label {
    background: #5ba4a4;
}
 
.tabs label:first-of-type {
    z-index: 4;
    box-shadow: 2px 0 2px rgba(0,0,0,0.1);
}
 
.tab-label-2 {
    z-index: 3;
}
 
.tab-label-3 {
    z-index: 2;
}
 
.tab-label-4 {
    z-index: 1;
}

Сделаем так, чтобы нижняя часть тени вкладки была не видна, то мы будем рассматривать его при помощи псевдо-элемента:after без содержимого:

.tabs label:after {
    content: '';
    background: #fff;
    position: absolute;
    bottom: -2px;
    left: 0;
    width: 100%;
    height: 2px;
    display: block;
}

При нажатии на вкладку (label), она будет менять цвет. Нужно добиться, чтобы "checked” label был выше всех остальных слоев во вкладках.

Для этого задаём ему самый высокий z-index:

.tabs input:checked + label {
    background: #fff;
    z-index: 6;
}

Как уже упоминалось, содержание div будет содержать все вкладки страниц, и мы установим ее z-index до 5, просто чтобы быть выбраны в соответствии с label.

Таким образом, box-shadow содержанию будет охватывать все другие label.

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

По умолчанию (если label не выбрана / нажата) они должны быть скрыты.

Для этого мы устанавливаем непрозрачность 0, а z-index 1. Использование display: none невозможно, потому что оно не поддерживается в переходах.

.content {
    background: #fff;
    position: relative;
    width: 100%;
    height: 370px;
    z-index: 5;
    box-shadow: 0 -2px 3px -2px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.1);
    border-radius: 0 3px 3px 3px;
}
 
.content div {
    position: absolute;
    top: 0;
    left: 0;
    padding: 10px 40px;
    z-index: 1;
    opacity: 0;
    transition: all linear 0.1s;
}
 
.content div h2,
.content div h3{
    color: #398080;
}
.content div p {
    font-size: 14px;
    line-height: 22px;
    font-style: italic;
    text-align: left;
    margin: 0;
    color: #777;
    padding-left: 15px;
    font-family: Cambria, Georgia, serif;
    border-left: 8px solid rgba(63,148,148, 0.1);
}

Когда мы хотим содержание появляться (label clicked) мы устанавливаем непрозрачность на 1 и поднять z-index, потому что мы хотим чтобы эта содержание div было выше всех других:

.tabs input.tab-selector-1:checked ~ .content .content-1,
.tabs input.tab-selector-2:checked ~ .content .content-2,
.tabs input.tab-selector-3:checked ~ .content .content-3,
.tabs input.tab-selector-4:checked ~ .content .content-4 {
    z-index: 100;
    opacity: 1;
    transition: all ease-out 0.2s 0.1s;
}

  • Полезные статьи
  • 23-07-2013, 13:07
  • 3 737
Вернуться назад
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.