Горизонтальная прокрутка на чистом CSS.

От автора: статья нашего гостя, Питера Бизменса. Питер – front-end разработчик на сайте Audience, где он любит писать стили на SCSS. Сегодня он нам покажет то, что я называю честным CSS трюком. Весь веб имеет вертикальное строение. Вы читаете сайт, как обычную книгу: слева направо, сверху вниз. Но иногда хочется уйти от вертикальности и сделать что-то сумасшедшее: сделать горизонтальный список. Или еще безумнее, горизонтальный сайт!

Было бы неплохо, если бы мы могли делать вот так:

/* ненастоящий код */ div { scroll-direction: horizontal; }

/* ненастоящий код */

div {

scroll - direction : horizontal ;

К сожалению, такого не будет. Такого даже в планах нет в CSS.

Это очень плохо, потому что в компании, в которой я работаю, это бы очень пригодилось. Мы делаем очень много презентаций, а презентация – это довольно горизонтальная штука. Обычно соотношение сторон у слайдов составляет 4:3 или 16:9. Из-за этого у нас возникает постоянная проблема с горизонтальными слайдами и вертикальными веб-технологиями. Под «мы» я имею в виду себя. Но что я люблю, так это трудности.

Другой вариант использования

Мне в голову пришел конкретный способ применения. Идея в том, что покупателям было бы удобно просматривать все товары на одном слайде. Естественно, каталог товаров не уместился бы в одном виде. Поэтому мы решили разбить каталог на три категории, каждая с горизонтальной прокруткой. Таким образом, три самых популярных товара видны в каждой категории, а к менее важным товарам открыт легкий доступ.

Способ без JavaScript

Все мы знаем, что на JS существует масса способ сделать горизонтальную прокрутку. Некоторые примеры есть на CSS-Tricks . Мне стало интересно, можно ли воплотить эту идею на чистом CSS. Решение оказалось очень простым:

создаем контейнер с элементами;

поворачиваем контейнер на 90 градусов против часовой стрелки, чтобы нижняя грань оказалась справа;

поворачиваем элементы внутри контейнера обратно на свое место.

Шаг 1) создаем контейнер

Создайте блок div с множеством дочерних элементов.

В нашем примере прокручиваемый контейнер будет 300px шириной, в нем будет 8 элементов 100х100px. Размеры произвольные, можно задать любые.

item 1 item 2 item 3 item 4 item 5 item 6 item 7 item 8

< div class = "horizontal-scroll-wrapper squares" >

< div > item 1 < / div >

< div > item 2 < / div >

< div > item 3 < / div >

< div > item 4 < / div >

< div > item 5 < / div >

< div > item 6 < / div >

< div > item 7 < / div >

< div > item 8 < / div >

< / div >

Высота контейнера станет шириной и наоборот. Ниже «ширина» контейнера будет составлять 300px:

Horizontal-scroll-wrapper { width: 100px; height: 300px; overflow-y: auto; overflow-x: hidden; }

width : 100px ;

height : 300px ;

overflow - y : auto ;

overflow - x : hidden ;

И дочерние элементы:

Horizontal-scroll-wrapper > div { width: 100px; height: 100px; }

Horizontal - scroll - wrapper > div {

width : 100px ;

height : 100px ;

Шаг 2) поворачиваем контейнер

Теперь нужно повернуть контейнер на -90 градусов при помощи CSS свойства transform. Мы получили горизонтальный скроллер.

Horizontal-scroll-wrapper { ... transform: rotate(-90deg); transform-origin: right top; }

Horizontal - scroll - wrapper {

. . .

transform : rotate (- 90deg ) ;

Только есть одна маленькая проблема: дочерние элементы повернулись вместе с контейнером.

Шаг 3) возвращаем дочерние элементы обратно на свое место

Так как же вернуть элементы на свое место? Поверните его обратно при помощи CSS свойства transform.

Horizontal-scroll-wrapper > div { ... transform: rotate(90deg); transform-origin: right top; }

Horizontal - scroll - wrapper > div {

. . .

transform : rotate (90deg ) ;

transform - origin : right top ;

Шаг 4) фиксированное позиционирование

Смотрится все неплохо, но есть пара проблем.

