Приховування смуги прокрутки на HTML-сторінці


748

Чи можна використовувати CSS, щоб приховати смугу прокрутки? Як би ти це зробив?


4
@UweKeim, для IE11 немає жодної хитрості
daVe

Відповіді:


425

Встановіть overflow: hidden;на тезі тіла так:

<style type="text/css">
    body {
        overflow: hidden;
    }
</style>

Код вище приховує як горизонтальну, так і вертикальну смугу прокрутки.

Якщо ви хочете приховати лише вертикальну смугу прокрутки , використовуйте overflow-y:

<style type="text/css">
    body {
        overflow-y: hidden;
    }
</style>

А якщо ви хочете приховати лише горизонтальну смугу прокрутки , використовуйте overflow-x:

<style type="text/css">
    body {
        overflow-x: hidden;
    }
</style>

Примітка. Також вимкнено функцію прокрутки. Нижче наведено відповіді, якщо ви хочете просто приховати смугу прокрутки, але не функцію прокрутки.


4
Немає опції "none" для властивості переповнення. Доступні варіанти включають: видиме, приховане, прокручування, автоматичне, успадкування.
Сергій Соколенко

1273
Насправді це не зовсім правильна відповідь: overflow: hidden не "приховує" смугу прокрутки. Він також зупиняє функцію прокрутки на сторінці. Це не зовсім те, про що ми просимо.
adriendenat

17
У Chrome, коли переповнення тіла встановлено на hiddenпрокрутку, працюватиме колесо прокрутки миші. У Firefox прокрутка не працюватиме за допомогою колеса прокрутки миші, для того, щоб розібратися в цьому, знадобилось час.
Doug Molineux

13
Я не бачу сенсу стверджувати, що overflow: hiddenвідключає прокрутку. Якщо хтось хоче приховати смугу прокрутки, то, імовірно, вони вважають цей елемент непотрібним, оскільки в першу чергу немає вмісту для прокрутки . А може, вони просто не хочуть взагалі дозволити прокручування .
BoltClock

39
Для мене твердження цілком справедливо, оскільки питання полягає в тому, щоб приховати смугу прокрутки , а не відключити прокрутку .
sboisse

976

WebKit підтримує псевдоелементи прокрутки, які можна приховати за допомогою стандартних правил CSS:

#element::-webkit-scrollbar {
    display: none;
}

Якщо ви хочете, щоб усі смуги прокрутки були прихованими, використовуйте

::-webkit-scrollbar {
    display: none;
}

Я не впевнений у відновленні - це спрацювало, але може бути правильний спосіб зробити це:

::-webkit-scrollbar {
    display: block;
}

Ви, звичайно, завжди можете використовувати width: 0, що потім можна легко відновити width: auto, але я не прихильник зловживань widthщодо налаштування видимості.

Firefox 64 тепер підтримує експериментальне властивість ширини прокрутки за замовчуванням (63 вимагає встановити прапор конфігурації). Щоб приховати смугу прокрутки в Firefox 64:

#element {
    scrollbar-width: none;
}

Щоб побачити, чи підтримує ваш поточний браузер або псевдоелемент, або scrollbar-widthспробуйте цей фрагмент:


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


11
Я просто шукав, бо дуже хотів приховати смуги прокрутки, але елементи все ще прокручуються (наприклад, клавіші вгору / вниз)
Mathias

7
це має бути найкращою відповіддю, оскільки інші рішення не дозволяють вам прокручувати
зараз

7
Чи підтримує це інші веб-переглядачі, крім webkit? Тому що це не працює в мозілі.
Рупам Датта

12
Однак у трекера Mozilla є запит на функцію. Можливо, ви зможете прискорити реалізацію, проголосувавши за неї :)
Петро,

