Переносил сайт с платной cms на Joomla. Столкнулся с необходимостью использовать закладки (tab). Cреди модулей Joomla и на просторах интернета не смог найти закладки, удовлетворяющие мои потребности:
Решил сам написать данный скрипт, возможно, кому-нибудь он облегчит задачу и сэкономит немного времени. Итак, сам html, тут будет только контейнер с блоками и их заголовками:
В head подключаем jQuery, стили и скрипты для работы закладок, tabs.css и tabs.js, соответственно.
.tabsLeft – общий контейнер модуля закладок, класс (.tabsLeft, .tabsTop, .tabsRight, .tabsBottom) определяет, где от контента будут расположены закладки;
.tabs – контенер блоков контента;
.tabContent – блок контента;
Первый h3 в .tabContent – заголовок блока контента, который станет названием закладки.
Теперь стили (tabs.css), общие правила блоков и меню закладок (сейчас их нет в html, их добавит скрипт):
Задаем ширину, высоту, границу, меню делаем условно выше блоков контента, активный пункт меню выделяем.
Стили для определения местоположения блока меню.
Сверху:
Слева:
Справа:
Снизу:
Задаем вертикальное или горизонтальное меню, закругляем границы с нужной стороны, настраиваем отступы и границы активных пунктов.
Скрипты в файле tabs.js:
Все готово, осталось только добавить класс .tabsLeft, .tabsTop, .tabsRight или .tabsBottom в корневой div и заполнить контент блоков, не забыв про заголовки.
- Бесплатные;
- Код, без дополнительного использования больших библиотек, как jQuery UI;
- Возможность расположить закладки в любой позиции (сверху, снизу, справа или слева от контента);
- Наименование закладки должно автоматически приниматься из заголовка статьи;
- Html должен содержать только блоки контента.
Решил сам написать данный скрипт, возможно, кому-нибудь он облегчит задачу и сэкономит немного времени. Итак, сам html, тут будет только контейнер с блоками и их заголовками:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Tabs</title>
<link rel="stylesheet" href="tabs.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script src="tabs.js"></script>
</head>
<body>
<div class="tabsTop">
<div class="tabs">
<div class="tabContent">
<h3>Первая</h3>
</div>
<div class="tabContent">
<h3>Вторая</h3>
</div>
<div class="tabContent">
<h3>Третья</h3>
</div>
</div>
</div>
</body>
</html>
В head подключаем jQuery, стили и скрипты для работы закладок, tabs.css и tabs.js, соответственно.
.tabsLeft – общий контейнер модуля закладок, класс (.tabsLeft, .tabsTop, .tabsRight, .tabsBottom) определяет, где от контента будут расположены закладки;
.tabs – контенер блоков контента;
.tabContent – блок контента;
Первый h3 в .tabContent – заголовок блока контента, который станет названием закладки.
Теперь стили (tabs.css), общие правила блоков и меню закладок (сейчас их нет в html, их добавит скрипт):
.tabContent {
box-sizing: border-box;
border: 1px solid #ccc;
width: 400px;
min-height: 400px;
padding: 0;
}
.tabsLink {
box-sizing: border-box;
padding: 0;
margin: 0;
z-index: 5;
}
.tabsLink li {
box-sizing: border-box;
cursor: pointer;
border: 1px solid #ccc;
padding: 5px 10px;
background: #fff;
}
.tabsLink li.active {
color: red;
}
Задаем ширину, высоту, границу, меню делаем условно выше блоков контента, активный пункт меню выделяем.
Стили для определения местоположения блока меню.
Сверху:
.tabsTop .tabContent {
margin: 4px 0 0 0;
}
.tabsTop .tabsLink li {
display: inline;
border-radius: 10px 10px 0 0;
margin: 0 -1px 0 0;
}
.tabsTop .tabsLink li.active {
border-bottom: 1px solid #fff;
}
Слева:
.tabsLeft .tabContent {
margin: 0 0 0 -1px;
float: left;
}
.tabsLeft .tabsLink {
float: left;
}
.tabsLeft .tabsLink li {
display: block;
border-radius: 10px 0 0 10px;
margin: 0 0 -1px 0;
}
.tabsLeft .tabsLink li.active {
border-right: 1px solid #fff;
}
Справа:
.tabsRight .tabContent {
margin: 0 -1px 0 0;
float: left;
}
.tabsRight .tabsLink {
float: left;
}
.tabsRight .tabsLink li {
display: block;
border-radius: 0 10px 10px 0;
margin: 0 0 -1px 0;
}
.tabsRight .tabsLink li.active {
border-left: 1px solid #fff;
}
Снизу:
.tabsBottom .tabContent {
margin: 0 0 0 0;
}
.tabsBottom .tabsLink {
margin: 5px 0 0 0;
}
.tabsBottom .tabsLink li {
display: inline;
border-radius: 0 0 10px 10px;
margin: 0 -1px 0 0;
}
.tabsBottom .tabsLink li.active {
border-top: 1px solid #fff;
}
Задаем вертикальное или горизонтальное меню, закругляем границы с нужной стороны, настраиваем отступы и границы активных пунктов.
Скрипты в файле tabs.js:
jQuery(document).ready(function($){
function menuBefore() {
$('.tabsLink').remove();
$('.tabs').before('<ul class="tabsLink"></ul>'); // Создаем меню до контента
}
function menuAfter() {
$('.tabsLink').remove();
$('.tabs').after('<ul class="tabsLink"></ul>'); // Создаем меню после контента
}
function createTabs() {
$('.tabs .tabContent').each(function(i){ //Для каждого блока
$('.tabsLink').append('<li id="link' + i + '">' + $(this).find('h3:eq(0)').html() + '</li>'); //добавляем в меню одноименную ссылку с нумерованным идентификатором
$(this).addClass('link' + i++ + 'Block'); //присваеваем нумерованный класс текущему блоку
});
function hideContent() {
$('.tabContent').hide(); //Создаем функцию спрятать все блоки
}
hideContent(); //Прячем все блоки
$('.tabContent:eq(0)').show(); //Показываем первый блок
$('.tabsLink li:eq(0)').addClass('active'); //Присваиваем первой ссылке класс "active"
$('.tabsLink li').click(function(){ //Заставляем закладки работать: при нажатии
hideContent(); //прячем все блоки
$('.tabsLink li').removeClass('active'); // убираем у всех ссылок класс "active"
$(this).addClass('active'); //присваиваем кликнутой ссылке класс "active"
var lnkClass = '.' + $(this).attr('id') + 'Block'; //из идентификатора кликнутой ссылки добавляем '.' и суффикс 'Block' получаем переменную которая является классом нужного блока
$(lnkClass).show(); //показываем блок
});
}
//Создаем условие для определения положения закладок:
if ( $('.tabs').parent().hasClass('tabsTop') || $('.tabs').parent().hasClass('tabsLeft') ) { // если у родителя .tabs класс tabsTop или tabsLeft
menuBefore(); // создаем меню до контента
createTabs(); // включаем закладки
} else { // в других случаях
menuAfter(); // создаем меню после контента
createTabs(); // включаем закладки
}
});
Все готово, осталось только добавить класс .tabsLeft, .tabsTop, .tabsRight или .tabsBottom в корневой div и заполнить контент блоков, не забыв про заголовки.