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


1127

Я хочу мати можливість прокручувати всю сторінку, але не показуючи смугу прокрутки.

У Google Chrome це:

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

Але Mozilla Firefox та Internet Explorer, здається, не працюють так.

Я також спробував це в CSS:

overflow: hidden;

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

Чи є спосіб я видалити смугу прокрутки, поки ще зможу прокручувати всю сторінку?

За допомогою лише CSS або HTML, будь ласка.

Відповіді:


787

Просто тест, який працює чудово.

#parent{
    width: 100%;
    height: 100%;
    overflow: hidden;
}

#child{
    width: 100%;
    height: 100%;
    overflow-y: scroll;
    padding-right: 17px; /* Increase/decrease this value for cross-browser compatibility */
    box-sizing: content-box; /* So the width will be 100% + 17px */
}

Робоча скрипка

JavaScript:

Оскільки ширина смуги прокрутки відрізняється в різних браузерах, краще обробляти її JavaScript. Якщо це зробити Element.offsetWidth - Element.clientWidth, відобразиться точна ширина смуги прокрутки.

Робоча скрипка JavaScript

Або

Використовуючи Position: absolute,

#parent{
    width: 100%;
    height: 100%;
    overflow: hidden;
    position: relative;
}

#child{
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: -17px; /* Increase/Decrease this value for cross-browser compatibility */
    overflow-y: scroll;
}

Робоча скрипка

Робоча скрипка JavaScript

Інформація:

На основі цієї відповіді я створив простий плагін прокрутки .


16
У вашій останній "робочій скрипці" я бачив занадто багато, !importantтому я видалив їх усіх: jsfiddle.net/5GCsJ/954
Roko C. Buljan

2
Це рішення не працює, коли для ширини вмісту встановлено значення авто. при прокручуванні до кінця праворуч частина вмісту все ще не видно. Чому так? Будь-які рішення? Ознайомтеся з проблемою тут: jsfiddle.net/50fam5g9/7 Примітка: ширина вмісту не може бути заздалегідь відома в моєму випадку, тому її потрібно встановити на автоматичну.
Sprout Coder

35
Цей підхід не буде охоплювати всі веб-переглядачі і буде дуже специфічний для версії браузера, з якою ви працюєте під час розробки.
Іцік Авідан

2
А як щодо горизонтальних смуг прокрутки? Як їх можна приховати?
www139

11
Навіщо ускладнювати та обчислювати ширину смуги прокрутки? Просто встановіть box-sizing: border-box; width: calc(100% + 50px);і таке ж значення для підкладки. Жоден веб-переглядач не має ширини / висоти смуги прокрутки 50 пікселів, тому він повинен просто охопити їх усі ...
Роберт Коритник

360

У WebKit це легко, з додатковим стилем:

html {
    overflow: scroll;
    overflow-x: hidden;
}
::-webkit-scrollbar {
    width: 0px;  /* Remove scrollbar space */
    background: transparent;  /* Optional: just make scrollbar invisible */
}
/* Optional: show position indicator in red */
::-webkit-scrollbar-thumb {
    background: #FF0000;
}

1
спробував це в cordovaдодатку, працював чудово. довелося застосувати overflow:scrollдо елемента.
Кішор Павар

41
Не працює на Firefox, цілком очевидно, оскільки це суто констатує веб-код. Дякую :)
Zohair

3
відмінно працює в додатках Electron, як очікувалося, оскільки вони хромовані. +1 спасибі: D
rococo

Оскільки iOS8, це не працює при використанні з-webkit-overflow-scrolling: touch
aleclarson

4
це працює з хромом. але не працює з mozilla firefox.
romal tandel

298

Це працює для мене з простими властивостями 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;


13
Для мене overflow: -moz-scrollbars-noneприховує смуги прокрутки у Firebox, але також вимикає прокрутку. Чи можете ви надати демонстрацію, де це працює для вас?
chipit24

1
На жаль, -moz-scrollbars-noneвластивість видалено для найновіших версій Firefox: developer.mozilla.org/en-US/docs/Web/CSS/overflow
Христо Єфтимов