3
ЦЕ ПРАВИЛЬНИЙ ВІДПОВІДЬ! Оскільки інші відсутні. Проблема полягає не лише в приховуванні смуги прокрутки, а в тому, як переповнення впливає на інші стилі. Я зіткнувся з цією самою проблемою в нашому додатку. Ми НЕ хочемо автоматичного переповнення 99% програми, проте є розділ довідки, де ви бажаєте, щоб користувач міг прокручуватися вниз. Оскільки тіло переповнене: приховано, єдиним WAN, щоб це впоратися, був клас ng в корені, або завдяки цьому хлопці, просто використовуючи деякі CSS.
Леон Габан

524

Так, начебто ..

Коли ви ставите запитання: "Чи можна видалити смуги прокрутки браузера якимось чином, а не просто заховати або замаскувати", всі скажуть "Неможливо", оскільки неможливо видалити смуги прокрутки з усіх браузерів у сумісний і крос-сумісний спосіб, і тоді є весь аргумент зручності використання.

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

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

Створіть div з прихованим переповненням. Виявити, коли користувач намагається прокрутити, але не в змозі, тому що ми відключили можливість браузерів прокручуватися з переповненням: приховано .. і замість цього переміщувати вміст вгору за допомогою JavaScript, коли це відбувається. Тим самим створюючи нашу власну прокрутку без прокрутки браузерів за замовчуванням або використовуючи плагін, як iScroll .

---

Заради ретельного; всі способи маніпулювання смугами прокрутки, визначені конкретним виробником:

Internet Explorer 5.5+

* Ці властивості ніколи не були частиною специфікації CSS, ні вони ніколи не були затверджені або встановлені префіксом постачальника, але вони працюють в Internet Explorer і Konqueror. Вони також можуть бути встановлені локально в таблиці стилів користувача для кожної програми. В Internet Explorer ви знаходите його на вкладці "Доступність", в Konqueror на вкладці "Стилі таблиці".

body, html { /* These are defaults and can be replaced by hexadecimal color values */
    scrollbar-base-color: aqua;
    scrollbar-face-color: ThreeDFace;
    scrollbar-highlight-color: ThreeDHighlight;
    scrollbar-3dlight-color: ThreeDLightShadow;
    scrollbar-shadow-color: ThreeDDarkShadow;
    scrollbar-darkshadow-color: ThreeDDarkShadow;
    scrollbar-track-color: Scrollbar;
    scrollbar-arrow-color: ButtonText;
}

Як і в Internet Explorer 8, ці властивості були встановлені префіксом Microsoft, але вони все ще ніколи не були затверджені W3C .

-ms-scrollbar-base-color
-ms-scrollbar-face-color
-ms-scrollbar-highlight-color
-ms-scrollbar-3dlight-color
-ms-scrollbar-shadow-color
-ms-scrollbar-darkshadow-color
-ms-scrollbar-base-color
-ms-scrollbar-track-color

Детальніші відомості про Internet Explorer

Internet Explorer надає scrollдоступ, який встановлює, чи потрібно відключати чи вмикати смуги прокрутки; він також може бути використаний для отримання значення положення смуг прокрутки.

У Microsoft Internet Explorer 6 і пізніших версій, коли ви використовуєте !DOCTYPEдекларацію для визначення режиму, сумісного зі стандартами, цей атрибут застосовується до елемента HTML. Якщо режим невідповідності стандартам не визначений, як у попередніх версіях Internet Explorer, цей атрибут застосовується до BODYелемента, а не до HTMLелемента.

Варто також зазначити, що при роботі з .NET клас ScrollBar System.Windows.Controls.Primitivesв рамках Презентації відповідає за візуалізацію смуг прокрутки.

http://msdn.microsoft.com/en-us/library/ie/ms534393(v=vs.85).aspx


WebKit

Розширення WebKit, що стосуються налаштування смуги прокрутки, є:

::-webkit-scrollbar {}             /* 1 */
::-webkit-scrollbar-button {}      /* 2 */
::-webkit-scrollbar-track {}       /* 3 */
::-webkit-scrollbar-track-piece {} /* 4 */
::-webkit-scrollbar-thumb {}       /* 5 */
::-webkit-scrollbar-corner {}      /* 6 */
::-webkit-resizer {}               /* 7 */

Введіть тут опис зображення

Їх можна комбінувати з додатковими псевдоселекторами:

  • :horizontal - Горизонтальний псевдоклас застосовується до будь-яких фрагментів прокрутки, які мають горизонтальну орієнтацію.
  • :vertical - Вертикальний псевдоклас застосовується до будь-яких фрагментів прокрутки, які мають вертикальну орієнтацію.
  • :decrement- Псевдоклас декременту стосується кнопок і композицій треку. Він вказує, чи зменшуватиме кнопка або фрагмент доріжки положення перегляду при використанні (наприклад, на вертикальній смузі прокрутки, зліва на горизонтальній смузі прокрутки).
  • :increment- Псевдоклас приросту застосовується до кнопок і композицій треку. Він вказує, чи буде кнопка або доріжка збільшувати положення перегляду при використанні (наприклад, вертикальна смуга прокрутки, праворуч на горизонтальній смузі прокрутки).
  • :start- Стартовий псевдоклас стосується кнопок та композицій треку. Він вказує, чи розміщений предмет перед великим пальцем.
  • :end- Кінцевий псевдоклас стосується кнопок та композицій треку. Він вказує, чи розміщується об’єкт після великого пальця.
  • :double-button- Псевдоклас з подвійною кнопкою застосовується до кнопок і композицій треків. Він використовується для визначення того, чи є кнопка частиною пари кнопок, які знаходяться разом на одному кінці смуги прокрутки. Для композицій треку вказується, чи композиція треку опирається на пару кнопок.
  • :single-button- Псевдоклас з однією кнопкою стосується кнопок і композицій треку. Він використовується для визначення того, чи є кнопка сама по собі в кінці смуги прокрутки. Для композицій треку вказує, чи опорна композиція лежить на однотонній кнопці.
  • :no-button - Застосовується до фрагментів треку та вказує, чи йде доріжка до краю смуги прокрутки, тобто немає кнопки на тому кінці доріжки.
  • :corner-present - Застосовується до всіх фрагментів прокрутки і вказує, чи є куточок прокрутки чи ні.
  • :window-inactive- Застосовується до всіх фрагментів прокрутки і вказує, чи є вікно, що містить смугу прокрутки, активно. (Останніми солов’ями цей псевдоклас зараз застосовується і до: виділення. Ми плануємо розширити його на роботу з будь-яким вмістом і запропонувати його як новий стандартний псевдоклас.)

Приклади цих комбінацій

::-webkit-scrollbar-track-piece:start { /* Select the top half (or left half) or scrollbar track individually */ }
::-webkit-scrollbar-thumb:window-inactive { /* Select the thumb when the browser window isn't in focus */ }
::-webkit-scrollbar-button:horizontal:decrement:hover { /* Select the down or left scroll button when it's being hovered by the mouse */ }

Детальніші відомості про Chrome

