Прокрутка CSS

Горизонтальный скроллинг

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

пёсожившая картинкамечеклювтигрымишки
<style>
.scrolling {
 margin: 0 auto;
 width: 30em;
 height: 10em;
 overflow-x: scroll;
 overflow-y: hidden;
 white-space: nowrap;  /* чтобы картинки стояли в одну линию, не переходя на другую строку */
 word-wrap: normal;  /* то же для IE */
}

.scrolling img {
 width: 10em;
 height: 10em;
}
</style>

<div class="scrolling">
  <img src="адрес_изо" alt=""/>
  <img src="адрес_изо" alt=""/>
  <img src="адрес_изо" alt=""/>
  <img src="адрес_изо" alt=""/>
  <img src="адрес_изо" alt=""/>
</div>

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

пёсожившая картинкамечеклювтигрымишки
<style>
.element {
 margin: 0 auto;
 width: 30em;
 height: 10em;
 overflow: hidden;
 white-space: nowrap;
 word-wrap: normal;
}

.element img {
 width: 10em;
 height: 10em;
 transition: 999999s;  /* чтобы не дать элементу вернуться в исходное состояние, время обратного смещения очень велико */
}

.left:active ~ .element img, .right:active ~ .element img {transition: 2s linear;}
.left:active ~ .element img {transform: translateX(0);}
.right:active ~ .element img {transform: translateX(-20em);}
</style>

<button class="left">«</button><button class="right">»</button>
<div class="element">
  <img src="адрес_изо" alt=""/>
  <img src="адрес_изо" alt=""/>
  <img src="адрес_изо" alt=""/>
  <img src="адрес_изо" alt=""/>
  <img src="адрес_изо" alt=""/>
</div>

Для того, чтобы плавно прокручивалась вся фотография целиком.

пёс ожившая картинка мечеклюв тигры мишки Юрий Гагарин МКС Белка и Стрелка макет ракеты Восток Земля
<style>
[class^="scroll"] {
 position: relative;
 height: 10em;
 line-height: 10em;
 padding: 0 3em;
}
[class^="scroll"] input {
 display: none;
}
[class^="scroll"] div {
 height: 100%;
 overflow: hidden;
 white-space: nowrap;
 word-wrap: normal;
 font-size: 0;
}
[class^="scroll"] img {
 position: relative;
 right: 0em;
 width: 25%;
 height: 100%;
 transition: .5s;
}

[class^="scroll"] label {
 cursor: pointer;
 font-weight: 600;
 font-size: 3em;
}
[class^="scroll"] input:nth-of-type(1):checked ~ label:nth-of-type(2):after,
[class^="scroll"] input:nth-of-type(2):checked ~ label:nth-of-type(3):after,
[class^="scroll"] input:nth-of-type(3):checked ~ label:nth-of-type(4):after,
[class^="scroll"] input:nth-of-type(4):checked ~ label:nth-of-type(5):after,
[class^="scroll"] input:nth-of-type(5):checked ~ label:nth-of-type(6):after,
[class^="scroll"] input:nth-of-type(6):checked ~ label:nth-of-type(7):after {
 content: "\3009";
 position: absolute;
 right: 0;
}
[class^="scroll"] input:nth-of-type(2):checked ~ label:nth-of-type(1):after,
[class^="scroll"] input:nth-of-type(3):checked ~ label:nth-of-type(2):after,
[class^="scroll"] input:nth-of-type(4):checked ~ label:nth-of-type(3):after,
[class^="scroll"] input:nth-of-type(5):checked ~ label:nth-of-type(4):after,
[class^="scroll"] input:nth-of-type(6):checked ~ label:nth-of-type(5):after,
[class^="scroll"] input:nth-of-type(7):checked ~ label:nth-of-type(6):after {
 content: "\3008";
 position: absolute;
 left: 0;
}

[class^="scroll"] input:nth-of-type(2):checked ~ div img {right: 25%;}
[class^="scroll"] input:nth-of-type(3):checked ~ div img {right: 50%;}
[class^="scroll"] input:nth-of-type(4):checked ~ div img {right: 75%;}
[class^="scroll"] input:nth-of-type(5):checked ~ div img {right: 100%;}
[class^="scroll"] input:nth-of-type(6):checked ~ div img {right: 125%;}
[class^="scroll"] input:nth-of-type(7):checked ~ div img {right: 150%;}
</style>

<div class="scroll">

<input type="radio" id="l0" name="raz" checked="checked"/>
<input type="radio" id="l1" name="raz"/>
<input type="radio" id="l2" name="raz"/>
<input type="radio" id="l3" name="raz"/>
<input type="radio" id="l4" name="raz"/>
<input type="radio" id="l5" name="raz"/>
<input type="radio" id="l6" name="raz"/>

<label for="l0"></label>
<label for="l1"></label>
<label for="l2"></label>
<label for="l3"></label>
<label for="l4"></label>
<label for="l5"></label>
<label for="l6"></label>

<div>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
</div>

</div>

Красивый вертикальный скроллинг

Если нет необходимости в скролле, то тень не будет видна. Автор.

  • Тени нет сверху.
  • 2
  • 3
  • 4
  • 5
  • 6
  • Начинаем прокручивать блок
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • Конец!
  • Тут нет тени снизу.
<style>
.scrollbox {
 overflow: auto;
 width: 200px;
 max-height: 200px;
 margin: 30px auto;
 background:
  linear-gradient(white 30%, rgba(255,255,255,0)),
  linear-gradient(rgba(255,255,255,0), white 70%) 0 100%,
  radial-gradient(farthest-side at 50% 0, rgba(0,0,0,.2), rgba(0,0,0,0)),
  radial-gradient(farthest-side at 50% 100%, rgba(0,0,0,.2), rgba(0,0,0,0)) 0 100%;
 background-repeat: no-repeat;
 background-size: 100% 40px, 100% 40px, 100% 14px, 100% 14px;
 background-attachment: local, local, scroll, scroll;
}
</style>