2
Оскільки iOS8, це не працює при використанні з-webkit-overflow-scrolling: touch
aleclarson

3
Для застарілого Firefox -moz-scrollbars-noneви можете використовувати @-moz-document url-prefix() { .container { overflow: hidden; } }. Дивіться stackoverflow.com/questions/952861/… .
Мартін Жділа

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

292

ОНОВЛЕННЯ:

Зараз Firefox підтримує приховування смуг прокрутки за допомогою CSS, тому всі основні браузери тепер охоплені (Chrome, Firefox, Internet Explorer, Safari тощо).

Просто застосуйте наступний CSS до елемента, з якого потрібно видалити смуги прокрутки:

.container {
    overflow-y: scroll;
    scrollbar-width: none; /* Firefox */
    -ms-overflow-style: none;  /* Internet Explorer 10+ */
}
.container::-webkit-scrollbar { /* WebKit */
    width: 0;
    height: 0;
}

Це найменш хакізмене крос-браузерне рішення, про яке я зараз знаю. Перевірте демонстрацію.


ОРИГІНАЛЬНИЙ ВІДПОВІДЬ:

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

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

Демо:

Приклад коду для вертикальної версії:

HTML:

<div class="parent">
  <div class="child">
    Your content.
  </div>
</div>

CSS:

.parent {
  width: 400px;
  height: 200px;
  border: 1px solid #AAA;
  overflow: hidden;
}

.child {
  height: 100%;
  margin-right: -50px; /* Maximum width of scrollbar */
  padding-right: 50px; /* Maximum width of scrollbar */
  overflow-y: scroll;
}

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

3
Це абсолютно найкраща відповідь, руки вниз. Тепер, як можна змінити його для приховування горизонтальних смуг прокрутки?
CeeMoney

1
@CeeMoney Я додав горизонтальну демонстраційну версію. Для елементів вмісту фіксованої ширини, таких як зображення, він повинен просто працювати, але для тексту потрібно вимкнути обгортку.
Річрд

1
@Richrd - завдяки тоні за демонстрацію - працює чудово. Не знаю, чому ми все робимо так важко, але це так просто, я відчуваю себе дурним, що не робив цього раніше.
CeeMoney

4
Дякую @Richrd! Я такий радий, що прокрутив вашу відповідь. Якби SO мав би якусь "насильно прийняту відповідь", я б однозначно використовував це зараз.
Мартін Д

78

Використання:

<div style='overflow:hidden; width:500px;'>
   <div style='overflow:scroll; width:508px'>
      My scroll-able area
   </div>
</div>

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

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

Це лише для веб-переглядачів WebKit ... Або ви можете використовувати специфічний для браузера вміст CSS (якщо такий буде надалі). Кожен веб-переглядач може мати різні властивості для своїх барів.

Для використання Microsoft Едж: -ms-overflow-style: -ms-autohiding-scrollbar;або , -ms-overflow-style: none;як в MSDN .

Для Firefox немає еквівалента. Хоча для цього є плагін jQuery, http://manos.malihu.gr/tuts/jquery_custom_scrollbar.html


ictacademie.info/oussamaelbachiri цей сайт @Oussama Dobby використовує media = 'screen', а потім ':: - властивість webkit-scrollbar' для css
Arpit Singh

І що таке особливості css?
Oussama el Bachiri

або хакі-макет, або jquery є альтернативою
Арпіт Сінгх

Ваше перше рішення дає мені цю проблему s24.postimg.org/idul8zx9w/Naamloos.jpg І що ви маєте на увазі під хакі-макетом @ArpitSingh
Oussama el Bachiri

4
Наступне дозволило мені ввімкнути натиснуту прокрутку в Кордові за допомогою jQuery Mobile 1.4 на iOS7 та iOS8 // CSS ::-webkit-scrollbar { display: none; } .ui-content { -webkit-overflow-scrolling: touch; } // jQuery Mobile onMobileInit () $.mobile.touchOverflowEnabled = true;
Райан Вільямс

33

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

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