addWindowScrollHandler загальнодоступний статичний обробникRegistration addWindowScrollHandler (Window.ScrollHandler обробник)

  Додає параметр обробника Window.ScrollEvent Параметри: обробник - обробник Повертає: повертає реєстрацію обробника [ джерело ] ( http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/client/Window.html# addWindowScrollHandler (com.google.gwt.user.client.Window.ScrollHandler) )


Мозіла

Mozilla має деякі розширення для маніпулювання смугами прокрутки, але їх рекомендується не використовувати.

  • -moz-scrollbars-none Вони рекомендують використовувати перелив: прихований замість цього.
  • -moz-scrollbars-horizontal Схожий на overflow-x
  • -moz-scrollbars-vertical Подібно до переповнення-у
  • -moz-hidden-unscrollableПрацює лише внутрішньо в налаштуваннях профілю користувача. Вимикає прокручування кореневих елементів XML та відключає використання клавіш зі стрілками та колесо миші для прокрутки веб-сторінок.

  • Документи розробника Mozilla в розділі "Переповнення"

Детальніше про Mozilla

Наскільки я знаю, це не дуже корисно, але варто зазначити, що атрибут, який контролює, чи відображаються смуги прокрутки у Firefox, є ( посилання на посилання ):

  • Атрибут:        смуги прокрутки
  • Тип:               nsIDOMBarProp
  • Опис:   Об'єкт, який контролює, чи потрібно смуги прокрутки, відображаються у вікні. Цей атрибут "замінюється" в JavaScript. Лише для читання

І останнє, але не менш важливе, підкладка - це як магія.

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

Введіть тут опис зображення


Урок історії

Прокрутки

Просто тому, що мені цікаво, я хотів дізнатися про походження прокрутки, і це найкращі посилання, які я знайшов.

Різне

У проекті специфікації HTML5 seamlessатрибут був визначений, щоб запобігти появі смуг прокрутки в iFrames, щоб їх можна було поєднувати з навколишнім вмістом на сторінці . Хоча цей елемент не відображається в останній редакції.

Об'єкт scrollbarBarProp є дочірнім windowоб'єктом і представляє елемент інтерфейсу користувача, який містить механізм прокрутки, або якусь подібну концепцію інтерфейсу. window.scrollbars.visibleповернеться, trueякщо видно смуги прокрутки.

interface Window {
  // The current browsing context
  readonly attribute WindowProxy window;
  readonly attribute WindowProxy self;
           attribute DOMString name;
  [PutForwards=href] readonly attribute Location location;
  readonly attribute History history;
  readonly attribute UndoManager undoManager;
  Selection getSelection();
  [Replaceable] readonly attribute BarProp locationbar;
  [Replaceable] readonly attribute BarProp menubar;
  [Replaceable] readonly attribute BarProp personalbar;
  [Replaceable] readonly attribute BarProp scrollbars;
  [Replaceable] readonly attribute BarProp statusbar;
  [Replaceable] readonly attribute BarProp toolbar;
  void close();
  void focus();
  void blur();
  // Truncated

API історії також включає функції відновлення прокрутки на навігації по сторінці, щоб зберегти положення прокрутки при завантаженні сторінки.

window.history.scrollRestorationможна використовувати для перевірки стану відновлення прокрутки або зміни його статусу (додавання ="auto"/"manual". Авто - це значення за замовчуванням. Змінивши його вручну означає, що ви як розробник будете брати право власності на будь-які зміни прокрутки, які можуть знадобитися, коли користувач переглядає історію програми . Якщо вам потрібно, ви можете відслідковувати положення прокрутки, натискаючи записи історії за допомогою history.pushState ().

---

Подальше читання:

Приклади


27
Ця відповідь стосуватиметься значно більшої кількості веб-переглядачів (а саме IE), а не відповіді, яку зараз оновлено.
Метт Дженсен

Чудове доповнення. Фактично реалізували те саме рішення сьогодні! Можливо, варто згадати, що інший елемент повинен бути переповнений: приховано;
Метт Дженсен

2
Це правильна повноцінна відповідь. Я пояснюю, що якщо ви просто хочете не допустити прокрутки користувача, ви можете скористатися правилом переповнення. Ви також можете реалізувати власну функцію прокрутки в домашніх умовах. Якщо цього недостатньо, ви можете встановити властивості смуги прокрутки безпосередньо, використовуючи різні правила для різних браузерів.
новинні новини

1
Хоча це неймовірно продумана відповідь, дуже детальна та багато ресурсів, пов'язаних між собою, існують величезні проблеми для користувачів допоміжних технологій, коли ви вимикаєте прокрутку та використовуєте javascript для обробки всіх прокруток. Якщо ви також не встановите фокус на елемент при кожному прокручуванні для користувача, ваш користувач AT буде повністю втрачений. Також ваш користувач втратив повний налаштування контролю над тим, що він бачить. Дуже поганий UX для перегляду прокрутки для вашого користувача.
ShiningLight

Firefox Quantum 63.0.1 на MacOS High Sierra, не приховує панель прокрутки навіть із правилом 'overflow: -moz-scrollbars-none'. Хтось знає рішення для цього? Усі інші браузери, здається, працюють із запропонованими рішеннями.
Симона Адріані

106

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

Щоб видалити внутрішню divсмугу прокрутки, ви можете витягнути її із зовнішнього divполя перегляду, застосувавши до внутрішнього негативне поле div. Потім нанесіть рівну прокладку на внутрішній поділ, щоб вміст залишався на виду.

JSFiddle

HTML

<div class="hide-scroll">
    <div class="viewport">
        ...
    </div>
</div>

CSS

.hide-scroll {
    overflow: hidden;
}

.viewport {
    overflow: auto;

    /* Make sure the inner div is not larger than the container
     * so that we have room to scroll.
     */
    max-height: 100%;

    /* Pick an arbitrary margin/padding that should be bigger
     * than the max width of all the scroll bars across
     * the devices you are targeting.
     * padding = -margin
     */
    margin-right: -100px;
    padding-right: 100px;
}

8
Це має бути прийнятою відповіддю imo. Єдине, що мені довелося додати, було height: inheritedв .viewportcss.
Гельцгейт

4
Єдина проблема з цією відповіддю - це "мертвий" простір, залишений переміщеною смугою прокрутки, оскільки ми не знаємо насправді ширину смуги прокрутки, щоб відняти її від прокладки.
Фрондор

3
Крім того, вам не потрібно використовувати фіксовані значення для прокладки та поля. 100%є більш універсальним і виконує роботу.
Фрондор

Працював у IE11, Operah та Chrome, ще не тестував Firefox. Це чудова відповідь, +1.
майже початківець

чому -100pxі 100px??
oldboy

61

Це працює для мене з простими властивостями CSS:

.container {
    -ms-overflow-style: none;  // Internet Explorer 10+
    scrollbar-width: none;  // Firefox
}
.container::-webkit-scrollbar { 
    display: none;  // Safari and Chrome
}

Для старих версій Firefox використовуйте: overflow: -moz-scrollbars-none;


2
На жаль, це не працює у FireFox 48.0.2 на macOS Sierra. Якщо ви це зробите, overflow: -moz-scrollbars-none;то ви успішно видалите смугу прокрутки, але ви також видалите можливість прокрутки. Ви можете просто встановити overflow: hiddenзначення .container.
Мартін Чемберлін

1
Так, і з developer.mozilla.org/en-US/docs/Web/CSS/overflow ми читаємо про це -moz-scrollbars-none: "Це застарілий API і більше не гарантується, що він працює".
Мартін Чемберлін

1
Я оновив свою відповідь останньою підтримкою Firefox :)
Христо

56

Ось моє рішення, яке теоретично охоплює всі сучасні браузери:

html {
    scrollbar-width: none; /* For Firefox */
    -ms-overflow-style: none; /* For Internet Explorer and Edge */
}

html::-webkit-scrollbar {
    width: 0px; /* For Chrome, Safari, and Opera */
}

html можна замінити будь-яким елементом, за яким потрібно приховати смугу прокрутки.

Примітка . Я пропустив інші 19 відповідей, щоб побачити, чи не висвітлено код, який я публікую, і, схоже, жодна відповідь не підводить підсумок ситуації, що склалася в 2019 році, хоча багато з них детально описуються. Вибачте, якщо це сказав хтось інший, і я пропустив це.


3
найбільш
занижена

Єдине рішення, яке виправило мій кошмар прокрутки: D Спасибі!
бумдрак

21

Я думаю, що я знайшов вирішення для вас, хлопці, якщо ви все ще зацікавлені. Це мій перший тиждень, але він працював на мене ...

<div class="contentScroller">
    <div class="content">
    </div>
</div>

.contentScroller {overflow-y: auto; visibility: hidden;}
.content {visibility: visible;}

Для мене працює у chrome та firefox, не перевіряв IE чи будь-який інший браузер. jsfiddle.net/8xtfk729
Бен Девіс

1
Що стосується хромування (принаймні, v54), це чомусь відключає прокрутку за допомогою колеса прокрутки. Прокрутіть клавіші зі стрілками, додому / кінця / pg вниз / pg вгору, натисніть пальцем, а мишею 3 клацання n перетягнення все ще працює.
House3272

Ця відповідь є законною, вона фактично працює і, здається, працює у веб-переглядачах.
Сем

Це ховає цілу диву на моєму боці
Джоні

16

Якщо ви шукаєте рішення, як сховати смугу прокрутки для мобільних пристроїв, дотримуйтесь відповіді Петра !

Ось jsfiddle , яка використовує рішення нижче, щоб приховати горизонтальну смугу прокрутки.

.scroll-wrapper{
    overflow-x: scroll;
}
.scroll-wrapper::-webkit-scrollbar { 
    display: none; 
}

Він був протестований на планшеті Samsung з Android 4.0.4 (сендвіч з морозивом, як у рідному браузері, так і в Chrome) та на iPad із iOS 6 (як у Safari, так і в Chrome).


його відповідь не працює на Chrome і Safari в iOS 12.3
oldboy


11

Як вже говорили інші, використовуйте CSS overflow.

Але якщо ви все ще хочете, щоб користувач міг прокручувати цей вміст (не видно смуги прокрутки), вам потрібно використовувати JavaScript.

Тут я знайшов свою відповідь на рішення: Сховати смугу прокрутки, поки ще можна прокручувати мишу / клавіатуру


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

11

Окрім відповіді Петра:

#element::-webkit-scrollbar {
    display: none;
}

Це буде працювати так само і для Internet Explorer 10:

 #element {
      -ms-overflow-style: none;
 }

