Закладки на чистом CSS3
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 библиотека для чтобы добавить немного эффектов анимации при появлении текста закладок.








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