Хороша річ у тому, що ви не змушені використовувати прокладки або перепади ширини, щоб приховати смугу прокрутки.

Це також безпечне збільшення. Рішення накладки / ширини показують смугу прокрутки, коли її збільшують до мінімального.

Виправлення Firefox: http://jsbin.com/mugiqoveko/1/edit?output

.element,
.outer-container {
  width: 200px;
  height: 200px;
}
.outer-container {
  border: 5px solid purple;
  position: relative;
  overflow: hidden;
}
.inner-container {
  position: absolute;
  left: 0;
  overflow-x: hidden;
  overflow-y: scroll;
  padding-right: 150px;
}
.inner-container::-webkit-scrollbar {
  display: none;
}
<div class="outer-container">
  <div class="inner-container">
    <div class="element">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer vehicula quam nibh, eu tristique tellus dignissim quis. Integer condimentum ultrices elit ut mattis. Praesent rhoncus tortor metus, nec pellentesque enim mattis nec. Nulla vitae turpis ut
      dui consectetur pellentesque quis vel est. Curabitur rutrum, mauris ut mollis lobortis, sem est congue lectus, ut sodales nunc leo a libero. Cras quis sapien in mi fringilla tempus condimentum quis velit. Aliquam id aliquam arcu. Morbi tristique
      aliquam rutrum. Duis tincidunt, orci suscipit cursus molestie, purus nisi pharetra dui, tempor dignissim felis turpis in mi. Vivamus ullamcorper arcu sit amet mauris egestas egestas. Vestibulum turpis neque, condimentum a tincidunt quis, molestie
      vel justo. Sed molestie nunc dapibus arcu feugiat, ut sollicitudin metus sagittis. Aliquam a volutpat sem. Quisque id magna ultrices, lobortis dui eget, pretium libero. Curabitur aliquam in ante eu ultricies.
    </div>
  </div>
</div>


Це не працює для всіх браузерів ... Тільки веб-браузери. Ви використовуєте селектор, призначений для веб-кайтів::-webkit-scrollbar {}
префікс

Я перевірив його у всіх нових браузерах, перш ніж відповісти на запитання. Також ФФ. Сталися якісь зміни у ФФ?
Тімо Кахьонен

Я оновив відповідь. Здається, що додавання padding-right: 150px;виправляє це. Тестували на FF, Chrome, Safari та Edge. Працює також при низьких масштабах завдяки великій накладці праворуч.
Timo Kähkönen

2
Підтримка Edge, IE 11, IE10 (можливо, також нижче) html { -ms-overflow-style: none;}. У цих браузерах немає необхідності використовувати padding-hack.
Timo Kähkönen

Довелося скористатися відповіддю @ Тимо і overflow-y: scrollотримати поведінку прокрутки, але приховано (як і Chrome), щоб він працював на Edge23.
jojo

21

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

#liaddshapes::-webkit-scrollbar {
    width: 0 !important;
}

Де ліпдшапи - це назва діва, куди йде прокрутка.


Покажіть мені свою проблему у скрипці
Innodel

1
Легко і корисно, дякую! Я використовував {display: none} замість {width: 0;}, а також працюю
Santi Nunez

2
Не працює на MS Edge або Firefox.
Дпедрінья

18

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

У SCSS

.hide-native-scrollbar {
  scrollbar-width: none; /* Firefox 64 */
  -ms-overflow-style: none; /* Internet Explorer 11 */
  &::-webkit-scrollbar { /** WebKit */
    display: none;
  }
}

У CSS

.hide-native-scrollbar {
  scrollbar-width: none; /* Firefox 64 */
  -ms-overflow-style: none; /* Internet Explorer 11 */
}
.hide-native-scrollbar::-webkit-scrollbar { /** WebKit */
  display: none;
}

Що означають вкладені блоки ( {})? Як це трактувати? А то &? Можливо, детальніше у вашій відповіді?
Пітер Мортенсен

Це SASS (мабуть, МЕНШЕ): css-tricks.com/the-sass-ampersand
vipatron

