Предотвращение скрытия полос прокрутки для пользователей трекпада MacOS в WebKit/Blink


WebKit/Blink (Safari/Chrome) поведение по умолчанию на MacOS с 10.7 (Mac OS X Lion) заключается в том, чтобы скрыть полосы прокрутки от пользователей трекпада, когда они не используются. Это может сбить с толку; полоса прокрутки часто является единственным визуальным сигналом, что элемент прокручивается.

пример (jsfiddle)

ФОРМАТ 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 (Хром) Скриншот

Престо (Опера) Скриншот


Как я могу заставить полоса прокрутки всегда будет отображаться на прокручиваемом элементе в WebKit?

5 142

5 ответов:

внешний вид полос прокрутки можно контролировать с помощью WebKit -webkit-scrollbar псевдо-элементами [блог]. Вы можете отключить внешний вид и поведение по умолчанию, установив -webkit-appearance[ docs] до none.

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

пример (jsfiddle)

стиль 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 (Хром) Скриншот

screenshot showing webkit's scrollbar, without needing to hover

для одностраничного веб-приложения, где я динамически добавляю прокручиваемые разделы, я запускаю полосы прокрутки OSX, программно прокручивая один пиксель вниз и резервное копирование:

// Plain JS:
var el = document.getElementById('scrollable-section');
el.scrollTop = 1;
el.scrollTop = 0;

// jQuery:
$('#scrollable-section').scrollTop(1).scrollTop(0);

это вызывает визуальный сигнал затухания и выхода.

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

::-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

полосы прокрутки браузера не работает на iPhone или iPad. На работе мы используем пользовательские полосы прокрутки JavaScript, такие как jScrollPane, чтобы обеспечить согласованный интерфейс кросс-браузера:http://jscrollpane.kelvinluck.com/

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

еще один хороший способ справиться со скрытыми полосами прокрутки Льва-отобразить приглашение для прокрутки вниз. Он не работает с небольшими областями прокрутки, такими как текстовые поля, но хорошо с большими областями прокрутки и сохраняет общий стиль сайта. Один сайт делает это http://versusio.com, Просто проверьте эту страницу примера и подождите 1,5 секунды, чтобы увидеть приглашение:

http://versusio.com/en/samsung-galaxy-nexus-32gb-vs-apple-iphone-4s-64gb

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

вам нужно jQuery + подчеркивание и

$(window).scroll чтобы проверить, если пользователь уже прокрутил сам,

_.delay() чтобы вызвать задержку перед отображением приглашения -- приглашение не должно быть навязчивым

$('#prompt_div').fadeIn('slow') чтобы исчезнуть в вашей подсказке и, конечно,

$('#prompt_div').fadeOut('slow') чтобы исчезнуть, когда пользователь прокручивал после того, как он увидел строки

кроме того, вы можете привязать события Google Analytics для отслеживания поведения прокрутки пользователя.