10

Перехресний підхід браузера до приховування смуги прокрутки.

Він був протестований на Edge, Chrome, Firefox та Safari

Сховати смугу прокрутки, поки ще можна прокручувати колесо миші!

Codepen

/* Make parent invisible */
#parent {
    visibility: hidden;
    overflow: scroll;
}

/* Safari and Chrome specific style. Don't need to make parent invisible, because we can style WebKit scrollbars */
#parent:not(*:root) {
  visibility: visible;
}

/* Make Safari and Chrome scrollbar invisible */
#parent::-webkit-scrollbar {
  visibility: hidden;
}

/* Make the child visible */
#child {
    visibility: visible;
}

1
пояснення, як це буде оцінено - гра з батьком / дитиною видимість, щоб приховати смугу прокрутки - жахливо
JackyJohnson

1
@believesInSanta Я додав коментарі та кодую, щоб пояснити краще. Я не згоден з вашою оцінкою, що грати із видимістю - це жахливий спосіб приховати смугу прокрутки. Я розумію, що це хакер, але правильним способом досягти цього ефекту було б, якби всі браузери підтримували спосіб окремо стилювати смугу прокрутки, як це дозволяють хром та сафарі.
Блейк Плумб

2
Я просто почувався закоханим у ваше рішення. Він прекрасно працює (використовується в додатках, які розроблені для використання у сучасних браузерах). Дуже дякую!
Максим Лафарі