@PeterMortensen Я щойно побачив ваш коментар, &::-webkit-scrollbarстає .hide-native-scrollbar::-webkit-scrollbar { }в CSS
Murhaf Sousli

просто зробіть { width: 0; height: 0;}для :: - webkit-прокрутки замість display: noneiOS.
adriendenat

У FF71 це блокує все прокручування.
ген b.

11

Наступне працювало для мене на Microsoft, Chrome та Mozilla для конкретного елемента div:

div.rightsidebar {
    overflow-y: auto;
    scrollbar-width: none;
    -ms-overflow-style: none;
}
div.rightsidebar::-webkit-scrollbar { 
    width: 0 !important;
}

зауважте, що scrollbar-width(лише FF) позначено як "експериментальний"
cimak

Так @cimak, але на FF ви можете приховати це без будь-якої проблеми, тому він реально використовується лише для Chrome.
Меломан

9

HTML:

<div class="parent">
    <div class="child">
    </div>
</div>

CSS:

.parent{
    position: relative;
    width: 300px;
    height: 150px;
    border: 1px solid black;
    overflow: hidden;
}

.child {
    height: 150px;   
    width: 318px;
    overflow-y: scroll;
}

Застосовуйте CSS відповідно.

Перевірте це тут (протестовано в Internet Explorer та Firefox).


8

З 11 грудня 2018 року (Firefox 64 і вище) відповідь на це питання дійсно дуже проста, оскільки Firefox 64+ тепер реалізує специфікацію стилів прокрутки CSS .

Просто використовуйте наступний CSS:

scrollbar-width: none;

Посилання на замітку Firefox 64 тут .


3
Це дуже приємно знати! Здається, браузери справді прогресують, ха-ха!
Oussama el Bachiri

7

Використання:

CSS

#subparent {
    overflow: hidden;
    width: 500px;
    border: 1px rgba(0, 0, 0, 1.00) solid;
}

#parent {
    width: 515px;
    height: 300px;
    overflow-y: auto;
    overflow-x: hidden;
    opacity: 10%;
}

#child {
    width: 511px;
    background-color: rgba(123, 8, 10, 0.42);
}

HTML

<body>
    <div id="subparent">
        <div id="parent">
            <div id="child">
                <!- Code here for scroll ->
            </div>
        </div>
     </div>
</body>

Не впевнений, чому це було знято, але я просто схвалив це, оскільки воно йде в правильному напрямку, інші рішення не дуже добре спрацювали в моєму випадку. overflow-x: приховано; + переповнення-у: прокрутка; це те, що зробив трюк разом із> 100% шириною (110% у моєму випадку спрацювало чудово).
dAngelov

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

6

Використовуйте

function reloadScrollBars() {
    document.documentElement.style.overflow = 'auto';  // Firefox, Chrome
    document.body.scroll = "yes"; // Internet Explorer only
}

function unloadScrollBars() {
    document.documentElement.style.overflow = 'hidden';  // firefox, chrome
    document.body.scroll = "no"; // Internet Explorer only
}

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


6

Це працює для мене:

scroll-content {
    overflow-x: hidden;
    overflow-y: scroll;
}

scroll-content::-webkit-scrollbar {
    width: 0;
}

5

У сучасних браузерах ви можете використовувати wheel event:

// Content is the element you want to apply the wheel scroll effect to
content.addEventListener('wheel', function(e) {
    const step = 100; // How many pixels to scroll

    if (e.deltaY > 0) // Scroll down
        content.scrollTop += step;
    else // Scroll up
        content.scrollTop -= step;
});

Це відповідь, яку я шукав. Дякую. Я використовував overflow: hiddenі цей код, щоб mat-card-content(у кутовій 5, звичайно) можна прокручувати, і це вирішило мою проблему. Примітка: я використовував e.deltaYяк своє, stepі він працював як звичайне прокручування, тому я вважаю, що для звичайної прокрутки, але зі схованою смугою, це найкращий збіг.
imans77

1
сторінка, що посилається тут, попереджає, що такий підхід не підходить?
jnnnnn

5

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

Рішення прокладки або маржинального значення на значення розміру коробки , вони працюють із розміром поля: content-box .

