ВЫВОД СОДЕРЖИМОГО В ВИДЕ ЗАКЛАДОК ИЛИ ТАБОВ ОЧЕНЬ РАСПРОСТРАНЕННЫЙ И ЗНАКОМЫЙ ВСЕМ ЭЛЕМЕНТ В ВЕБ-ДИЗАЙНЕ, А ЧАСТО ОКАЗЫВАЕТСЯ И ОЧЕНЬ ПОЛЕЗНЫМ.
Итак, на этом уроке мы собираемся реализовать несколько простых закладок с контентом (табов) используя радио-кнопки вместе с псевдо-классом :checked и родственными комбинаторами (sibling combinators).
HTML-разметка
Мы будем использовать элементы input для связывания всех вкладок с классом 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">About us</label> <input id="tab-2" type="radio" name="radio-set" class="tab-selector-2" /> <label for="tab-2" class="tab-label-2">How we work</label> <input id="tab-3" type="radio" name="radio-set" class="tab-selector-3" /> <label for="tab-3" class="tab-label-3">References</label> <input id="tab-4" type="radio" name="radio-set" class="tab-selector-4" /> <label for="tab-4" class="tab-label-4">Contact us</label> <div class="clear-shadow"></div> <div class="content"> <div class="content-1"> <p>Some content</p> </div> <div class="content-2"> <p>Some content</p> </div> <div class="content-3"> <p>Some content</p> </div> <div class="content-4"> <p>Some content</p> </div> </div> </section>
Мы всегда можем изменить закладку открытую по умолчанию, добавив атрибут checked.
CSS
Первое, что нужно сделать, это определить некоторые размеры и спрятать радио-кнопки, установив для них прозрачность равную 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; }
Радио-кнопки будут скрыты ярлыками. Это будет вроде того, как если бы мы нажимали на ярлык, а на самом деле мы кликали по кнопке. Этот трюк также будет работать в мобильных браузерах.
Далее, мы сделаем ярлыки похожими на закладки, определив ряд стилей для них. Обратите внимание, что каждый из ярлыков имеет свой 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; }
Так как мы не хотим, чтобы нижняя часть box-shadow была видна, мы скроем её с помощью псевдо-элемента :after :
.tabs label:after { content: ''; background: #fff; position: absolute; bottom: -2px; left: 0; width: 100%; height: 2px; display: block; }
Когда мы нажимаем на закладку (ярлык), она будет отличаться по стилю и цвету от других. Нужно убедиться, что "отмеченный" ярлык будет поверх всех остальных слоев во вкладках. Для этого мы зададим ему высокое значение z-index:
.tabs input:checked + label { background: #fff; z-index: 6; }
Как уже упоминалось выше, блок с классом content будет содержать все страницы, и мы установим для него z-index равный 5, просто чтобы быть под выбранным ярлыком. Таким образом, box-shadow области с содержимым будет накрывать неактивные вкладки.
Внутри области с содержимым, имеются четыре блока и каждый из них имеет свое собственное содержание. По умолчанию (пока ярлык не выбран/нажат), мы хотим, чтобы они были скрыты. Таким образом, мы устанавливаем прозрачность равную нулю, а z-index равный 1. Мы не можем использовать свойство display: none, потому что оно не поддерживает переходы (transitions).
.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); }
Когда мы хотим чтобы содержание появилось (кликаем мышкой по закладке) мы устанавливаем прозрачность равную 1 и повышаем z-index, потому что мы хотим, чтобы эта часть содержания была выше всех остальных:
.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; }
Скачать исходники:
Всё бы тут хорошо, но размер то фиксированный, а если указать 100% то вылазиет за границу! А всё из за position: absolute; если поставить position: relative; то не корректно отображается текст! А так скрипт супер.
- Подпись автора