Горизонтальные табы
Горизонтальные табы
Сегодня мы сделаем адаптивные вкладки для сайта, так называемые табы. Сначала используя jQuery, затем нативный JavaScript.
В HTML-файле создадим структуру будущих табов: обёртку для табов — mywrap-tabs, сами вкладки — mytabs (активный таб и неактивный), и содержимое вкладок — mycontent (так же активное и неактивное содержимое в зависимости от выбранной вкладки).
<div id="mywrap-tabs" class="mywrap-tabs">
<div class="mytabs">
<div class="mytab active">CSS</div>
<div class="mytab">SASS</div>
</div>
<div class="mytabs"></div>
<div class="mycontent">
<div class="mytab-content active">
1
</div>
<div class="mytab-content">
2
</div>
</div>
</div>
Стилизация табов в css-файле.
.mywrap-tabs {
max-width: 100%;
margin: 38px auto;
font-family: sans-serif;
}
.mywrap-tabs .mytabs {
background-color: #262938;
}
.mywrap-tabs .mytabs:first-child {
padding: 7px;
}
.mywrap-tabs .mytabs::after {
content: "";
height: 0;
display: block;
clear: both;
}
.mywrap-tabs .mytabs .mytab {
float: left;
border-top: 4px solid #53798f;
padding: 9px 19px;
background-color: #375566;
color: #fafaf1;
transition: background-color .25s linear;
cursor: pointer;
}
.mywrap-tabs .mytabs .mytab:hover {
background-color: #304c5c;
color: #fafaf1;
}
.mywrap-tabs .mytabs .mytab.active {
background-color: #213c4b;
color: #fafaf1;
border-top: 4px solid transparent;
}
.mywrap-tabs .mycontent {
color: #fafaf1;
background-color: #213c4b;
padding: 6px 11px;
}
.mywrap-tabs .mycontent .mytab-content {
display: none;
padding: 14px 9px;
}
.mywrap-tabs .mycontent .mytab-content.active {
display: block;
}
И главная магия в js-файле с помощью jQuery.
$(() => {
$("#mywrap-tabs").on("click", ".mytab", function () {
const tabs = $("#mywrap-tabs .mytab"),
tabContent = $("#mywrap-tabs .mytab-content");
//Удаляем классы active
tabs.removeClass("active");
tabContent.removeClass("active");
//Добавляем классы active
$(this).addClass("active");
tabContent.eq($(this).index()).addClass("active");
return false;
});
});
Горизонтальные табы — нативный JavaScript
Данный код можно использовать для множества табов. Передайте следующие аргументы в функцию tabs:
- headerSelector — класс обёртки для кнопок табов;
- tabSelector — класс кнопок табов;
- contentSelector — класс контента табов;
- activeClass — класс выделения автивного таба (без точки «.»);
- display — block, flex, span и т.п. (если не передан параметр, то block);
window.addEventListener("DOMContentLoaded", () => {
const tabs = (headerSelector, tabSelector, contentSelector, activeClass, display = "block") => {
const header = document.querySelector(headerSelector),
tab = document.querySelectorAll(tabSelector),
content = document.querySelectorAll(contentSelector);
function hideTabContent() {
content.forEach(item => {
item.style.display = "none";
});
tab.forEach(item => {
item.classList.remove(activeClass);
});
}
// при запуске функции без аргументов активным будет 1 элемент
function showTabContent(i = 0) {
content[i].style.display = display;
tab[i].classList.add(activeClass);
}
hideTabContent();
showTabContent();
header.addEventListener("click", (e) => {
const target = e.target;
if (target &&
(target.classList.contains(tabSelector.replace(/./, "")) ||
target.parentNode.classList.contains(tabSelector.replace(/./, "")))) {
tab.forEach((item, i) => {
if (target == item || target.parentNode == item) {
hideTabContent();
showTabContent(i);
}
});
}
});
};
tabs(".mytabs", ".mytab", ".mytab-content", "active");
});
Надеюсь, вам понравилась данная информация. Если вам интересна тема web-разработки, то можете следить за выходом новых статей в Telegram.
Поделиться с друзьями:
Статьи из данной категории:
Комментарии (3)
- Алексей
- Only to top
- Алексей