Мені все ще потрібна директива "-moz-scrollbars-none", і, як і gdoron та Mr_Green, мені довелося приховати панель прокрутки. Я спробував -moz-transformі -moz-padding-start, щоб вплив тільки Firefox, але є реагують побічні ефекти , які потрібні занадто багато роботи.

Це рішення працює для вмісту тіла HTML у стилі "display: grid", і воно чуйне.

/* Hide HTML and body scroll bar in CSS grid context */
html, body {
  position: static; /* Or relative or fixed ... */
  box-sizing: content-box; /* Important for hidding scrollbar */
  display: grid; /* For CSS grid */

  /* Full screen */
  width: 100vw;
  min-width: 100vw;
  max-width: 100vw;
  height: 100vh;
  min-height: 100vh;
  max-height: 100vh;
  margin: 0;
  padding: 0;
}

html {
  -ms-overflow-style: none;  /* Internet Explorer 10+ */
  overflow: -moz-scrollbars-none; /* Should hide the scroll bar */
}

/* No scroll bar for Safari and Chrome */
html::-webkit-scrollbar,
body::-webkit-scrollbar {
  display: none; /* Might be enough */
  background: transparent;
  visibility: hidden;
  width: 0px;
}

/* Firefox only workaround */
@-moz-document url-prefix() {
  /* Make HTML with overflow hidden */
  html {
    overflow: hidden;
  }

  /* Make body max height auto */
  /* Set right scroll bar out the screen  */
  body {
    /* Enable scrolling content */
    max-height: auto;

    /* 100vw +15px: trick to set the scroll bar out the screen */
    width: calc(100vw + 15px);
    min-width: calc(100vw + 15px);
    max-width: calc(100vw + 15px);

    /* Set back the content inside the screen */
    padding-right: 15px;
  }
}

body {
  /* Allow vertical scroll */
  overflow-y: scroll;
}

4

Додавання прокладки до внутрішнього div, як у прийнятій на даний момент відповідь, не вийде, якщо ви з якоїсь причини хочете скористатися box-model: border-box.

У обох випадках працює ширина внутрішнього divдо 100% плюс ширина смуги прокрутки (якщо припустити, що це overflow: hiddenстосується зовнішнього діва).

Наприклад, у CSS:

.container2 {
    width: calc(100% + 19px);
}

У JavaScript, крос-браузер:

var child = document.getElementById('container2');
var addWidth = child.offsetWidth - child.clientWidth + "px";
child.style.width = 'calc(100% + ' + addWidth + ')';

4

Ось так я це роблю для горизонтальної прокрутки; тільки CSS і добре працює з такими рамками, як Bootstrap / col- *. Потрібно лише два додаткових divs та батьків із a widthабо max-widthset:

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

.overflow-x-scroll-no-scrollbar {
    overflow: hidden;
}
.overflow-x-scroll-no-scrollbar div {
    overflow-x: hidden;
    margin-bottom: -17px;
    overflow-y: hidden;
    width: 100%;
}
.overflow-x-scroll-no-scrollbar div * {
    overflow-x: auto;
    width: 100%;
    padding-bottom: 17px;
    white-space: nowrap;
    cursor: pointer
}

/* The following classes are only here to make the example looks nicer */
.row {
    width: 100%
}
.col-xs-4 {
    width: 33%;
    float: left
}
.col-xs-3 {
    width:25%;
    float:left
}
.bg-gray {
    background-color: #DDDDDD
}
.bg-orange {
    background-color:#FF9966
}
.bg-blue {
    background-color: #6699FF
}
.bg-orange-light{
    background-color: #FFAA88
}
.bg-blue-light{
    background-color: #88AAFF
}
<html><body>
  <div class="row">
    <div class="col-xs-4 bg-orange">Column 1</div>
    <div class="col-xs-3 bg-gray">Column 2</div>
    <div class="col-xs-4 bg-blue">Column 3</div>
  </div>
  <div class="row">
    <div class="col-xs-4 bg-orange-light">Content 1</div>
    <div class="col-xs-3 overflow-x-scroll-no-scrollbar">
      <div>
        <div>This content too long for the container, so it needs to be hidden but scrollable without scrollbars</div>
      </div>
    </div>
    <div class="col-xs-4 bg-blue-light">Content 3</div>
  </div>
