HTML
Прежде всего, создадим базовый div-контейнер с определённым классом, например <div class="tabs-box"> и выставим значение ширины width: 100%;, в этом случае блок вкладок замечательно впишется в любой другой родительский контейнер(основной блок контента, боковые колонки и т.д.).
В этом базовом контейнере размещаем разметку наших вкладок, переключатели которых это ничто иное, как стандартный неупорядоченный список <ul>, а далее прописываем внутренние блоки <div> с определённым содержанием и элементами аккордеона(панели заголовков), которые будут скрыты в режиме вкладок.
Посмотрите пример html-кода вкладок(как есть), думаю концепция данного решения, вам станет сразу понятна:
<!-- Базовый контейнер вкладок(табов) -->
<div class="tabs-box">
<!-- Список вкладок -->
<ul class="tabs">
<li class="active" rel="tab1">Вкладка 1</li>
<li rel="tab2">Вкладка 2</li>
<li rel="tab3">Вкладка 3</li>
<li rel="tab4" class="tab_last">Вкладка 4</li>
</ul>
<!-- Контейнер для блоков с содержанием -->
<div class="tab_container">
<!-- Панель заголовка в режиме аккордеона -->
<h3 class="d_active tab_accordion" rel="tab1">Вкладка 1</h3>
<!-- Блок вкладки с содержанием -->
<div id="tab1" class="tab_content" style="display: block;">
<h2>Содержимое Вкладки 1</h2>
<p>Далеко-далеко за словесными горами в стране гласных и согласных живут рыбные тексты. Вдали от всех живут они в буквенных домах на берегу Семантика большого языкового океана.
<p>Маленький ручеек Даль журчит по всей стране и обеспечивает ее всеми необходимыми правилами.</p>
</div>
<!-- конец #tab1 -->
<h3 class="tab_accordion" rel="tab2">Вкладка 2</h3>
<div id="tab2" class="tab_content" style="display: none;">
<h2>Содержимое Вкладки 2</h2>
<p><img src="http://lorempixel.com/250/200" class="img-left">
<p>Я совсем один и блаженствую в здешнем краю, словно созданном для таких, как я. Я так счастлив, мой друг, так упоен ощущением покоя, что искусство мое страдает от этого.
<p>Душа моя озарена неземной радостью, как эти чудесные весенние утра, которыми я наслаждаюсь от всего сердца.</p>
</div>
<!-- конец #tab2 -->
<h3 class="tab_accordion" rel="tab3">Вкладка 3</h3>
<div id="tab3" class="tab_content" style="display: none;">
<h2>Содержимое Вкладки 3</h2>
<p><img src="http://lorempixel.com/250/200" class="img-right">
<p>Проснувшись однажды утром после беспокойного сна, Грегор Замза обнаружил, что он у себя в постели превратился в страшное насекомое.
<p>Лежа на панцирнотвердой спине, он видел, стоило ему приподнять голову, свой коричневый, выпуклый, разделенный дугообразными чешуйками живот, на верхушке которого еле держалось готовое вот-вот окончательно сползти одеяло</p>
</div>
<!-- конец #tab3 -->
<h3 class="tab_accordion" rel="tab4">Вкладка 4</h3>
<div id="tab4" class="tab_content" style="display: none;">
<h2>Содержимое Вкладки 4</h2>
<div class="video-responsive">
<iframe width="1280" height="720" src="http://www.youtube.com/embed/mRrE8CFkkAg" frameborder="0" allowfullscreen></iframe>
</div>
</div>
<!-- конец #tab4 -->
</div>
<!-- конец .tab_container -->
</div>
<!-- конец .tabs-box -->
Как видите в примере я сразу продемонстрировал некоторые функциональные возможности вкладок при использовании в них, помимо текстового содержания и других элементов, в частности это миниатюры и полноразмерные изображения, а так же отзывчивый блок встраиваемого через iframe, object или embed видео.
При переходе в состояние аккордеона переключатели вкладок чудесным образом превращаются в панели с заголовком, для этого использовал тег <h3> с определённым классом и атрибутом rel, с помощью которого, как и в случае с вкладками, мы привяжем панели заголовков аккордеона с конкретными блоками с содержанием.
<h3 class="d_active tab_accordion" rel="tab1">Вкладка 1</h3>
Посмотрите, значение атрибута rel="tab1" точно соответствует идентификатору id="tab1"первого блока вкладок(аккордеона) с содержанием
<div id="tab1" class="tab_content" style="display: block;">
С помощью style="display: block;" мы явно указываем, что при загрузке будет показано содержание первой вкладки.
Это всё что касается html-разметки вкладок, с другими встроенными элементами( изображения, миниатюры, видео…) думаю разберётесь, короткие комментарии в css и html в этом вам помогут.
к содержанию ↑CSS
C html-разметкой мы более-менее разобрались, теперь необходимо сформировать общие стили и оформить внешний вид вкладок, и аккордеона с помощью «магии» CSS.
Расписывать каждый отдельный элемент я не буду, конкретно остановлюсь лишь на определениях стадии перехода вкладок в режим аккордеона с помощью медиа-запросов. Ну, а весь фарш кода CSS в конечном его виде, будет выглядеть примерно так:
/* Вкладки (табы)
-----------------------------------------------------*/
/* бфзовый контейнер вкладок(табов) */
.tabs-box {
display: inline-block;
position: relative;
padding: 0;
margin: 0;
width: 100%;
}
/* панель вкладок */
ul.tabs {
margin: 0;
padding: 0;
float: left;
list-style: none;
height: 42px;
border-bottom: 1px solid #00655c;
width: 100%;
}
ul.tabs li {
float: left;
margin: 0;
cursor: pointer;
padding: 0 21px;
height: 42px;
line-height: 42px;
border-top: 1px solid #00655c;
border-left: 1px solid #00655c;
border-right: 1px solid #00b7a6;
background-color: #009688;
color: #ddd;
overflow: hidden;
position: relative;
font-size: 16px
}
/* указываем стиль правой рамки у последней вкладки */
.tab_last {
border-right: 1px solid #00655c;
}
/* стили вкладок при наведении */
ul.tabs li:hover {
background-color: #26A69A;
color: #fefefe;
}
/* стили активных вкладок */
ul.tabs li.active {
background-color: #fff;
color: #333;
border-top: 2px solid green;
display: block;
}
/* контейнер вкладок первого уровня
* включающий в себя панели заголовков аккордеона
*/
.tab_container {
border: 1px solid #00655c;
border-top: none;
clear: both;
float: left;
width: 100%;
background: #fff;
overflow: auto;
}
/* блоки с содержанием по-умолчанию скрыты
* указать раскрытым при загрузке нужный блок
* с помощью style="display: block;" в html
*/
.tab_content {
padding: 20px;
display: none;
}
/* параграф внутри блоков с содержанием */
.tab_content p {
margin-bottom: 10px
}
/**
* Изображения внутри вкладок
* ...сделаем их отзывчивыми
*/
.tab_content img {
width: 100%;
height: auto;
-moz-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
-webkit-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}
/* полноразмерная картинка */
.tab_content img .large-img {
width: 100%;
margin-bottom: 10px;
}
/* миниатюра слева */
.tab_content img.img-left {
width: 25%;
float: left;
margin: 5px 15px 15px 0;
}
/* миниатюра справа */
.tab_content img.img-right {
width: 25%;
float: right;
margin: 5px 0 15px 15px;
}
/* Встраиваемое видео */
.video-responsive {
margin: 20px;
position: relative;
padding-bottom: 56.25%;
height: 0;
overflow: hidden;
-moz-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
-webkit-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
}
/* Предусмотри использование кода встраиваемого видео
*через iframe, object или embed */
.video-responsive iframe,
.video-responsive object,
.video-responsive embed {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
/* аккордеон скрыт в режиме вкладок */
.tab_accordion {
display: none;
}
/* Переход вкладок в режим аккордеона
* при достижении размера окна просмотра 480px
*/
@media screen and (max-width: 480px) {
/* скрываем вкладки */
.tabs {
display: none;
}
/* показываем элементы аккордеона */
.tab_accordion {
position: relative;
background-color: #26A69A;
font-weight: 400;
font-size: 16px;
color: #ddd;
border-top: 1px solid #ccc;
margin: 0;
padding: 14px 20px;
display: block;
cursor: pointer;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/* панели аккордеона при наведении */
.tab_accordion:hover {
background-color: #009688;
}
/* переключатель вкладок, положение вниз */
.tab_accordion:before {
content: '';
height: 8px;
width: 8px;
display: block;
border: 2px solid #fefefe;
border-right-width: 0;
border-top-width: 0;
-ms-transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
position: absolute;
right: 20px;
top: 18px
}
/* состояние активных панелей */
.d_active {
background-color: #008477;
color: #fff;
}
/* активный переключатель, положение вверх */
.d_active.tab_accordion:before {
border: 2px solid #fefefe;
border-left-width: 0;
border-bottom-width: 0;
top: 18px
}
}
Определённый шрифт к данным вкладкам я не привязывал, так как на разных сайтах и шрифты используются разные, так что при использовании вкладок в ваших проектах, будет применён базовый шрифт вашего сайта.
На демонстрационной странице использовал шрифт из семейства Roboto, подключив напрямую с Google Fonts.
Для перехода вкладок в состояние аккордеона, при просмотре на экранах меньших размеров, использовал один медиа-запрос с максимально возможным значением ширины при котором аккордеон скрыт и вкладки показаны в своём обычном состоянии, а при достижении размера окна просмотра менее указанного значения, вкладки переходят в режим аккордеона:
@media screen and (max-width: 480px) {
/* скрываем вкладки */
.tabs {
display: none;
}
/* показываем элементы аккордеона */
.tab_accordion {
position: relative;
background-color: #26A69A;
font-weight: 400;
font-size: 16px;
color: #ddd;
border-top: 1px solid #ccc;
margin: 0;
padding: 14px 20px;
display: block;
cursor: pointer;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/* панели аккордеона при наведении */
.tab_accordion:hover {
background-color: #009688;
}
/* переключатель вкладок, положение вниз */
.tab_accordion:before {
content: '';
height: 8px;
width: 8px;
display: block;
border: 2px solid #fefefe;
border-right-width: 0;
border-top-width: 0;
-ms-transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
position: absolute;
right: 20px;
top: 18px
}
/* состояние активных панелей */
.d_active {
background-color: #008477;
color: #fff;
}
/* активный переключатель, положение вверх */
.d_active.tab_accordion:before {
border: 2px solid #fefefe;
border-left-width: 0;
border-bottom-width: 0;
top: 18px
}
}
Соответственно в max-width: 480px ничего не мешает прописать любое другое, нужное вам значение, экспериментируйте, главное чтобы результат выглядел корректно и логично.
Так же можете использовать большее количество медиа-запросов под различные типы пользовательских устройств, что позволит более гибко настроить переходы вкладок в состояние аккордеона и обратно.
jQuery
В настоящее время, учитывая возможности современных браузеров с поддержкой новых свойств CSS3, такой вид отзывчивых вкладок с переходом в аккордеон, можно реализовать воспользовавшись исключительно средствами CSS, об этом обязательно расскажу одной из следующих статей.
Что же касается данных вкладок, то для полноценной работы нам понадобится популярная библиотека javascript jQuery, в конкретном случае, используем последнюю версию из ветки 2.x подключив напрямую с CDN Google. Если у вас jQuery ещё не используется, чтобы подключить её достаточно внизу страницы, перед закрывающим тегом </dody> прописать следующее:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
Теперь, для того чтобы наши вкладки заработали, непосредственно на странице html, всё там же, в районе тега </body>, необходимо прописать небольшой исполняемый javascript, при помощи которого запустим переключение и раскрытие блоков с содержанием, как в режиме вкладок, так и в режиме аккордеона.
<script>
// вкладки с содержанием
$(".tab_content").hide();
$(".tab_content:first").show();
/* в режиме вкладок */
$("ul.tabs li").click(function () {
$(".tab_content").hide();
var activeTab = $(this).attr("rel");
$("#" + activeTab).fadeIn();
$("ul.tabs li").removeClass("active");
$(this).addClass("active");
$(".tab_accordion").removeClass("d_active");
$(".tab_accordion[rel^='" + activeTab + "']").addClass("d_active");
});
/* в режиме аккордеона */
$(".tab_accordion").click(function () {
$(".tab_content").hide();
var d_activeTab = $(this).attr("rel");
$("#" + d_activeTab).fadeIn();
$(".tab_accordion").removeClass("d_active");
$(this).addClass("d_active");
$("ul.tabs li").removeClass("active");
$("ul.tabs li[rel^='" + d_activeTab + "']").addClass("active");
});
/* дополнительный класс tab_last,
чтобы добавить границу к правой
стороне последней вкладки. */
$('ul.tabs li').last().addClass("tab_last");
</script>
Если ничего не пропустил, то на этом пожалуй и всё. Отзывчивые «до жути» и вполне себе автономные вкладки с переходом в «аккордеон», полностью готовы к работе.
[sociallocker id=1274]
Плагин рейтинга создан автором этого блога. Буду очень признателен, если вы сможете его поддержать (ссылка)

