Центровка контейнера при адаптиве станицы
Не получается отцентровать отдельно labelы, которые находятся в контейнере .tabs. Если обернуть их в отдельный flex-контейнер, то слайдер пропадает. В исходном коде всё находится в одном контейнере .tabs. Я так понимаю, что всё сыпется из-за айдишников labelов, которые определяют инициализацию слайдера в отдельно взятом табе. Я пытался выкрутиться свойством left для .tabs>label, но адаптив при этом работает плохо и ничего хорошего с этого не вышло.
// после готовности DOM
document.addEventListener("DOMContentLoaded", () => {
const contents = {
"#tab-btn-1": "#content-1",
"#tab-btn-2": "#content-2",
"#tab-btn-3": "#content-3"
};
const activatedSliders = (selector) => {
const sliders = document.querySelectorAll(selector);
sliders.forEach((slider) => {
// инициализация elms[i] в качестве слайдера
if (!slider.classList.contains("activated")) {
slider.classList.add("activated");
new ChiefSlider(slider);
}
});
};
const tabBtns = document.querySelectorAll('[name="tab-btn"]');
tabBtns.forEach((tabBtn) => {
tabBtn.addEventListener("change", (e) => {
console.log(e.target);
const selector = contents["#" + e.target.id] + " .slider";
activatedSliders(selector);
});
});
activatedSliders("#content-1 .slider");
});
*,
*::before,
*::after {
box-sizing: border-box;
}
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
.container {
max-width: 700px;
margin: 0 auto;
}
.slider__wrapper {
overflow: hidden;
}
.slider__item {
flex: 0 0 33.3333333333%;
max-width: 33.3333333333%;
height: 250px;
display: flex;
justify-content: center;
align-items: center;
color: rgba(255, 255, 255, 0.8);
font-size: 7rem;
}
.slider__item:nth-child(1) {
background-color: #f44336;
}
.slider__item:nth-child(2) {
background-color: #9c27b0;
}
.slider__item:nth-child(3) {
background-color: #3f51b5;
}
.slider__item:nth-child(4) {
background-color: #03a9f4;
}
.slider__item:nth-child(5) {
background-color: #4caf50;
}
.tabs {
font-size: 0;
/*max-width: 350px;*/
margin-left: auto;
margin-right: auto;
}
.tabs>input[type="radio"] {
display: none;
}
.tabs>div {
/* скрыть контент по умолчанию */
display: none;
border: 1px solid #e0e0e0;
padding: 10px 15px;
font-size: 16px;
}
/* отобразить контент, связанный с вабранной радиокнопкой (input type="radio") */
#tab-btn-1:checked~#content-1,
#tab-btn-2:checked~#content-2,
#tab-btn-3:checked~#content-3 {
display: block;
}
.tabs>label {
display: inline-block;
text-align: center;
vertical-align: middle;
user-select: none;
background-color: #f5f5f5;
border: 1px solid #e0e0e0;
padding: 2px 8px;
font-size: 16px;
line-height: 1.5;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out;
cursor: pointer;
position: relative;
top: 1px;
}
.tabs>label:not(:first-of-type) {
border-left: none;
}
.tabs>input[type="radio"]:checked+label {
background-color: #fff;
border-bottom: 1px solid #fff;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Подключаем CSS слайдера -->
<link rel="stylesheet" href="https://kilometr-online.com/wp-content/themes/hello-elementor-child/ChiefSlider/chief-slider.min.css">
<!-- Подключаем JS слайдера -->
<script defer src="https://kilometr-online.com/wp-content/themes/hello-elementor-child/ChiefSlider/chief-slider.min.js"></script>
<div class="tabs">
<input type="radio" name="tab-btn" id="tab-btn-1" value="" checked>
<label for="tab-btn-1">Вкладка 1</label>
<input type="radio" name="tab-btn" id="tab-btn-2" value="">
<label for="tab-btn-2">Вкладка 2</label>
<input type="radio" name="tab-btn" id="tab-btn-3" value="">
<label for="tab-btn-3">Вкладка 3</label>
<div id="content-1">
Содержимое 1...
<div class="container">
<div class="slider">
<div class="slider__wrapper">
<div class="slider__items">
<div class="slider__item">
<!-- Контент 1 слайда -->
1
</div>
<div class="slider__item">
<!-- Контент 2 слайда -->
2
</div>
<div class="slider__item">
<!-- Контент 3 слайда -->
3
</div>
<div class="slider__item">
<!-- Контент 4 слайда -->
4
</div>
<div class="slider__item">
<!-- Контент 5 слайда -->
5
</div>
</div>
</div>
<a href="#" class="slider__control" data-slide="prev"></a>
<a href="#" class="slider__control" data-slide="next"></a>
</div>
</div>
<div class="container">
<div class="slider">
<div class="slider__wrapper">
<div class="slider__items">
<div class="slider__item">
<!-- Контент 1 слайда -->
1
</div>
<div class="slider__item">
<!-- Контент 2 слайда -->
2
</div>
<div class="slider__item">
<!-- Контент 3 слайда -->
3
</div>
<div class="slider__item">
<!-- Контент 4 слайда -->
4
</div>
<div class="slider__item">
<!-- Контент 5 слайда -->
5
</div>
</div>
</div>
<a href="#" class="slider__control" data-slide="prev"></a>
<a href="#" class="slider__control" data-slide="next"></a>
</div>
</div>
</div>
<div id="content-2">
Содержимое 2...
<div class="container">
<div class="slider">
<div class="slider__wrapper">
<div class="slider__items">
<div class="slider__item">
<!-- Контент 1 слайда -->
1
</div>
<div class="slider__item">
<!-- Контент 2 слайда -->
2
</div>
<div class="slider__item">
<!-- Контент 3 слайда -->
3
</div>
<div class="slider__item">
<!-- Контент 4 слайда -->
4
</div>
<div class="slider__item">
<!-- Контент 5 слайда -->
5
</div>
</div>
</div>
<a href="#" class="slider__control" data-slide="prev"></a>
<a href="#" class="slider__control" data-slide="next"></a>
</div>
</div>
</div>
<div id="content-3">
Содержимое 3...
</div>
</div>
Ответы (1 шт):
.tabs {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
};
.content-1, .content-2, .content-3{
width: 100%
}
добавьте эти стили и для этих случаев лучше использовать библиотеку, верстка выглядит некрасиво, да и с библиотекой проще). И у вас не слайдер пропадает, когда вы оборачиваете отдельно элементы, а контент, потому что вы используете радиокнопки и стили из за этого при отображении не видят вложенность, которая указана. Можно даже не библиотеку, а тупо код найти на js и вставить себе в проект, будет выглядеть и работать намного лучше. Надеюсь ответила на ваш вопрос