</body></html>

Коротка версія для ледачих:

.overflow-x-scroll-no-scrollbar {
    overflow: hidden;
}
.overflow-x-scroll-no-scrollbar div {
  overflow-x: hidden;
  margin-bottom: -17px;
  overflow-y: hidden;
  width: 100%;
}
.overflow-x-scroll-no-scrollbar div * {
  overflow-x: auto;
  width: 100%;
  padding-bottom: 17px;
  white-space: nowrap;
  cursor:pointer
}

/* The following classes are only here to make the example looks nicer */
.parent-style {
    width: 100px;
    background-color: #FF9966
}
<div class="parent-style overflow-x-scroll-no-scrollbar">
  <div>
    <div>This content too long for the container, so it needs to be hidden but scrollable without scrollbars</div>
  </div>
</div>


Дякую, я спробував, це чудово працює. Одне - краще змінити, але margin-bottomбути padding-bottomз однаковим значенням. Це не буде їсти нижче місця для елемента внизу. Це запобігає перекриттю.
haxpor

@haxpor margin-bottomВід'ємне, я думаю, що його не можна змінити на a padding-bottom, що не може впоратися з негативними значеннями
Жан,

3

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

<div id="container">
  <div id="content">
     My content that could overflow horizontally
  </div>
  <div id="scroll-cover">
     &nbsp; 
  </div>
</div>

Відповідний CSS такий:

#container{
   width: 100%;
   height: 100%;
   overflow: hidden;
   position: relative;
}

#content{
  width: 100%;
  height: 100%;
  overflow-x: scroll;
}
#scroll-cover{
  width: 100%;
  height: 20px;
  position: absolute;
  bottom: 0;
  background-color: #fff; /*change this to match color of page*/
}

3

Це буде в тілі:

<div id="maincontainer" >
<div id="child">this is the 1st step</div>
<div id="child">this is the 2nd step</div>
<div id="child">this is the 3rd step</div>

А це CSS:

#maincontainer
{
    background: grey;
    width: 101%;
    height: 101%;
    overflow: auto;
    position: fixed;
}

#child
{
    background: white;
    height:500px;
}

3

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

Розмітка полягає в наступному і має бути всередині чогось із відносним розміщенням (і його ширина повинна бути встановлена, наприклад, 400 пікселів):

<div class="hide-scrollbar">
    <div class="scrollbar">
        <div class="scrollbar-inner">

        </div>
    </div>
</div>

CSS:

.hide-scrollbar {
    overflow: hidden;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}

.scrollbar {
    overflow-y: scroll;
    position: absolute;
    top: 0;
    left: 0;
    right: -50px;
    bottom: 0;
}

.scrollbar-inner {
    width: 400px;
}

3

Можливо, perfect-scrollbarплагін - це шлях. Дивіться: https://github.com/noraesae/perfect-scrollbar

Це добре задокументоване і повне рішення на основі JavaScript для проблеми прокрутки.

Демонстраційна сторінка: http://noraesae.github.io/perfect-scrollbar/


2
Я не бачу, як це стосується питання?
Кріс Невілл

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

3

Наступні стилі SASS повинні зробити панель прокрутки прозорою у більшості браузерів (Firefox не підтримується):

.hide-scrollbar {
  scrollbar-width: thin;
  scrollbar-color: transparent transparent;

  &::-webkit-scrollbar {
    width: 1px;
  }

  &::-webkit-scrollbar-track {
    background: transparent;
  }

  &::-webkit-scrollbar-thumb {
    background-color: transparent;
  }
}

2

Інший різновид хакі-підходу - це зробити, overflow-y: hiddenа потім вручну прокрутити елемент таким чином:

