Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как сделать карусель без JavaScript

Короткий ответ

Горизонтальная прокрутка плюс «примагничивание» к слайдам. Листайте пальцем, колесом с Shift или полосой прокрутки:

<style>
  .slider { display: flex; gap: 10px; overflow-x: auto; scroll-snap-type: x mandatory; padding-bottom: 8px; }
  .slider img { flex: 0 0 80%; width: 80%; aspect-ratio: 16 / 9; object-fit: cover; border-radius: 10px; scroll-snap-align: center; }
</style>
 
<div class="slider">
  <img src="/media/photo-800x500.jpg" alt="Slide 1">
  <img src="/media/photo-400x250.jpg" alt="Slide 2">
  <img src="/media/photo-600x200.jpg" alt="Slide 3">
</div>

Как это работает

scroll-snap-type: x mandatory у контейнера говорит, что после прокрутки он должен остановиться на точке привязки. scroll-snap-align: center делает такой точкой центр каждого слайда. Слайды на 80% ширины оставляют краешек следующего — так видно, что дальше есть ещё.

Кнопки и точки

Ссылки на id слайдов прокручивают к нужному без скрипта. Для кнопок «вперёд» и «назад» нужен короткий скрипт с scrollBy(). В новых браузерах кнопки и точки рисуют псевдоэлементы ::scroll-button() и ::scroll-marker, но поддерживаются они пока не везде.

Частая ошибка

Карусель, которая листается сама. Пользователь не успевает прочитать слайд, а людям с трудностями внимания и с экранными дикторами она мешает. Если автопрокрутка всё же нужна, дайте кнопку паузы и останавливайте её при наведении и фокусе.

Функции из этого ответа

  • scroll-snap-type — Заставляет прокручиваемый контейнер останавливаться точно на дочерних элементах — для слайдеров и галерей.
  • overflow — Что делать с содержимым, которое не помещается в элемент.
  • flex — Сокращённая запись того, как flex-элемент растёт, сжимается и с какого размера начинает.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.