<div class="scrollbox">
 <ul>
  <li>Тени нет сверху.</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
  <li>6</li>
  <li>Начинаем прокручивать блок</li>
  <li>8</li>
  <li>9</li>
  <li>10</li>
  <li>11</li>
  <li>12</li>
  <li>13</li>
  <li>14</li>
  <li>15</li>
  <li>16</li>
  <li>17</li>
  <li>18</li>
  <li>19</li>
  <li>20</li>
  <li>21</li>
  <li>22</li>
  <li>23</li>
  <li>24</li>
  <li>25</li>
  <li>26</li>
  <li>27</li>
  <li>Конец!</li>
  <li>Тут нет тени снизу.</li>
 </ul>
</div>
в f t
наверх ↑

23 комментария:

К М Г
Не работает :(
NMitra
Где именно? В IE? Там transition да transform с 10 версии будет работать, выход которой не за горами. Можно заменить transform на margin или position: relative; - результат будет тем же.
Megapotato
В хроме не работает, а в опере работает.
NMitra
Я, честно говоря, поленилась продублировать выше названные свойства с префиксом -webkit-. Все другие браузеры их (префиксы) уже убрали (IE, Опера, Мозила), а вот браузеры на основе WebKit (Chromium, Safari) пока нет. Также это просто вопрос ближайшего времени. Я решила немного на опережение сделать, чтобы потом не править статью.
К М Г
У меня, да, хром, и всё мёртвое.
К М Г
И в опере всё мёртвое ._.

только в мазилке работает.
NMitra
В Опере у меня всё в порядке. Для Хрома добавила -webkit- для transition и transform. Посмотрите снова.
К М Г
Спасибо, теперь работает :)
Анонимный
что-то нажимаю на "посмотреть код", но ничего не происходит
NMitra
В каком браузере на каком устройстве?
Анонимный
угу... В Maxthon4 (Webkit) на ПК. Под Firefox нормально.. спасибо, посмотрел.
Анонимный
Кстати вопрос на засыпку.. Реально ли учинить такую вот прокрутку варианта №3 в миниатюры вашей вот этой темы http://shpargalkablog.ru/2013/01/gallery-foto.html ? :) Думаю что это было бы актуально.
Владислав Кондрашов
А как сделать, что бы слайды не кончались с одной стороны, а по кругу шли?
NMitra
Третий вариант можно. http://shpargalkablog.ru/2013/07/slayder-dlya-sayta.html
Мария Дмитриева
Что нужно дописывать, чтобы добавлять больше картинок?
И можно ли сделать, чтобы картинки шли в три ряда?
Мария Дмитриева
забыла упомянуть, что говорю о третьем варианте (что со стрелками)
NMitra
Код изменила. Теперь лучше видны логические связи. Если нужно два ряда и более (id, for для id, name для одной строки должны быть индивидуальными):

<div class="scroll">

<input type="radio" id="l0" name="raz" checked="checked"/>
<input type="radio" id="l1" name="raz"/>
<input type="radio" id="l2" name="raz"/>
<input type="radio" id="l3" name="raz"/>
<input type="radio" id="l4" name="raz"/>
<input type="radio" id="l5" name="raz"/>
<input type="radio" id="l6" name="raz"/>

<label for="l0"></label>
<label for="l1"></label>
<label for="l2"></label>
<label for="l3"></label>
<label for="l4"></label>
<label for="l5"></label>
<label for="l6"></label>

<div>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
</div>

</div>

<div class="scroll1">

<input type="radio" id="h0" name="dva" checked="checked"/>
<input type="radio" id="h1" name="dva"/>
<input type="radio" id="h2" name="dva"/>
<input type="radio" id="h3" name="dva"/>
<input type="radio" id="h4" name="dva"/>
<input type="radio" id="h5" name="dva"/>
<input type="radio" id="h6" name="dva"/>

<label for="h0"></label>
<label for="h1"></label>
<label for="h2"></label>
<label for="h3"></label>
<label for="h4"></label>
<label for="h5"></label>
<label for="h6"></label>

<div>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
<img src="" alt=""/>
</div>

</div>
Мария Дмитриева
Спасибо огромное, теперь все стало намного понятнее!
Но у меня еще один вопрос - можно ли таким же образом сделать прокрутку не картинок, а div'ов с различным содержимым?
NMitra
Почему нет. Все img замените на figure.
Мария Дмитриева
Спасибо большое еще раз, отличные прокрутки, очень помогли!))
Космо Мизраил Горыныч
Возможно, скоро добавят скроллинг по страницам через ЦСС - то-есть по жмяку на стрелочки у ползунка (или на клаве) контент будет смещаться на экран. Или на размер блока.

Идея была предложена ещё оперой в 2011 году http://people.opera.com/howcome/2011/reader/ , но сейчас интерес к газетному оформлению страниц возрос.
NMitra
Было бы интересно. Но пока а мобильных устройствах тормозит даже onscroll.
Космо Мизраил Горыныч
Тормозит потому, что это методы яваскрипт, и его события "onscroll" срабатывают по несколько десятков раз в секунду, пока страница плавно прокручивается на мобильном устройстве, генерируя для плавности массу ненужных событий и убивая быстродействие несчастного браузера для дохленьких телефонов.

Нативная поддержка в цсс никак бы не тормозила)