function detectMouseWheelDirection(e) {
  var delta = null, direction = false;
  if (!e) { // If the event is not provided, we get it from the window object
    e = window.event;
  }
  if (e.wheelDelta) { // Will work in most cases
    delta = e.wheelDelta / 60;
  } else if (e.detail) { // Fallback for Firefox
    delta = -e.detail / 2;
  }
  if (delta !== null) {
    direction = delta > 0 ? -200 : 200;
  }
  return direction;
}

if (element.addEventListener) {
  element.addEventListener('DOMMouseScroll', function(e) {
    element.scrollBy({
      top: detectMouseWheelDirection(e),
      left: 0,
      behavior: 'smooth'
    });
  });
}

У блозі deepmikoto є чудова стаття про те, як виявити onmousewheelподії та боротися з ними . Це може допомогти вам, але це, безумовно, не елегантне рішення.


2

Я просто хотів поділитися комбінованим фрагментом для приховування смуги прокрутки, яку я використовую при розробці. Це колекція з кількох фрагментів, знайдених в Інтернеті:

.container {
    overflow-x: scroll; /* For horiz. scroll, otherwise overflow-y: scroll; */

    -ms-overflow-style: none;
    overflow: -moz-scrollbars-none;
    scrollbar-width: none;
}


.container::-webkit-scrollbar {
    display: none;  /* Safari and Chrome */
}

2

Ви можете використовувати код нижче, щоб приховати смугу прокрутки, але, поки ще не можете прокручувати:

.element::-webkit-scrollbar { 
    width: 0 !important 
}

2

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

.div{

  scrollbar-width: none; /* The most elegant way for Firefox */

}    

Підтримки практично не існує, за винятком FF, як ви згадали, занадто мало для того, що вимагала ОП. Перевірте caniuse.com/#feat=mdn-css_properties_scrollbar-width
Adrien

@Adrien Ну, в оригінальному запитанні було вказано, що вони мають рішення для інших браузерів. (Але, схоже, Mozilla Firefox та Internet Explorer не працюють так) він каже, що саме тому я дав рішення Firefox.
Елвін Мойо

Я виявив, що це спрацювало добре в поєднанні з еквівалентом: div :: - webkit-scrollbar {display: none; } для Webkit / Chrome.
Шон Холл

1

Ще одна проста робоча скрипка :

#maincontainer {
    background: orange;
    width: 200px;
    height: 200px;
    overflow: hidden;
}

#childcontainer {
    background: yellow;
    position: relative;
    width: 200px;
    height: 200px;
    top: 20px;
    left: 20px;
    overflow: auto;
}

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


Це не приховує смугу прокрутки, вона просто виштовхує її з поля зору зі значенням "ліворуч".
robertmiles3

@ robertmiles3 Це не те саме? ховається і не має можливості переглядати?
Брайан Вілліс

1
@ robertmiles3 обрана відповідь вище робить те ж саме праворуч. Схоже, що всі рішення хитрі, поки FIrefox не вирішить дозволити CSS знову приховувати смуги прокрутки. blogs.msdn.com/b/kurlak/archive/2013/11/03/…
geoyws

Я мушу погодитися. Це аналогічне рішення, запропоноване прийнятою відповіддю. Якщо це працює, це працює. upvoted
JSON

1

Це складне рішення працює навіть у старому веб-браузері IE

Це вирішення [ вертикальної смуги прокрутки ]

<html>
<head>
<style>
html,body{
         overflow:-moz-scrollbars-vertical;
         overflow-x:hidden;
         overflow-y:hidden;
         height:100%;
         margin:0 0 0 0
         }
</style>
</head>
<body id=body
      style="overflow:auto;
             height:100%" 
      onload="document.getElementById('body').style.width=document.body.offsetWidth+20+'px'">
//your stuff here
</body> 
</html>

Просто спробуйте: jsfiddle


0

Просто встановіть ширину дитячої ширини на 100%, набивши до 15 пікселів, overflow-xдля прокрутки і overflow:hiddenдля батьків, і будь-якої ширини ви хочете.

Він чудово працює у всіх основних браузерах, включаючи Internet Explorer та Edge, за винятком Internet Explorer 8 і новіших версій.

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