Поведение WebKit/Blink (Safari/Chrome) по умолчанию в MacOS, начиная с 10.7 (Mac OS X Lion), заключается в том, чтобы скрывать полосы прокрутки от пользователей трекпада, когда они не используются. Это может сбивать с толку; полоса прокрутки часто является единственной визуальной подсказкой, что элемент можно прокручивать.
Скриншот HTML
<div class="frame">
Foo<br />
Bar<br />
Baz<br />
Help I'm trapped in an HTML factory!
</div>
CSS
.frame {
overflow-y: auto;
border: 1px solid black;
height: 3em;
width: 10em;
line-height: 1em;
}
WebKit (Chrome)
![screenshot of a div with no visible scroll bar]()
Скриншот Presto (Opera)
![screenshot of a div with a visible scroll bar]()
![]()
Как заставить полосу прокрутки всегда отображаться на прокручиваемом элементе в WebKit?
Ответ 1
Появление полос прокрутки можно контролировать с помощью WebKit -webkit-scrollbar
псевдоэлементов [blog]. Вы можете отключить внешний вид и поведение по умолчанию, установив -webkit-appearance
[docs] на none
.
Поскольку вы удаляете стиль по умолчанию, вам также нужно будет указать стиль самостоятельно, или полоса прокрутки никогда не появится. Следующий CSS воссоздает появление скрытых полос прокрутки:
CSS
.frame::-webkit-scrollbar {
-webkit-appearance: none;
}
.frame::-webkit-scrollbar:vertical {
width: 11px;
}
.frame::-webkit-scrollbar:horizontal {
height: 11px;
}
.frame::-webkit-scrollbar-thumb {
border-radius: 8px;
border: 2px solid white; /* should match background, can't be transparent */
background-color: rgba(0, 0, 0, .5);
}
.frame::-webkit-scrollbar-track {
background-color: #fff;
border-radius: 8px;
}
Скриншот WebKit (Chrome)
![screenshot showing webkit's scrollbar, without needing to hover]()
![]()
Ответ 2
Для одностраничного веб-приложения, где я динамически добавляю прокручиваемые разделы, я запускаю полосы прокрутки OSX, программно прокручивая один пиксель вниз и создавая резервную копию:
// Plain JS:
var el = document.getElementById('scrollable-section');
el.scrollTop = 1;
el.scrollTop = 0;
// jQuery:
$('#scrollable-section').scrollTop(1).scrollTop(0);
Это приводит к замиранию визуальной метки.
Ответ 3
Вот небольшой фрагмент кода, который включает полосы прокрутки по всему сайту. Я не уверен, сильно ли он отличается от текущего самого популярного ответа, но вот он:
::-webkit-scrollbar {
-webkit-appearance: none;
width: 7px;
}
::-webkit-scrollbar-thumb {
border-radius: 4px;
background-color: rgba(0,0,0,.5);
box-shadow: 0 0 1px rgba(255,255,255,.5);
}
Нашел по этой ссылке: http://simurai.com/blog/2011/07/26/webkit-scrollbar
Ответ 4
Браузерные полосы прокрутки вообще не работают на iPhone/iPad. На работе мы используем специальные полосы прокрутки JavaScript, такие как jScrollPane, чтобы обеспечить согласованный интерфейс между браузерами: http://jscrollpane.kelvinluck.com/
Он работает очень хорошо для меня - вы можете создавать действительно красивые пользовательские полосы прокрутки, которые соответствуют дизайну вашего сайта.
Ответ 5
Еще один хороший способ борьбы со скрытыми полосами прокрутки Lion - отобразить подсказку для прокрутки вниз. Он не работает с небольшими областями прокрутки, такими как текстовые поля, но хорошо с большими областями прокрутки и сохраняет общий стиль сайта. Один сайт делает это http://versusio.com, просто проверьте эту страницу примера и подождите 1,5 секунды, чтобы увидеть приглашение:
http://versusio.com/en/samsung-galaxy-nexus-32gb-vs-apple-iphone-4s-64gb
Реализация непростая, но вам нужно позаботиться о том, чтобы вы не отображали приглашение, когда пользователь уже прокручивал.
Вам нужно jQuery + Underscore и
$(window).scroll
чтобы проверить, просканировал ли пользователь сам,
_.delay()
чтобы вызвать задержку перед отображением подсказки - приглашение не должно быть навязчивым
$('#prompt_div').fadeIn('slow')
чтобы исчезнуть в вашей подсказке и, конечно,
$('#prompt_div').fadeOut('slow')
исчезнуть, когда пользователь прокручивается после того, как увидел приглашение
Кроме того, вы можете связать события Google Analytics, чтобы отслеживать поведение прокрутки пользователя.