Мы повернули контейнер, а в качестве якоря задали правый верхний угол, из-за этого левая сторона сместилась на ширину контейнера. Если вам сложно представить, просто приложите палец к правому верхнему углу страницы и поверните ее. Выход: нужно повернуть ее обратно с помощью свойства translate.

Уже лучше. Но первого элемента все еще не видно, так как та же проблема наблюдается и с дочерними элементами. Это можно поправить, задав первому дочернему элементу верхний margin со значением его ширины или трансформировав все элементы, как контейнер. Самый простой способ, который я нашел, это добавить верхний padding к контейнеру, равный ширине дочерних элементов, тем самым создав буферную зону для элементов.

Совместимость

Я проверил совместимость на доступных мне устройствах.

Десктоп

Так как стилизация скроллбаров пока что работает только в Webkit/Blink браузерах, в Firefox и IE показывается обычный серый скроллбар. Это можно поправить с помощью JS и прятать их вообще, но это тема для другого урока.

Прокрутка с помощью колеса мыши отлично работает на десктопе. Но у моего ноутбука свое мнение на этот счет. На устройствах с тач скринами и тач падами демо ведет себя так, будто div вообще не поворачивали.

Мобильные устройства

Я был приятно удивлен, когда узнал, что Android понимает, что контейнер был повернут, и позволяет вам скролить с помощью свайпов вправо и влево.

С iOS же наоборот, все не так гладко. Браузер ведет себя так, будто контейнер не поворачивали вовсе. Поэтому для прокрутки нужно использовать свайпы вверх и вниз, что довольно странно. Overflow: hidden не решает проблему.

Заключение

По данным сайта Can I Use трансформации в CSS сейчас поддерживаются у 93%+ пользователей (на момент написания статьи, ноябрь 2016). Тут проблемы возникнуть не должно.

Хотя лучше не используйте этот метод в продуктиве. Я протестировал его на некоторых устройствах, но далеко не на всех и не так тщательно.

Самая большая проблема – сенсорные инпуты, в которых для перехода налево и направо нужно делать свайпы вверх и вниз. В качестве решения можно было бы прописать сообщение на сайте с объяснением, но тогда вам придется положиться на то, что пользователи прочитают его. И даже тогда это будет противоречить здравому смыслу. Другой способ решения – захватывать сенсорные инпуты с помощью JS на устройствах, но тогда лучше вообще все писать на JS и полностью отказаться от нашего CSS хака.

Привет, друзья. Сегодня поговорим о плавной прокрутке сайта. То есть не о , при нажатии на кнопку или ссылку, а о плавной прокрутке при использовании колесика или ползунка.

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

Конечно, многие пользуются браузерами, у которых и так настроена плавная прокрутка, многие используют специальное расширение для браузера, но не все. Давайте же добьемся плавности на большинстве устройств, с которых будут посещать ваш сайт.

Плагин для плавной прокрутки сайта

Для решения поставленной задачи я выбрал плагин Malihu-custom-scrollbar-plugin , так как у него очень много возможностей:

  • Вертикальная и / или горизонтальная полоса прокрутки.
  • Настраиваемый импульс прокрутки.
  • Плавная прокрутка колесиком мыши.
  • Плавная прокрутка за ползунок.
  • Поддержка клавиатуры и плавная прокрутка стрелочками или PgUp/PgDn.
  • Поддержка сенсорных экранов.
  • Готовые к использованию темы.
  • Ручная настройка с помощью CSS.
  • Разные варианты отображения ползунка.
  • Возможность добавить плавный скролл различным элементам на странице, у которых он присутствует.

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

«Стоп, плавный scroll в различных блоках это хорошо, но где же сама плавная прокрутка сайта из-за который мы пришли?» — скажете вы. Спокойствие. Сейчас мы этим займемся.

Подключения плагина

Так как выбранное решение — это jQuery плагин, то первым делом и подключим к сайту сам jQuery, если он у вас не подключен.

Теперь скачайте плагин для плавной прокрутки, по ссылке выше, и подключите к сайту 2 файла.

  • jquery.mCustomScrollbar.concat.min.js
  • jquery.mCustomScrollbar.min.css

Получится такая структура:

Плавный скролл сайта

Главное помните, что все зависящие от jQuery плагины должны подключаться после самого jQuery.

После того как все подключили, нужно инициализировать скрипт:

