Как создать горизонтально прокручиваемые контейнеры
Контейнеры с горизонтальной прокруткой становятся все более популярными. Особенно среди мобильно оптимизированных сайтов, где они используются для уменьшения высоты веб-страниц.
После реализации нескольких таких элементов я захотел выяснить, как с помощью минимального объема кода создать горизонтальную прокрутку, которая корректно работает, на всех типах пользовательских устройств. Сначала создадим контейнер и дочерние div внутри него, которые будут прокручиваться по горизонтали.
Card
Card
Card
Card
Card
Card
Card
Card
Card
Существует два способа сделать эти div горизонтально прокручиваемыми.
Метод пустого пространства
Вот CSS, который нам нужен. Никаких префиксов и jQuery. Простое использование overflow и еще одного свойства.
Для контейнера нужно отключить вертикальную прокрутку ( overflow-y ) и включить горизонтальную ( overflow-x ). Затем для каждой карточки установим display : inline-block , чтобы они отображались в строке. Свойство CSS, с которым вы, вероятно, не встречались — это white-space : nowrap . Оно используется для управления тем, как текст переносится в контейнере. В данном случае мы хотим отключить перенос с помощью значения nowrap . Четыре строки свойств CSS, и у нас есть горизонтально прокручиваемый контейнер. Как насчет поддержки браузерами? Идеально. Если вы не заботитесь об Internet Explorer или Edge. В Microsoft говорят, что они включат поддержку этого свойства в будущую версию браузера Edge.
Мы используем flex-wrap для достижения того же эффекта, что и в предыдущем примере. Поддержка браузерами решения на основе flexbox лучше. Оно работает в IE и Edge.
Overflow прокрутка
В iOS веб-страницы прокручиваются с импульсом ускорения. Если вы быстро протянете пальцем вверх или вниз, страница будет продолжать прокручиваться после того, как уберете палец. Если вы достигнете верхней или нижней части страницы, он а отскочит назад от конца контейнера, прежде чем встанет на место. К счастью, эту проблему легко решить:
Теперь у нас есть прокрутка для горизонтального контейнера. Вот пример того, как это выглядит:
Полосы прокрутки
По умолчанию контейнер с прокручиваемым контентом будет иметь полосы прокрутки. Но что, если мы не хотим добавлять скроллинг? Такое решение легко реализовать. Хотя работает оно только в браузерах на WebKit.
Заключение
Контейнеры с горизонтальной прокруткой становится все более распространенными.Поэтому лучше сохранить эти примеры:они понадобятся вам в будущем. Также можно обернуть код в медиа-запрос и отобразить горизонтальную прокрутку только для определенных устройств. И никакой головной боли с jQuery!
Horizontal scrolling div with arrows using HTML and CSS
In this tutorial, we will learn how to create a horizontal scrolling div with arrows using HTML and CSS.
We can make a div horizontally scrollable using the overflow property in CSS.
To make div horizontally scrollable we have to use the x and y-axis properties. We have to set the overflow-y : hidden and make overflow-x:auto , this will hide the vertical scrollbar to hidden and make the div scroll horizontally.
So here, we will make a horizontal scrollable div one without arrows and another with arrows for navigation.
Horizontal Scrolling div using HTML and CSS
Here, we will code the div to make them scrollable horizontally.
Here, we have a parent div with class=»scroll-images» and inside it, we have child elements with class=»child» . And each child event has an image inside it.
Next, we will make the parent element (scroll-images) horizontally scrollable using CSS.
Now, we have to code the function to navigate through the child elements in the horizontal div.
The scrollBy() method scrolls an element by a given amount.
When the left arrow is clicked the leftScroll() function is triggered and the element will move 200 on the x-axis and when the right arrow is clicked the element move -200 on the x-axis of the horizontal div.
Note:
If you don’t want to display the scrollbar below add this to your CSS code.
CSS code is a bit more complicated but the concept has been covered above. We just need to code carefully and incremently.
Let’s start with the big picture and give the page a structure.
.container/* Width and height will swap after rotation. To make the container as wide as the screen after rotation, we need to set its initial height to 100vw. */width:500px;height:100vw;>.containerdivwidth:100%;height:500px;>imgwidth:100%;height:100%;object-fit:cover;>
Now, the page should look like this. It’s still far from what we want.
Let’s rotate the container 90 degrees and its children 90 degrees backwards.
.container./* translateY(-500px) makes the container align to the left of the screen. */transform:rotate(-90deg)translateY(-500px);transform-origin:topright;>.containerdiv.transform:rotate(90deg);>
Now it’s closer to what we expect but it cannot scroll horizontally yet.
To make it horizontally scrollable is as easy as adding two lines of code.
.container.overflow-x:hidden;overflow-y:auto;>
We are almost done except some clean-ups and polishing. Let’s add the following code.
bodymargin:0;>/* To hide the scroll bar. */::-webkit-scrollbardisplay:none;>*-ms-overflow-style:none;scrollbar-width:none;>img.>.containerdiv.position:relative;margin:10px0;>.containerdiv:first-childmargin:0;>ppadding:10px;background:white;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);>
The final page should look like this and scroll horizontally.
In this example, we used squared child elements (500 * 500 images) and there is a reason for this. If the width:height ratio was not 1:1, we would have to work out how much to offset the child elements after rotation so that they do not overlap each other.
For such cases and more advanced functionalities or effects, you would want to write some javacript code.