Bootstrap 5 Carousel показывает увеличенное изображение при нажатии кнопки «Далее» или «Предыдущее», если карусель обернута CSS с плавающей запятой

Я использую Bootstrap v5.3.3 Carousel. Моя проблема заключается в том, что карусель показывает увеличенное изображение при нажатии следующего или предыдущего, если карусель заключена в класс float-start.

Минимальные коды здесь:

    <link href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel = "stylesheet" integrity = "sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin = "anonymous">
    <div class = "container">
  <div class = "row">
    <div class = "col-12">
      <div class = "float-start">
        <div id = "carousel_project" class = "carousel slide img-fluid me-3 mb-3">
                    <div class = "carousel-inner">
                        <div class = "carousel-item active">
                            <img src = "https://place-hold.it/800x800/F00" class = "d-block w-100" alt = "" />
                        </div>
                        <div class = "carousel-item">
                            <img src = "https://place-hold.it/800x800/00F" class = "d-block w-100" alt = "" />
                        </div>
            <div class = "carousel-item">
                            <img src = "https://place-hold.it/800x800/0F0" class = "d-block w-100" alt = "" />
                        </div>
                    </div>
                     <button class = "carousel-control-prev" type = "button" data-bs-target = "#carousel_project" data-bs-slide = "prev">
                        <span class = "carousel-control-prev-icon" aria-hidden = "true"></span>
                     </button>
                     <button class = "carousel-control-next" type = "button" data-bs-target = "#carousel_project" data-bs-slide = "next">
                        <span class = "carousel-control-next-icon" aria-hidden = "true"></span>
                     </button>
                </div>
      </div>
      <div>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla interdum blandit nisi a tincidunt. Nunc dapibus nibh quis sapien vehicula venenatis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper lectus sit amet mollis pretium. Praesent quam tellus, hendrerit id lobortis vitae, facilisis sed tellus. Etiam magna dui, sodales non enim a, aliquet vulputate libero. Phasellus dictum, lacus vel congue tincidunt, eros velit tincidunt dolor, eget dignissim lacus lacus sed ligula. Praesent quis eros blandit sem egestas tincidunt et at libero.</p>
        <p>Phasellus vel laoreet arcu. Quisque dignissim quam ac odio viverra, ac tristique nisi elementum. Curabitur et porta ante, nec pellentesque ligula. Sed accumsan finibus convallis. Donec eu venenatis diam. Suspendisse ornare odio enim, et laoreet risus lobortis vel. Sed lobortis nisl sem, sed commodo augue elementum sit amet. Cras suscipit nisl sed blandit hendrerit. Sed nec purus vel tellus tincidunt malesuada.</p>
        <p>Quisque non mi et tellus dictum dapibus. Cras sit amet interdum dui. Maecenas vestibulum fringilla feugiat. Morbi feugiat lacus volutpat malesuada euismod. Sed ullamcorper dui ac nulla commodo condimentum. Proin finibus felis a est volutpat ultrices. Donec non libero et eros aliquet facilisis. Morbi pharetra lobortis dolor. In non mauris at arcu eleifend lobortis a in ex. Aenean elementum, neque vitae rutrum condimentum, justo sapien tempus arcu, ut convallis elit ex quis nisl. Cras ullamcorper, orci a volutpat sagittis, eros nulla ornare neque, quis blandit odio lorem nec nibh. Nullam egestas ex et pellentesque egestas. Duis faucibus aliquam fermentum. Nullam ac luctus diam. Quisque sed dui tortor. Maecenas nunc quam, maximus a pellentesque ac, malesuada ac augue.</p>
        <p>Curabitur suscipit urna sed mauris aliquam elementum. Duis at tellus eu sem bibendum lacinia. Suspendisse velit tortor, eleifend a ligula eget, volutpat tincidunt metus. Cras molestie, purus ut laoreet fermentum, nisl lorem rhoncus orci, nec scelerisque eros mi non urna. Ut lacinia, lorem id cursus hendrerit, tortor urna vehicula nulla, et lobortis dolor elit id est. Mauris vulputate eros eget malesuada egestas. Sed congue et sapien et lacinia. Duis vulputate magna id fermentum ornare. Praesent vel orci ultrices, condimentum nisl id, lacinia eros. Aenean cursus malesuada augue, id maximus purus scelerisque in. Morbi maximus tellus vel leo pretium imperdiet. Morbi dignissim eros a erat volutpat, sit amet interdum elit malesuada. Ut augue arcu, ultrices eu congue in, convallis nec lacus. Donec sapien ipsum, ultrices ac dolor quis, rhoncus dictum nunc. Vestibulum finibus nulla nec leo viverra, in rutrum felis maximus.</p>
        <p>Aliquam semper mi sit amet finibus vestibulum. Aenean in nisi non lectus cursus placerat interdum eu mi. Quisque finibus ligula at urna efficitur, vitae ornare metus mollis. Ut non euismod dui, ac mollis urna. Pellentesque at ligula at nunc convallis interdum ac vel velit. Cras ullamcorper elit pulvinar turpis suscipit, vel volutpat quam ultrices. Aliquam aliquam diam urna, id luctus nulla sodales eget. Nunc rutrum turpis at purus fermentum, nec finibus nunc convallis. Donec faucibus erat turpis, eleifend gravida nibh gravida non. Sed venenatis mollis orci id euismod.</p>
      </div>
    </div>
  </div>  