(function ($) { $(window).on("load", function () { $("body").mCustomScrollbar({ theme: "dark-thin" }); }); })(jQuery);

И добавить в CSS несколько простых правил, чтобы прокрутка применилась к документу. В самом начале вашего файла стилей добавьте следующую разметку:

Body, html { height: 100%; overflow: hidden; }

Это позволит убрать стандартную полосу прокрутки браузера и задать высоту, понятную скрипту. Не бойтесь, если подключаете к уже готовому сайту. В 99% случаев это никак не повлияет на вашу разметку.

Подключается точно так же как и первый, имеет всего 3 настройки и весит всего 2.6 килобайт:

$(function() { jQuery.scrollSpeed(100, 800, "easeOutCubic"); })

Где первое число — это шаг прокрутки, второе число — это скорость, а третье — тип анимации.

На этом — все. Всем — пока.

Мы будем называть scroll-эффектами любые сценарии и приемы, реализуемые на веб-странице, так или иначе связанные с направлением и/или позицией прокрутки этой страницы относительно окна браузера.

К сожалению, пока не существует никаких отраслевых стандартов по поводу именования различных видов скролл-эффектов. Поэтому давайте рассмотрим самые популярные из них и дадим им собственные, наиболее подходящие по смыслу названия.

1. Parallax (Параллакс).

Эффект движения слоев страницы с разной скоростью при скролле. Обычно, в соответствии с оптическим представлением параллакса, слои, находящиеся ближе к наблюдателю, должны двигаться быстрее слоев, находящихся на удалении.

Для справки, вот определение из википедии: “Паралла́кс (греч. παραλλάξ, от παραλλαγή, «смена, чередование») - изменение видимого положения объекта относительно удалённого фона, в зависимости от положения наблюдателя.”

3. Sticky (Прилипание)

Суть техники заключается в том, что элемент при скролле ведет себя как position: relative относительно своего родителя, пока его верхняя граница не достигнет верхнего края окна (viewport-a). При дальнейшем скролле вниз элемент ведет себя как position: static , будто отвязывается от родителя и “прилипает” к границе окна. Вот, к примеру, демо , в котором верхняя панель навигации реализована c эффектом “sticky”.

Этой техникой также можно пользоваться для “прилепливания” элементов к нижней, левой или правой границе экрана, в зависимости от позиции и направления скролла.

Надо сказать, что СSS свойство position: sticky (позволяет с легкостью реализовывать подобные эффекты без применения javascript) описано в черновике спецификации CSS Positioned Layout Module Level . Но вот с поддержкой браузерами пока совсем туго .

4. Reversed sticky (Реверсное прилипание).

Эффект, по сути, похож на предыдущий, но элемент прячется за границей окна при скролле вниз и появляется только при обратном скролле (вверх). Будет намного легче понять, о чем идет речь, немного поигравшись с демо .

5. Progress bar (Индикатор прокрутки).

Разновидности сценариев для визуализации текушего положения пользователя на странице при скролле. Например, в этом демо есть веселый индикатор прокрутки внизу страницы.

6. Accordion (Аккордеон).

Этот сценарий подразумевает последовательное применение stcicky -эффекта к заголовкам разделов страницы при скролле. А вот и демо

7. Menu Spy (Сопровождающее меню).

Этот сценарий хорошо известен под именем scroll spy в twitter bootstrap. Он подразумевает подсветку пунктов меню навигации, в зависимости от положения скролла, например, как в этом демо .

8. Staging (Сцена).

Самый сложный и эффектный сценарий, при котором некоторый блок, сопоставимый с размерами окна, фиксируется относительно видимой области страницы. В процессе прокрутки страницы сам блок остается неподвижным, однако, положение скролла влияет на развитие некого сценария внутри него. Это могут быть движения персонажей, появление или исчезновение контента, анимации и т.д. Смотрите демо .

Общие проблемы при реализации любых сценариев со скролл-эффектами.

Во-первых , при написании скролл-эффектов нужно учитывать большое количество факторов и величин:

  • Размер всего документа.
  • Размеры и позиции элементов, участвующих в сценарии, а также в некоторых случаях и их контейнеров.
  • Размер и текущее положение видимой части документа (viewport) при скролле.
  • Направление скролла.
  • Адаптация при изменении размеров окна с отзывчивым (responsive) дизайном

