Я пытаюсь создать слайдер / карусель, как показано ниже на экране, используя Bootstrap5:
Здесь я вставляю, это мой текущий код:
<style>
<!-- Temporary -->
.carousel-control-next-icon {
background: black;
}
</style><!DOCTYPE html>
<html lang = "en">
<head>
<title>Bootstrap 5 Example</title>
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1">
<link href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel = "stylesheet">
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<!-- Home Section End -->
<div class = "container-fluid mt-3">
<div class = "row g-4">
<div class = "col-xl-6 col-md-4 ratio_medium d-sm-block d-none">
<div class = "home-section bg-white div-content" style = "height:236px;">
<!-- With Captions -->
<div id = "carouselExampleCaption" class = "carousel slide" data-bs-ride = "carousel">
<div class = "carousel-inner" role = "listbox">
<div class = "carousel-item">
<img src = "https://img.freepik.com/free-photo/elegant-watch-with-silver-golden-chain-isolated_181624-27080.jpg?w=740&t=st=1674127568~exp=1674128168~hmac=5ce04dff715884c11a1cddc3e0a50b7c625fedf703c03ed40824dd972da0f012" style = "width:20%;" alt = "" class = "d-block img-fluid mx-auto">
</div>
<div class = "carousel-item active">
<img src = "https://img.freepik.com/free-photo/elegant-watch-with-silver-golden-chain-isolated_181624-27080.jpg?w=740&t=st=1674127568~exp=1674128168~hmac=5ce04dff715884c11a1cddc3e0a50b7c625fedf703c03ed40824dd972da0f012" style = "width:20%;" alt = "" class = "d-block img-fluid mx-auto">
</div>
<div class = "carousel-item">
<img src = "https://img.freepik.com/free-photo/elegant-watch-with-silver-golden-chain-isolated_181624-27080.jpg?w=740&t=st=1674127568~exp=1674128168~hmac=5ce04dff715884c11a1cddc3e0a50b7c625fedf703c03ed40824dd972da0f012" style = "width:20%;" alt = "" class = "d-block img-fluid mx-auto">
</div>
</div>
<a class = "carousel-control-prev" href = "#carouselExampleCaption" role = "button" data-bs-slide = "prev">
<span class = "carousel-control-prev-icon" aria-hidden = "true"></span>
<span class = "sr-only">Previous</span>
</a>
<a class = "carousel-control-next" href = "#carouselExampleCaption" role = "button" data-bs-slide = "next">
<span class = "carousel-control-next-icon" aria-hidden = "true"></span>
<span class = "sr-only">Next</span>
</a>
</div>
</div>
</div>
<div class = "col-xl-6 ratio_65 d-xl-block d-none">
<div class = "home-section bg-white div-content" style = "height:236px;">
<!-- With Captions -->
<div id = "carouselExampleCaption2" class = "carousel slide" data-bs-ride = "carousel">
<div class = "carousel-inner" role = "listbox">
<div class = "carousel-item">
<img src = "https://img.freepik.com/free-photo/elegant-watch-with-silver-golden-chain-isolated_181624-27080.jpg?w=740&t=st=1674127568~exp=1674128168~hmac=5ce04dff715884c11a1cddc3e0a50b7c625fedf703c03ed40824dd972da0f012" style = "width:20%;" alt = "" class = "d-block img-fluid mx-auto">
</div>
<div class = "carousel-item active">
<img src = "https://img.freepik.com/free-photo/elegant-watch-with-silver-golden-chain-isolated_181624-27080.jpg?w=740&t=st=1674127568~exp=1674128168~hmac=5ce04dff715884c11a1cddc3e0a50b7c625fedf703c03ed40824dd972da0f012" style = "width:20%;" alt = "" class = "d-block img-fluid mx-auto">
</div>
<div class = "carousel-item">
<img src = "https://img.freepik.com/free-photo/elegant-watch-with-silver-golden-chain-isolated_181624-27080.jpg?w=740&t=st=1674127568~exp=1674128168~hmac=5ce04dff715884c11a1cddc3e0a50b7c625fedf703c03ed40824dd972da0f012" style = "width:20%;" alt = "" class = "d-block img-fluid mx-auto">
</div>
</div>
<a class = "carousel-control-prev" href = "#carouselExampleCaption2" role = "button" data-bs-slide = "prev">
<span class = "carousel-control-prev-icon" aria-hidden = "true"></span>
<span class = "sr-only">Previous</span>
</a>
<a class = "carousel-control-next" href = "#carouselExampleCaption2" role = "button" data-bs-slide = "next">
<span class = "carousel-control-next-icon" aria-hidden = "true"></span>
<span class = "sr-only">Next</span>
</a>
</div>
</div>
</div>
</div>
</div>
<!-- Home Section End -->Но в настоящее время это выглядит плохо:
Отображать только один элемент, но мне нужно отобразить так 3 элемента и половину. Также я стараюсь добавить под фото цену и название продукта, а изображение должно быть адаптивным. Может ли кто-нибудь немного помочь мне исправить этот код?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы будете искать это, вы можете найти этот Codepen и этот Codeply.
Сочетание этих двух способов дает вам рабочий пример здесь (Codepen).
JS клонирует содержимое каждого .carousel-item, поэтому каждый .carousel-item будет содержать содержимое своих (5) братьев и сестер. CSS изменяет transform, поэтому ползунок перемещается соответствующим образом.
Он также отзывчив, показывая только один элемент перед наименьшей точкой останова, но это можно легко настроить (только CSS).
Вот фрагмент, откройте его в полноэкранном режиме по ссылке "На всю страницу":
Примечание: пришлось добавить кучу !important в CSS, которые не нужны, если вы загружаете свой CSS после Bootstrap, как в Codepen.
let items = document.querySelectorAll('.carousel .carousel-item')
items.forEach((el) => {
const minPerSlide = 5
let next = el.nextElementSibling
for (var i = 1; i < minPerSlide; i++) {
if (!next) {
// wrap carousel by using first child
next = items[0]
}
let cloneChild = next.cloneNode(true)
el.appendChild(cloneChild.children[0])
next = next.nextElementSibling
}
}).carousel-item .col {
padding: 0 5px;
}
@media (max-width: 767px) {
.carousel-inner .carousel-item>div {
display: none !important;
}
.carousel-inner .carousel-item>div:first-child {
display: block !important;
}
}
.carousel-inner .carousel-item.active,
.carousel-inner .carousel-item-next,
.carousel-inner .carousel-item-prev {
display: flex !important;
}
/* medium and up screens */
@media (min-width: 768px) {
.carousel-inner .carousel-item-end.active,
.carousel-inner .carousel-item-next {
transform: translateX(20%) !important;
}
.carousel-inner .carousel-item-start.active,
.carousel-inner .carousel-item-prev {
transform: translateX(-20%) !important;
}
/* half slides CSS */
.carousel-inner:before {
position: absolute;
top: 0;
bottom: 0;
right: 85%;
left: 0;
content: "";
display: block;
background-color: #fff;
z-index: 2;
}
.carousel-inner:after {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 85%;
content: "";
display: block;
background-color: #fff;
z-index: 2;
}
.carousel-control-prev {
left: 12% !important;
}
.carousel-control-next {
right: 12% !important;
}
}
.carousel-inner .carousel-item-end,
.carousel-inner .carousel-item-start {
transform: translateX(0) !important;
}<link href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel = "stylesheet" integrity = "sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin = "anonymous">
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity = "sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN" crossorigin = "anonymous"></script>
<div class = "container">
<div class = "row justify-content-center">
<div id = "carouselExampleControls" class = "carousel carousel-dark slide">
<div class = "carousel-inner" role = "listbox">
<div class = "carousel-item active">
<div class = "col">
<div class = "card">
<img src = "https://via.placeholder.com/700x500.png/CB997E/333333?text=1" class = "card-img-top" alt = "...">
<div class = "card-body">
<h5 class = "card-title">Card title</h5>
<p class = "card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
</div>
</div>
</div>
</div>
<div class = "carousel-item">
<div class = "col">
<div class = "card">
<img src = "https://via.placeholder.com/700x500.png/DDBEA9/333333?text=2" class = "card-img-top" alt = "...">
<div class = "card-body">
<h5 class = "card-title">Card title</h5>
<p class = "card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
</div>
</div>
</div>
</div>
<div class = "carousel-item">
<div class = "col">
<div class = "card">
<img src = "https://via.placeholder.com/700x500.png/FFE8D6/333333?text=3" class = "card-img-top" alt = "...">
<div class = "card-body">
<h5 class = "card-title">Card title</h5>
<p class = "card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
</div>
</div>
</div>
</div>
<div class = "carousel-item">
<div class = "col">
<div class = "card">
<img src = "https://via.placeholder.com/700x500.png/B7B7A4/333333?text=4" class = "card-img-top" alt = "...">
<div class = "card-body">
<h5 class = "card-title">Card title</h5>
<p class = "card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
</div>
</div>
</div>
</div>
<div class = "carousel-item">
<div class = "col">
<div class = "card">
<img src = "https://via.placeholder.com/700x500.png/A5A58D/333333?text=5" class = "card-img-top" alt = "...">
<div class = "card-body">
<h5 class = "card-title">Card title</h5>
<p class = "card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
</div>
</div>
</div>
</div>
<div class = "carousel-item">
<div class = "col">
<div class = "card">
<img src = "https://via.placeholder.com/700x500.png/6B705C/eeeeee?text=6" class = "card-img-top" alt = "...">
<div class = "card-body">
<h5 class = "card-title">Card title</h5>
<p class = "card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
</div>
</div>
</div>
</div>
</div>
<a class = "carousel-control-prev bg-transparent w-aut" href = "#carouselExampleControls" role = "button" data-bs-slide = "prev">
<span class = "carousel-control-prev-icon" aria-hidden = "true"></span>
</a>
<a class = "carousel-control-next bg-transparent w-aut" href = "#carouselExampleControls" role = "button" data-bs-slide = "next">
<span class = "carousel-control-next-icon" aria-hidden = "true"></span>
</a>
</div>
</div>
</div>
Пожалуйста, измените заголовок сообщения, чтобы задать четкий, конкретный вопрос. Не добавляйте теги. См. Как спросить.