7

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

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

Техніка Джона використовує три елементи:

  • Зовнішній елемент для маскування смуг прокрутки.
  • Середній елемент, щоб мати смуги прокрутки.
  • І вмістовий елемент обидва встановить розмір середнього елемента та зробить його смугами прокрутки.

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

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

Вибачте мій SASS ; P

%size {
    // set width and height
}

.outer {
    // mask scrollbars of child
    overflow: hidden;
    // set mask size
    @extend %size;
    // has absolutely positioned child
    position: relative;
}

.middle {
    // always have scrollbars.
    // don't use auto, it leaves vertical scrollbar showing
    overflow: scroll;
    // without absolute, the vertical scrollbar shows
    position: absolute;
}
// prevent text selection from revealing scrollbar, which it only does on
// some webkit based browsers.
.middle::-webkit-scrollbar {
    display: none;
}

.content {
    // push scrollbars behind mask
    @extend %size;
}

Тестування

OS X становить 10.6.8. Windows - це Windows 7.

  • Firefox 32.0 прокрутки приховано. Клавіші зі стрілками не прокручуються навіть після натискання на фокус, але це колесо миші та два пальці трекпада. OS X та Windows.
  • Приховані смуги прокрутки Chrome 37.0. Клавіші зі стрілками працюють після натискання на фокус. Робота колеса миші та трекпад. OS X та Windows.
  • Internet Explorer 11 Панелі прокрутки приховано. Клавіші зі стрілками працюють після натискання на фокус. Колесо миші працює. Windows.
  • Safari 5.1.10 Панелі прокрутки приховані. Клавіші зі стрілками працюють після натискання на фокус. Робота колеса миші та трекпад. ОС X.
  • Android 4.4.4 та 4.1.2. Панелі прокрутки приховані. Функція сенсорної прокрутки працює. Пробували в Chrome 37.0, Firefox 32.0 та HTMLViewer 4.4.4 (що б там не було). У HTMLViewer сторінка має розмір вмісту, що маскується, і її можна прокручувати! Прокрутка приємно взаємодіє із збільшенням сторінки.

