Скрытие полосы прокрутки на странице HTML

748

Можно ли использовать CSS, чтобы скрыть полосу прокрутки? Как бы вы это сделали?

ANP
источник
4
@UweKeim, для IE11 нет хитрости
да

Ответы:

425

Установите overflow: hidden;тег body следующим образом:

<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
На самом деле, это не совсем правильный ответ: переполнение: скрытый не «скрывает» полосу прокрутки. Также прекращена функция прокрутки на странице. Это не совсем то, что мы просим.
Адриенденат
17
В Chrome, когда переполнение тела установлено на hiddenпрокрутку, будет работать с колесиком прокрутки мыши. В Firefox прокрутка не будет работать с колесом прокрутки мыши, мне потребовалось время, чтобы понять это.
Дуг Молинью
13
Я не вижу смысла в утверждении, что overflow: hiddenотключает прокрутку. Если кто-то хочет скрыть полосу прокрутки, то, по-видимому, он считает, что элемент управления не нужен, поскольку в первую очередь нет содержимого для прокрутки . Или, может быть, они просто не хотят вообще разрешать прокрутку .
BoltClock
39
Для меня утверждение совершенно справедливо, так как вопрос заключается в том, чтобы скрыть полосу прокрутки , а не отключить прокрутку .
sboisse
977

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
это должен быть лучший ответ, так как другие решения не позволяют вам прокручивать
nuway
7
Поддерживает ли это другие браузеры, кроме webkit? Потому что это не работает в Mozilla.
Рупам Датта
12
Однако на трекере Mozilla есть запрос . Вы можете ускорить внедрение, проголосовав за него там :)
Питер
3
ЭТО ПРАВИЛЬНЫЙ ОТВЕТ! Как и другие отсутствуют. Проблема заключается не только в том, чтобы скрыть полосу прокрутки, но и в том, как переполнение влияет на другие стили. Я столкнулся с этой же проблемой в нашем приложении. Мы НЕ хотим, чтобы автоматическое переполнение выполнялось в 99% приложений, однако есть раздел справки, в котором вы хотите, чтобы пользователь мог прокручивать страницу вниз. Поскольку тело имеет переполнение: скрытое, единственное, что нужно было обработать, это 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 Presentation отвечает за отображение полос прокрутки.

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- Применяется ко всем элементам полосы прокрутки и указывает, активно ли в данный момент окно, содержащее полосу прокрутки. (В последние ночи этот псевдокласс теперь применяется и к :: selection. Мы планируем расширить его для работы с любым контентом и предложить его в качестве нового стандартного псевдокласса.)

Примеры этих комбинаций

::-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 общедоступная статическая регистрация обработчика addWindowScrollHandler (обработчик Window.ScrollHandler)

  Добавляет обработчик Window.ScrollEvent Параметры: handler - обработчик Returns: возвращает регистрацию обработчика [ source ] ( http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/client/Window.html# addWindowScrollHandler (com.google.gwt.user.client.Window.ScrollHandler) )


Mozilla

У Mozilla есть некоторые расширения для манипулирования полосами прокрутки, но все они рекомендуется не использовать.

  • -moz-scrollbars-none Они рекомендуют использовать переполнение: скрыто вместо этого.
  • -moz-scrollbars-horizontal Похоже на переполнение-х
  • -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

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

window.history.scrollRestoration может использоваться для проверки состояния скролла восстановления или изменения его статуса (добавление ="auto"/"manual" . Авто является значением по умолчанию. Изменение на ручное означает, что вы, как разработчик, станете владельцем любых изменений прокрутки, которые могут потребоваться, когда пользователь переходит к истории приложения. Если вам нужно, вы можете следить за положением прокрутки при перемещении записей истории с помощью history.pushState ().

---

Дальнейшее чтение:

Примеры

davidcondrey
источник
27
Этот ответ будет применяться к значительно большему количеству браузеров (а именно к IE), а не к ответу, который проголосовал в настоящее время.
Мэтт Дженсен
Отличное дополнение. На самом деле реализовал то же решение сегодня! Возможно, стоит упомянуть, что другой элемент должен быть переполнен: hidden;
Мэтт Дженсен
2
Это правильный, полнофункциональный ответ. Я объясняю, что если вы просто хотите остановить прокрутку пользователя, вы можете использовать правило переполнения. Вы также можете реализовать собственную встроенную функцию прокрутки. Если этого недостаточно, вы можете установить свойства полосы прокрутки напрямую, используя разные правила для разных браузеров.
шорты
1
Хотя это невероятно продуманный ответ, очень подробный и связанный со многими ресурсами, у пользователей вспомогательных технологий возникают огромные проблемы, когда вы отключаете прокрутку и используете javascript для обработки всей прокрутки. Если вы не устанавливаете фокус на элемент каждый раз, когда прокручиваете пользователя, тогда ваш пользователь AT будет полностью потерян. Кроме того, ваш пользователь теперь потерял весь отлаженный контроль над тем, что он видит. Очень плохой пользовательский интерфейс для прокрутки вашего пользователя.
ShiningLight
Firefox Quantum 63.0.1 в MacOS High Sierra не скрывает полосу прокрутки даже при использовании правила «overflow: -moz-scrollbars-none». Кто-нибудь знает решение для этого? Все остальные браузеры работают с предлагаемыми решениями.
Симона Адриани
106

Вы можете сделать это с помощью обертки div, в которой переполнение скрыто, а внутреннее значение divустановлено на auto.

Чтобы убрать внутреннюю divполосу прокрутки, вы можете вытащить ее из внешнего 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;
}
thgaskell
источник
8
Это должен быть принятый ответ IMO. Единственное, что я должен был добавить, было height: inheritedв .viewportCSS.
Хельцгейт,
4
Единственная проблема с этим ответом - «мертвое» пространство, оставленное перемещенной полосой прокрутки, потому что мы фактически не знаем ширину полосы прокрутки, чтобы вычесть ее из отступа.
Фрондор
3
Кроме того, вам не нужно использовать фиксированные значения для отступов и полей. 100%является более универсальным и делает свою работу.
Фрондор
Работал в IE11, Operah и Chrome, еще не тестировал Firefox. Это отличный ответ, +1.
почти новичок
почему -100pxи 100px??
старик
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
Самый недооцененный ответ здесь
AGrush
Единственное решение, которое исправило мой прокрутка-кошмар: 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
На Chrome (по крайней мере, v54) это по какой-то причине отключает прокрутку с помощью колеса прокрутки. Прокрутите с помощью клавиш со стрелками, home / end / pg down / pg up, касание пролистывание, и 3 щелчка мыши и перетаскивание все еще работает.
House3272
Этот ответ является законным, он действительно работает и, кажется, работает в разных браузерах.
Сэм
Это скрывает весь div на моей стороне
Джонни
16

Если вы ищете решение, чтобы скрыть полосу прокрутки для мобильных устройств, следуйте ответу Питера !

Вот jsfiddle , который использует решение ниже, чтобы скрыть горизонтальную полосу прокрутки.

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

Он был протестирован на планшете Samsung с Android 4.0.4 (Ice Cream Sandwich, как в собственном браузере, так и в Chrome) и на iPad с iOS 6 (как в Safari, так и в Chrome).

Alex
источник
его ответ не работает на Chrome и Safari в iOS 12.3
oldboy
11

Как уже говорили другие люди, используйте CSS overflow.

Но если вы все еще хотите, чтобы пользователь мог прокручивать этот контент (без видимой полосы прокрутки), вы должны использовать JavaScript.

Вот мой ответ здесь для решения: скрыть полосу прокрутки, все еще будучи в состоянии прокрутить с помощью мыши / клавиатуры

Питер Орнехольм
источник
1
Это правильный ответ и должен быть первым. Все выше сказанное не отвечает на поставленный вопрос. ОП не просит отключить прокрутку, она хочет скрыть полосу прокрутки.
pixelpax
11

В дополнение к ответу Петра:

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

Это будет работать так же для Internet Explorer 10:

 #element {
      -ms-overflow-style: none;
 }
