Запобігання приховуванню смуг прокрутки для користувачів трекпадних плат MacOS в WebKit / Blink


162

Поведінка 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 (Chrome)

скріншот діва без видимої смуги прокрутки

Скріншот Presto (Opera)

скріншот діва з видимою смугою прокрутки


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


Ви спробували переповнювати: прокручування? Це працювало в Chrome. Це повинно змусити панелі прокрутки завжди відображатися.
ухвала

2
Зауважте, що це також проблема в Firefox на Mac OS X.
Blaise

Людина, я ненавиджу це, коли веб-сайти псуються з інтерфейсом користувача в моїй системі та користувальницькому агенті.
атп

Відповіді:


250

Зовнішній вигляд смуг прокрутки можна керувати -webkit-scrollbarпсевдоелементами  WebKit [ блог ] . Ви можете вимкнути зовнішній вигляд та поведінку за замовчуванням, встановивши -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 (Chrome)

скріншот, на якому показана смуга прокрутки веб-сайту, не потрібно наводити курсор


1
Для вимушених прокручувальних ліній Macosx лев, описаний тут трюк не працює з цією технікою: stackoverflow.com/a/3417992/62255 . Але це не турбує - оскільки ми прямо встановлюємо розміри тут, ми можемо отримати доступ до них безпосередньо.
jedierikb

5
Зауважте, що ви також можете налаштувати доріжку / фон смуги прокрутки за допомогою:.frame::-webkit-scrollbar-track { background-color: #FFF; border-radius: 8px; }
XML

Зверніть увагу, що стилі прокрутки веб-камери не працюють в iOS 7 (і, можливо, 6).
RobW

4
Одне, що слід згадати, - це те, що в моєму тестуванні та дуже старому коментарі когось іншого, здається, у вас не може бути постійно ввімкнена смуга прокрутки І імпульсна прокрутка, яку люди звикли з iOS. Виконання CSS, що прокручує імпульс, призвело до зникнення моїх користувацьких смуг прокрутки.
jmq

2
Не перевіряли цього останнім часом, але я знайшов цю примітку в нашій CSS, на яку посилалося на це рішення: "Зауважте, що це покаже прокрутки у стилі OS X, наприклад, у Chrome для Windows."
Генрік N

19

Для веб-програми на одній сторінці, де я динамічно додаю розділи, що прокручуються, я запускаю панелі прокрутки OSX шляхом програмного прокручування одного пікселя вниз і резервного копіювання:

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

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

Це запускає зоровий кий, згасаючи і виходячи.


19

Ось коротший біт коду, який відновлює смуги прокрутки на всьому веб-сайті. Я не впевнений, чи сильно він відрізняється від найпопулярнішої відповіді, але ось це:

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


3

Панелі прокрутки браузера взагалі не працюють на iPhone / iPad. На роботі ми використовуємо власні панелі прокрутки JavaScript, такі як jScrollPane, щоб забезпечити послідовний інтерфейс між браузерами: http://jscrollpane.kelvinluck.com/

Для мене це дуже добре працює - ви можете зробити справді красиві спеціальні смуги прокрутки, які відповідають дизайну вашого сайту.


2

Ще один хороший спосіб поводження з прихованими смугами прокрутки Лева - відображення підказки прокрутки вниз. Він не працює з невеликими областями прокрутки, такими як текстові поля, але добре з великими областями прокрутки і зберігає загальний стиль сайту. Один із сайтів - 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, щоб відстежувати поведінку прокрутки користувачів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.