1
Непов’язана примітка (що стосується питання). У цьому випадку вам слід використовувати @extend проти @include. Тож замість цього @mixin{}ви б %size{}тоді зробили в селекторах css дзвінок @extend %size;. Міксини, як правило, використовуються, коли ви перетягуєте змінні, щоб повернути результат. Заповнювачі місць (ака @extend) призначені для простого повторюваного коду, як це - там, де не потрібна "функція".
Майк Барвік

1
Я редагував, щоб використовувати @extend. Результат, мабуть, менш зрозумілий людям, які не знають SCSS, але досить добре.
Сет В. Кляйн

6

Я просто думав, що хотів би зазначити комусь, хто читає це питання, що налаштування overflow: hidden(або переповнення y) на bodyелементі не приховувало для мене смуги прокрутки.

Мені довелося використовувати htmlелемент.


3
Я не можу точно пригадати, як це було пару місяців тому, але я вважаю, що налаштування переливу на тілі працювала в Chrome, але не в Firefox (або навпаки). Однак тег HTML працював на обох.
Бред Азеведо

З пам’яті це може бути різниця в режимі причудків.
thomasrutter

5

Я написав версію WebKit з деякими параметрами, такими як автоматичне приховування , невелика версія , прокрутка only-y або only-x :

._scrollable{
    @size: 15px;
    @little_version_ratio: 2;
    @scrollbar-bg-color: rgba(0,0,0,0.15);
    @scrollbar-handler-color: rgba(0,0,0,0.15);
    @scrollbar-handler-color-hover: rgba(0,0,0,0.3);
    @scrollbar-coner-color: rgba(0,0,0,0);

    overflow-y: scroll;
    overflow-x: scroll;
    -webkit-overflow-scrolling: touch;
    width: 100%;
    height: 100%;

    &::-webkit-scrollbar {
        background: none;
        width: @size;
        height: @size;
    }

    &::-webkit-scrollbar-track {
        background-color:@scrollbar-bg-color;
        border-radius: @size;
    }

    &::-webkit-scrollbar-thumb {
        border-radius: @size;
        background-color:@scrollbar-handler-color;
        &:hover{
            background-color:@scrollbar-handler-color-hover;
        }
    }

    &::-webkit-scrollbar-corner {
      background-color: @scrollbar-coner-color;
    }

    &.little{
        &::-webkit-scrollbar {
            background: none;
            width: @size / @little_version_ratio;
            height: @size / @little_version_ratio;
        }
        &::-webkit-scrollbar-track {
            border-radius: @size / @little_version_ratio;
        }
        &::-webkit-scrollbar-thumb {
            border-radius: @size / @little_version_ratio;
        }
    }

    &.autoHideScrollbar{
        overflow-x: hidden;
        overflow-y: hidden;
        &:hover{
            overflow-y: scroll;
            overflow-x: scroll;
            -webkit-overflow-scrolling: touch;
            &.only-y{
                overflow-y: scroll !important;
                overflow-x: hidden !important;
            }

            &.only-x{
                overflow-x: scroll !important;
                overflow-y: hidden !important;
            }
        }
    }

    &.only-y:not(.autoHideScrollbar){
        overflow-y: scroll !important;
        overflow-x: hidden !important;
    }

    &.only-x:not(.autoHideScrollbar){
        overflow-x: scroll !important;
        overflow-y: hidden !important;
    }
}