JoshW
источник
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 Я добавил комментарии и кодовый блок, чтобы лучше объяснить. Я не согласен с вашей оценкой, что игра с видимостью - ужасный способ скрыть полосу прокрутки. Я понимаю, что это взлом, но правильный способ добиться этого эффекта был бы, если бы все браузеры поддерживали способ стилизации полосы прокрутки отдельно, как позволяют chrome и safari.
Блейк Пламб
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 Полосы прокрутки скрыты. Клавиши со стрелками работают после щелчка для фокусировки. Колесо мыши работает. Окна.
  • Safari 5.1.10 Полосы прокрутки скрыты. Клавиши со стрелками работают после щелчка для фокусировки. Колесо мыши и трекпад работают. OS 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;. Mixins обычно используются, когда вы вводите переменные, чтобы вернуть результат. Заполнители (aka @extend) предназначены для простого повторяющегося кода, подобного этому, где «функция» не требуется.
Майк Барвик
1
Я редактировал, чтобы использовать @extend. Результат, вероятно, менее понятен людям, которые не знают SCSS, но достаточно хорошо.
Сет В. Кляйн
6

Я просто подумал, что всем, кто читает этот вопрос, я укажу, что настройка overflow: hidden(или переполнение-y) bodyэлемента не скрывает полосы прокрутки для меня.

Я должен был использовать html элемент.

Брэд Азеведо
источник
3
Я не помню точно, так как это было пару месяцев назад, но я считаю, что настройка переполнения тела работала в Chrome, но не в Firefox (или наоборот). Однако использование тега HTML работало на обоих.
Брэд Азеведо
По памяти это может быть разница в режиме причуд.
Томасруттер
5

Я написал версию WebKit с некоторыми опциями, такими как автоматическое скрытие , маленькая версия , только прокрутка -y или только-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%;
}
Timo
источник
3

Чтобы отключить вертикальную полосу прокрутки, просто добавьте overflow-y:hidden;.

Узнайте больше об этом: переполнение .

Пранай Рана
источник
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>
Rasel
источник
2
Scrolljacking работает, но почти всегда плохой пользовательский опыт.
Брэндон Анзальди
1
Хотя это и возможно, на хорошем примере у пользователей вспомогательных технологий возникают огромные проблемы, когда вы отключаете прокрутку и используете javascript для обработки прокрутки. Если вы не устанавливаете фокус на элемент каждый раз, когда прокручиваете пользователя, тогда ваш пользователь AT будет полностью потерян. Кроме того, каждый пользователь теперь утратил весь отлаженный контроль над тем, что он видит. Очень плохой пользовательский интерфейс для прокрутки вашего пользователя. Помимо колесика мыши, вы также должны управлять клавишами вверх / вниз, ротором чтения с экрана, щелчками мыши и элементами управления сенсорной панели. Это становится громоздким для разработчика и ужасным для пользователя.
ShiningLight
2

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

Прокрутка, прокрутка, прокрутка имеет хорошее обсуждение.

Стефан Мор
источник
1
Хорошая ссылка. Приятно знать, как получится на нескольких браузерах. К сожалению, рисунок для скриншота готовых результатов не работает
Chetabahana