</div>
    <script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity = "sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin = "anonymous"></script>

Никаких дополнительных CSS или JS, которые могли бы повлиять на результаты, не прилагается. Вы можете найти JSFiddle здесь.

Как решить проблему с размером? Спасибо.

Похоже, возникла проблема с определением правильной ширины плавающей карусели. Можете ли вы указать ширину плавающего элемента?

CBroe 24.06.2024 11:02

Да, это возможно.

Raptor 24.06.2024 11:16

Попробуйте указать максимальную ширину <div class = "float-start" style = "max-width: 800px">

Tim R 28.06.2024 07:44

@Yogi Ширина области просмотра должна быть не менее 1100 пикселей, чтобы галерея перемещалась влево, а текст находился справа. При нажатии кнопки «Далее/Предыдущий» изображение расширяется до 100 % ширины родительского контейнера, а текст перемещается под ним до тех пор, пока анимация не завершится.

Tim R 04.07.2024 02:42
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
4
114
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это обычная проблема с плагинами карусели ширины, когда вы не указываете точную ширину элемента карусели, это также происходит в slickjs и splidejs.

Самый простой способ исправить это — установить ширину, например, 300 пикселей (или любую другую единицу и значение, которое вы пожелаете).

Похоже, img-fluid вызывает этот эффект изменения размера изображения.

Очень хорошее объяснение одной и той же проблемы этими людьми действительно потрясающее. Изменение размера изображения в карусели Bootstrap

Ответ принят как подходящий

Ширина плавающих изображений составляет до 800 пикселей в плавающем состоянии (внутренняя ширина изображения). Поэтому задайте максимальную ширину контейнеру карусели 800 пикселей.

Кроме того, вместо того, чтобы оборачивать карусель внутри другого div для применения float, добавьте класс float-start в контейнер карусели (независимо от того, используется ли это решение с максимальной шириной).

#carousel_project {max-width: 800px}
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity = "sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin = "anonymous"></script>
<link href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel = "stylesheet" integrity = "sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin = "anonymous">