http://codepen.io/hicTech/pen/KmKrjb


5

Скопіюйте цей CSS-код у код клієнта для приховування смуги прокрутки:

<style>

    ::-webkit-scrollbar {
       display: none;
    }

    #element::-webkit-scrollbar {
       display: none;
    }

</style>

4

Мій HTML такий:

<div class="container">
  <div class="content">
  </div>
</div>

Додайте це до місця, divде ви хочете приховати смугу прокрутки:

.content {
  position: absolute;
  right: -100px;
  overflow-y: auto;
  overflow-x: hidden;
  height: 75%; /* This can be any value of your choice */
}

І додайте це в контейнер

.container {
  overflow-x: hidden;
  max-height: 100%;
  max-width: 100%;
}


3

Моя відповідь прокручується навіть тоді overflow:hidden;, коли за допомогою jQuery:

Наприклад, прокрутіть горизонтально за допомогою колеса миші:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type='text/javascript' src='/js/jquery.mousewheel.min.js'></script>
<script type="text/javascript">
    $(function() {

       $("YourSelector").mousewheel(function(event, delta) {

          this.scrollLeft -= (delta * 30);
          event.preventDefault();
       });
    });
</script>

2
Прокрутка працює, але майже завжди є поганим досвідом користувача.
Брендон Анзалді

1
хоча це можливо, на прикладі хорошого прикладу виникають великі проблеми для користувачів допоміжних технологій, коли ви вимикаєте прокрутку та використовуєте javascript для обробки прокрутки. Якщо ви також не встановите фокус на елемент при кожному прокручуванні для користувача, ваш користувач AT буде повністю втрачений. Крім того, кожен користувач втратив повний налаштування контролю над тим, що він бачить. Дуже поганий UX для перегляду прокрутки для вашого користувача. Окрім мишального колеса, вам також потрібно керувати клавішами вгору / вниз, роторами зчитування екрана, клацанням миші та контролем сенсорної панелі. Це стає непростим для розробника і жахливим для користувача.
ShiningLight

2

Я вважаю, що ви можете керувати цим overflowатрибутом CSS, але у них обмежена підтримка браузера. Одне джерело сказало, що це Internet Explorer 5 (і пізніші версії), Firefox 1.5 (і пізніші версії) та Safari 3 (і пізніші) - можливо, достатньо для ваших цілей.

Прокручування, прокрутка, прокрутка має гарне обговорення.


1
Гарне посилання. Приємно знати, як результат у кількох браузерах. На жаль, цифра на скріншоті готових результатів порушена
Четабахана

0

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

body {
  overflow-y: scroll;
  margin-right: -20px;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.