Зробити основну смугу прокрутки завжди видимою


179

Який CSS необхідний, щоб вертикальна панель прокрутки браузера залишалася видимою, коли користувач відвідує веб-сторінку (коли на сторінці недостатньо вмісту, щоб викликати активацію панелі прокрутки)?


Відповіді:


333
html {
    overflow: -moz-scrollbars-vertical; 
    overflow-y: scroll;
}

Це робить смугу прокрутки завжди видимою і активною лише при необхідності.

Оновлення: Якщо вищезгадане не працює, можливо, лише використання цього.

html {
    overflow-y:scroll;
}

3
Чи маєте ви уявлення, для якої версії FF була підтримка overflow-y? Як здається, -moz-scrollbars-verticalце застаріло на користь overflow-yмайна.
Ionuț G. Stan

Я думаю, що Internet Explorer 6.x +, Firefox 1.5+, якщо я правильно пам'ятаю. Я використовував вищевказаний код, і він працює для мене в FF1.5-3.5.1 та IE6-8.
Corv1nus

2
Чи існують альтернативи "перескоку сторінки", коли певні сторінки на вашому сайті занадто малі, щоб мати смугу прокрутки, а інші? Або це "найкраща практика"? Я мушу визнати, я не бачу багато сторінок на веб-сторінках, які не займають повну сторінку.
Джесс

2
Я не впевнений, чи це найкраща практика, але, як правило, прийнятним рішенням є прокрутки на всіх сторінках та активний лише за необхідності, щоб уникнути перескакувань сторінки. Я схильний віддавати перевагу постійній смузі прокрутки над стрибком.
Corv1nus

1
Для тих (як я), хто вважає стилізацію htmlтрохи хак-у , зауважте, що ви можете використовувати структурний псевдоселектор :rootзамість html. Дивіться: developer.mozilla.org/en-US/docs/Web/CSS/:root
Rounin

31

Переконайтеся, що для переповнення встановлено значення "прокручування", а не "автоматичне". З урахуванням сказаного , в OS X Lion переповнення, встановлене на "прокрутка", поводиться більше, як автоматично, якщо смуги прокрутки все ще відображатимуться лише при використанні. Тож, якщо якісь рішення вище, схоже, не працюють, то це може бути причиною.

Це вам потрібно буде виправити:

::-webkit-scrollbar {
  -webkit-appearance: none;
  width: 7px;
}
::-webkit-scrollbar-thumb {
  border-radius: 4px;
  background-color: rgba(0, 0, 0, .5);
  -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5);
}

Ви можете відповідно до цього стилю, якщо вам не подобається за замовчуванням.


1
Ця справа працює! Але як це можна зробити лише на конкретному діві?
Багатий

@Rich, як і будь-який інший елемент css. .yourdiv :: - webkit-scrollbar {...}
Kris

@Kris Привіт, дякую за відповідь, ось приклад цього. stackoverflow.com/a/54667091/2637261
Рік

Чому це використовується-webkit-appearance: none;
Suraj Jain

Це чудово! Повинна бути прийнята відповідь.
Кіберпанкер

25

Все змінилося за останні роки. Наведені вище відповіді вже не дійсні у всіх випадках. Apple скрізь штовхає зникаючі смуги прокрутки . У Safari, Chrome і навіть Firefox на MacOs (та iOs) відображаються смуги прокрутки лише під час фактичної прокрутки - я не знаю про поточну Windows / IE. Однак існують нестандартні способи стилізації смуг прокрутки на Вебкіті (IE, що давно випало).


але це витончено принижує право на тих нових?
Бен

3
Дякуємо за цей чудовий момент на панелях прокрутки, що зникають. Для мене причиною тримати видимість смуги прокрутки було уникати цього легкого, але дуже помітного та дуже дратівливого ривка, оскільки зміст змінюється від прокрутки до не. Зникаючи смуги прокрутки, вони не смикають тіло, коли вони показують і ховають, так що це добре для мене. Але дякую за цей чудовий момент.
Noitidart

4
З точки зору UX, у більшості випадків нам потрібна смуга прокрутки. Відповідно до поточної тенденції, якщо смуга прокрутки не видно, додатковим кроком потрібно буде "випробувати" видимий список для отримання додаткової інформації в списку. Додаткова візуальна підказка про те, що в списку або списку є більше елементів, не потрібна, якщо люди бачать смугу прокрутки.
windsurf88

24
html {
    overflow-y: scroll;
}

Це те, чого ти хочеш?

На жаль, Opera 9.64 , здається, ігнорує цю декларацію CSS стосовно HTMLабо BODY, хоча вона працює для інших елементів рівня блоку , як DIV.


13
html {height: 101%;}

Я використовую це рішення для перехресних браузерів (зверніть увагу: я завжди використовую декларацію DOCTYPE в 1-му рядку, я не знаю, чи працює він у quirksmode, ніколи не перевіряв його ).

Це завжди буде показувати АКТИВНУ вертикальну смугу прокрутки на кожній сторінці, вертикальна смуга прокрутки буде прокручуватися лише кількома пікселями.

Коли вміст сторінки коротший, ніж видима область браузера (порт перегляду), ви все одно побачите активну вертикальну смугу прокрутки, і вона може прокручуватися лише кількома пікселями.

Якщо ви одержимі валідацією CSS (я одержимий лише валідацією HTML), використовуючи це рішення, ваш CSS-код також би підтверджувався для W3C, оскільки ви не використовуєте нестандартні атрибути CSS, наприклад -moz-scrollbars-vertical


1
Елегантне рішення
Артур Кеян

12

body { height:101%; } буде "обрізати" більші сторінки.

Натомість я використовую:

body { min-height:101%; }

1
Це питання було задано 5 років тому, і воно вже має прийняту відповідь. Ваша відповідь не дає кращої відповіді, ніж вже прийнята відповідь.
Діпен Шах

18
Ця відповідь фактично надає додаткову інформацію, яка не передбачена в інших відповідях.
GaTechThomas

2

Я зміг змусити це працювати, додавши його до тегу body. Для мене було приємніше, тому що я не маю нічого на елементі html.

body {
    overflow-y: scroll;
}

2

Альтернативний підхід - встановити ширину html-елемента на 100vw. У багатьох, якщо не в більшості браузерів, це заперечує вплив смуг прокрутки на ширину.

html { width: 100vw; }

0

Встановлення висоти на 101% - це моє рішення проблеми. Сторінки більше не будуть «мерехтіти» при перемиканні між тими, які перевищують висоту вікна перегляду, і тими, які не роблять.



0

Я роблю це:

html {
    margin-left: calc(100vw - 100%);
    margin-right: 0;
}

Тоді мені не доведеться дивитись на некрасиву сіру смугу прокрутки, коли це не потрібно.


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