<div class = "container">
  <div class = "row">
    <div class = "col-12">
      <div id = "carousel_project" class = "carousel slide img-fluid me-3 mb-3 float-start">
        <div class = "carousel-inner">
          <div class = "carousel-item active">
            <img src = "https://place-hold.it/800x800/F00" class = "d-block w-100" alt = "" />
          </div>
          <div class = "carousel-item">
            <img src = "https://place-hold.it/800x800/00F" class = "d-block w-100" alt = "" />
          </div>
          <div class = "carousel-item">
            <img src = "https://place-hold.it/800x800/0F0" class = "d-block w-100" alt = "" />
          </div>
        </div>
        <button class = "carousel-control-prev" type = "button" data-bs-target = "#carousel_project" data-bs-slide = "prev">
          <span class = "carousel-control-prev-icon" aria-hidden = "true"></span>
        </button>
        <button class = "carousel-control-next" type = "button" data-bs-target = "#carousel_project" data-bs-slide = "next">
          <span class = "carousel-control-next-icon" aria-hidden = "true"></span>
        </button>
      </div>
      <div>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla interdum blandit nisi a tincidunt. Nunc dapibus nibh quis sapien vehicula venenatis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper lectus sit amet mollis pretium. Praesent quam tellus, hendrerit id lobortis vitae, facilisis sed tellus. Etiam magna dui, sodales non enim a, aliquet vulputate libero. Phasellus dictum, lacus vel congue tincidunt, eros velit tincidunt dolor, eget dignissim lacus lacus sed ligula. Praesent quis eros blandit sem egestas tincidunt et at libero.</p>
        <p>Phasellus vel laoreet arcu. Quisque dignissim quam ac odio viverra, ac tristique nisi elementum. Curabitur et porta ante, nec pellentesque ligula. Sed accumsan finibus convallis. Donec eu venenatis diam. Suspendisse ornare odio enim, et laoreet risus lobortis vel. Sed lobortis nisl sem, sed commodo augue elementum sit amet. Cras suscipit nisl sed blandit hendrerit. Sed nec purus vel tellus tincidunt malesuada.</p>
        <p>Quisque non mi et tellus dictum dapibus. Cras sit amet interdum dui. Maecenas vestibulum fringilla feugiat. Morbi feugiat lacus volutpat malesuada euismod. Sed ullamcorper dui ac nulla commodo condimentum. Proin finibus felis a est volutpat ultrices. Donec non libero et eros aliquet facilisis. Morbi pharetra lobortis dolor. In non mauris at arcu eleifend lobortis a in ex. Aenean elementum, neque vitae rutrum condimentum, justo sapien tempus arcu, ut convallis elit ex quis nisl. Cras ullamcorper, orci a volutpat sagittis, eros nulla ornare neque, quis blandit odio lorem nec nibh. Nullam egestas ex et pellentesque egestas. Duis faucibus aliquam fermentum. Nullam ac luctus diam. Quisque sed dui tortor. Maecenas nunc quam, maximus a pellentesque ac, malesuada ac augue.</p>
        <p>Curabitur suscipit urna sed mauris aliquam elementum. Duis at tellus eu sem bibendum lacinia. Suspendisse velit tortor, eleifend a ligula eget, volutpat tincidunt metus. Cras molestie, purus ut laoreet fermentum, nisl lorem rhoncus orci, nec scelerisque eros mi non urna. Ut lacinia, lorem id cursus hendrerit, tortor urna vehicula nulla, et lobortis dolor elit id est. Mauris vulputate eros eget malesuada egestas. Sed congue et sapien et lacinia. Duis vulputate magna id fermentum ornare. Praesent vel orci ultrices, condimentum nisl id, lacinia eros. Aenean cursus malesuada augue, id maximus purus scelerisque in. Morbi maximus tellus vel leo pretium imperdiet. Morbi dignissim eros a erat volutpat, sit amet interdum elit malesuada. Ut augue arcu, ultrices eu congue in, convallis nec lacus. Donec sapien ipsum, ultrices ac dolor quis, rhoncus dictum nunc. Vestibulum finibus nulla nec leo viverra, in rutrum felis maximus.</p>
        <p>Aliquam semper mi sit amet finibus vestibulum. Aenean in nisi non lectus cursus placerat interdum eu mi. Quisque finibus ligula at urna efficitur, vitae ornare metus mollis. Ut non euismod dui, ac mollis urna. Pellentesque at ligula at nunc convallis interdum ac vel velit. Cras ullamcorper elit pulvinar turpis suscipit, vel volutpat quam ultrices. Aliquam aliquam diam urna, id luctus nulla sodales eget. Nunc rutrum turpis at purus fermentum, nec finibus nunc convallis. Donec faucibus erat turpis, eleifend gravida nibh gravida non. Sed venenatis mollis orci id euismod.</p>
      </div>
    </div>
  </div>  
</div>

Кроме того, row и col-12div можно удалить, не влияя на макет.

Tim R 05.07.2024 04:08

Частично это работает. фиктивные фотографии шириной 800 пикселей предназначены только для иллюстрации идеи. Фактический сценарий таков, что фотографии имеют разные размеры. Установка максимальной ширины на 800 пикселей очень помогает, но это значение необходимо корректировать в соответствии с различными точками останова медиа-запроса.

Raptor 11.07.2024 09:28

Другие вопросы по теме