Во-вторых , математические вычисления для описания сценариев получаются довольно массивными, а их сложность возрастает с ростом количества эффектов.

В-третьих , на мобильных девайсах все работает плохо и с тормозами. Javascript изначально работает медленнее. В добавок к этому, мобильные браузеры блокируют выполнение javascript во время скролла.

В-четвертых , Вы никогда не знаете, что искать в Гугле. В большинстве случаев не понятно, как называется тот или иной скролл-эффект. В этом случае, найти готовое решение довольно сложно.

Что такое Scroolly?

Scroolly – это jquery-плагин, который предоставляет Вам простой синтаксис для создания и конфигурирования скролл-эффектов. Он прост в освоении, довольно легковесный и позволяет создавать сколь угодно сложные сценарии. Нужно сказать, что все демо, которые были приведены выше, реализованы с помощью Scroolly!

Правила, их границы и области действия.

Итак, в процессе скролла, в зависимости от положения прокрутки сраницы, нам нужно применять к элементам некоторые правила. Для этого необходимо определить границы действия этих правил.

Чтобы было проще понять о чем идет речь, приведу абстрактный пример:

  • Нужно плавно показать и плавно скрыть некоторый элемент, когда при скролле он будет входить в область видимости и выходить из нее. Элемент должен начать появляться после того, как его верхняя кромка будет на 100px выше нижней границы видимой области окна и полностью появится, когда его нижняя кромка будет на 100px выше нижней границы видимой области окна. Та же логика с исчезновением, только в симметрично обратном порядке.
  • Элемент нужно повернуть на 180° во время скролла, пока он будет находится в зоне ±30% от центра видимой зоны.
  • Чертовски сложно воспринимается на слух, не правда ли? Лучше посмотрим на .

    Давайте договоримся, что мы будем называть видимую область документа словом “viewport”. К сожалению, я не могу найти короткий русский аналог этого слова:)

    В итоге, здесь мы можем выделить 3 области действия правил c 6-ю границами. Давайте опишем их:

  • совпадает с нижней границей viewport (элемент начинает появляться)
  • совпадает с нижней границей viewport (элемент заканчивает появляться)
  • Точка, находящаяся на 30% ниже центра viewport, совпадает с центром элемента (элемент начинает поворот)
  • Точка, находящаяся на 30% выше центра viewport, совпадает с центром элемента (элемент заканчивает поворот)
  • Точка, находящаяся на 100px ниже верхней границы элемента, совпадает с верхней границей viewport (элемент начинает исчезать)
  • Точка, находящаяся на 100px выше верхней границы элемента, совпадает с верхней границей viewport (элемент заканчивает исчезать)
  • А теперь подумайте, с чего Вы начали бы описывать всю эту логику? Даже в таком простом сценарии с одним элементом в вычислениях участвуют размер документа, размер viewport, положение viewport, размер элемента, положение элемента, положение скролла… черт возьми, как же не запутаться?

    Scroolly спешит на помощь.

    Вся прелесть scroolly заключается в том, что каждая из этих границ областей действия правил задается с помощью вот такого наглядного синтаксиса:

  • el-top = vp-bottom - 100px (элемент начинает появляться)
  • el-bottom = vp-bottom - 100px (элемент заканчивает появляться)
  • el-center = vp-center + 30vp (элемент начинает поворот)
  • el-center = vp-center - 30vp (элемент заканчивает поворот)
  • el-top = vp-top + 100px (элемент начинает исчезать)
  • el-bottom = vp-top + 100px (элемент заканчивает исчезать)
  • А весь сценарий описывается так:

    $(".my-element").scroolly([ { from: "el-top = vp-bottom - 100px", to: "el-bottom = vp-bottom - 100px", cssFrom:{opacity:".0"}, cssTo:{opacity:"1"} }, { from: "el-center = vp-center + 30vp", to: "el-center = vp-center - 30vp", cssFrom:{"transform": "rotate(0deg)"}, cssTo:{"transform": "rotate(180deg)"} }, { from: "el-top = vp-top + 100px", to: "el-bottom = vp-top + 100px", cssFrom:{opacity:"1"}, cssTo:{opacity:".0"} } ]);

    Где vp – viewport, а el – элемент. Также можно пользоваться абстракциями doc для документа и con для контейнера элемента. А теперь об этом подробнее и с картинками…

    У каждого из них есть опорные точки, которые можно использовать в синтаксисе scroolly:

    viewport: vp-top , vp-center , vp-bottom
    элемент: el-top , el-center , el-bottom
    контейнер: con-top , con-center , con-bottom
    документ: doc-top , doc-center , doc-bottom

    Вот несколько примеров описания областей действия правил c помощью синтаксиса scrolly:

    Документация

    Если Вас заитересовал плагин scroolly обязательно посмотрите официальную документацию. А она существует, и даже представлена в 2-х вариантах:

  • Для ленивых и нетерпеливых – github.com/chayka/jQuery.Scroolly/wiki/Short-Story
  • Для неторопливых и вдумчивых – github.com/chayka/jQuery.Scroolly/wiki/Long-Story
  • Ну и самое главное: обязательно посмотрите видео с нашей конференции


    3. Принудительная установка вертикальной и горизонтальной прокрутки в блоке CSS
    4. Пример div блока с прокруткой

    В данной статье мы разберём вопрос создания блока (div) фиксированного размера с возможностью прокрутки по горизонтали и вертикали. Это можно реализовать средствами CSS. За это отвечает свойство overflow .

    О полезном свойстве overflow Свойство overflow отвечает за отображение содержания блочного элемента. Можно применить в том случае, когда контент не помещается полностью и выходит за область блока.

    overflow-x - отвечает за отображением содержания блочного элемента по горизонтали.
    overflow-y - отвечает за отображением содержания блочного элемента по вертикали.

    Код CSS

    Prokrutka {
    overflow: auto; /* свойство для прокрутки по горизонтали. Автоматом, если содержимое больше блока */
    }

    Свойства и значения overflowvisible - отображается все содержание элемента, даже за пределами установленной ширины.
    hidden - отображается только область внутри элемента, остальное скрыто.
    scroll - принудительно добавляется горизонтальная (y) или горизонтальная (x) полоса прокрутки.
    auto - автоматом добавляется горизонтальная полоса прокрутки, в случае если блок меньше.

    Рассмотри пример класса CSS. В width и height устанавливаем нужные нам ширину и высоту блока (за них не будет выходить содержимое блока), а свойством overflow: auto; задаем прокрутку по горизонтали в случае надобности

    Код CSS

    Prokrutka {
    width:150px; /* ширина нашего блока */
    height:100px; /* высота нашего блока */


    overflow: auto; /* свойство для прокрутки по горизонтали. Автоматом, если больше блока */
    }

    Принудительная установка прокрутки в блоке CSS Можно также принудительно создать прокрутку по высоте и ширине. Для этого каждой оси: overflow-y: scroll; (вертикаль) overflow-x: scroll; (горизонталь) укажем параметр scroll, принудительная прокрутка.

    Код HTML и CSS

    Prokrutka {
    height:150px; /* высота нашего блока */
    background: #fff; /* цвет фона, белый */
    border: 1px solid #C1C1C1; /* размер и цвет границы блока */


    }

    Пример div блока с прокруткойКод HTML и CSS



    Пример работы CSS


    .prokrutka {
    height: 200px; /* высота нашего блока */
    width: 200px; /* ширина нашего блока */
    background: #fff; /* цвет фона, белый */
    border: 1px solid #C1C1C1; /* размер и цвет границы блока */
    overflow-x: scroll; /* прокрутка по горизонтали */
    overflow-y: scroll; /* прокрутка по вертикали */
    }



    А тут много-много разного текста и прочей информации. А тут много-много разного текста и прочей информации. А тут много-много разного текста и прочей информации. А тут много-много разного текста и прочей информации. А тут много-много разного текста и прочей информации. А тут много-много разного текста и прочей информации. А тут много-много разного текста и прочей информации. А тут много-много разного текста и прочей информации.



    Одно из свойств overflow можно убрать, тогда останется прокрутка только по одной оси, чего вполне достаточно.
    Посмотреть работу скрипта на примере ниже.

    Иногда бывает просто необходимо сделать на странице блок, который бы имел свою полосу прокрутки. Конечно тут вспоминаются фреймы, но за то, что они давно уже отжили своё, они нам не подходят. Хотелось бы какое-нибудь решение, где обычному div"у можно было бы присобачить скролл. И такое решение есть, и не одно, а всё с использованием возможностей AJAX.

    Вертикальный скролл с помощью jScrollPane Общие слова

    jScrollPane - это плагин к любимейшей библиотеке jQuery . Позволяет он приделывать вертикальный скролл div"у. Скролл можно конфигурировать по внешнему виду как угодно. На странице плагина (ссылка "инфо") можно найти различные способы его применения. Среди них выделю два: первый - в нём предложены основные способы и внешние виды скроллов, второй - показана реализация скроллинг в скроллинге, а также скроллинг всей странице как таковой. Скачать плагин можно с официального сайта, но можно и с моего

    Маленькие хитрости

    Плагин я использовал в практике несколько раз. Один из таких примеров можно видеть . Внешний вид его нестандартен, что есть хорошо - можно лепить, всё что душе угодно (не душе, батенька, а заказчикам, заказчикам - прим.ред. ).

    Иногда плагин требует установки дополнительныйх плагинов, чтобы работало колёсико мыши для скролла и чтобы изменялся размер скроллинга в зависимости от количества контента. Но, как показала практика, всё работает и без них . Конечно, может у меня сборка плагина какая-то спешал, но вряд ли, качал с официального кажется.

    Пример

    Совсем одробно разбирать код не буду, в принципе ничего сложного там нет. Однако на некоторых моментах остановлюсь.

    HTML-файл. Структура блока со скроллом следующая



    Контент

    Есть внешний div с классом, есть внутренний div с идентификатором и обязательным классом scroll-pane. Всё. Вызов функции производится следующим образом:


    $(function()
    {
    $("#vnutrenniy).jScrollPane({showArrows:true, scrollbarWidth: 16, arrowSize: 16});
    });

    При вызове указываются различные параметры, типа ширины скроллбара (scrollbarWidth), размера его стрелочек (arrowSize) и так далее. Основные из них следующие:

    scrollbarWidth [число] - ширина скроллинга (по умолчанию 10)

    scrollbarMargin [число] - отступ слева от скроллбара (по умолчанию 5)

    wheelSpeed [число] - скорость колеса прокрутки в пикселах (по умолчанию 18)

    showArrows [логическое] - показывать графические стрелочки или нет (по умолчанию false)

    arrowSize [число] - высота стрелочки, если showArrows=true (рассчитывается через CSS, если не указана)

    dragMinHeight [число] - минимальная высотка бегунка (по умолчанию 0)

    dragMaxHeight [число] - максимальная высота бегунка (по умолчанию 99999!)

    scrollbarOnLeft [логическое] - если скроллбар нужен слева, ставим true.

    Теперь откроем файл jscroll.css. Смотрим следующие строки.

    8-15 строки. Внутреннему div"у ставим ширину и высоту (!), оверфлоу (не обязательный параметр кажется), паддинг скорее всего понадобится, остальное неважно.

    17-19 строки. Внешний div. Вот ему ни в коем случае нельзя прописывать высоту , и обязательно нужно указывать float: left . Всё это делается с одной целью - чтобы Опера 10 нормально работала со скроллом. Если это не соблюсти, то скролл дива будет синхронен со скроллом браузера и в итоге получится полная чушь. Помните об этом.

    23-57 строки. Стили картинок для скролла

    Изменение остальных строк по идее не нужно.

    Вертикальный и горизонтальный скролл на FleXcroll

    Не так ознакомился с этим скриптом. Он идёт без использования jQuery, что является плюсом (не всегда ж jQuery нужен). Вторым плюсом будет то, что есть горизонтальный скролл. Третий плюс заключается в том, что в архиве с плагином приложены примеры использования, причём хорошие, разноплановые, за что большой респект.

    С плагином на проектах работать не приходилось, но первое знакомство оказалось приятным. Единственный замеченный минус заключается в том, что при наведении мышкой курсор не превращается в "ручку". Мне кажется это минус, так как интуитивно непонятно может быть скролл это или нет. Однако, мне думается, через css всё исправить не будет проблем.

    В завершении

    Вертикальные и горизонтальные скроллы для div"ов не являются проблемой в реализации, всё просто и легко осуществимо. Поэтому дерзайте, используйте, открывайте новое. Всегда буду рад услышать комментарии, вопросы, пожелания=).