Ukryj pasek przewijania, ale nadal można przewijać

1127

Chcę móc przewijać całą stronę, ale bez pokazywania paska przewijania.

W Google Chrome jest to:

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

Ale Mozilla Firefox i Internet Explorer nie działają w ten sposób.

Próbowałem też tego w CSS:

overflow: hidden;

To ukrywa pasek przewijania, ale nie mogę już przewijać.

Czy istnieje sposób, aby usunąć pasek przewijania, wciąż przewijając całą stronę?

Poproszę tylko o CSS lub HTML.

Oussama el Bachiri
źródło

Odpowiedzi:

787

Tylko test, który działa dobrze.

#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 */
}

Working Fiddle

JavaScript:

Ponieważ szerokość paska przewijania różni się w różnych przeglądarkach, lepiej jest obsługiwać go za pomocą JavaScript. Jeśli to zrobisz Element.offsetWidth - Element.clientWidth, zostanie wyświetlona dokładna szerokość paska przewijania.

JavaScript Working Fiddle

Lub

Za pomocą 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;
}

Working Fiddle

JavaScript Working Fiddle

Informacja:

Na podstawie tej odpowiedzi stworzyłem prostą wtyczkę przewijania .

Pan Zielony
źródło
16
W ostatnim „działającym skrzypcach” widziałem ich zbyt wiele, !importantwięc usunąłem
Roko C. Buljan
2
To rozwiązanie nie działa, gdy szerokość zawartości jest ustawiona na auto. podczas przewijania do końca w prawo część zawartości jest nadal niewidoczna. Dlaczego? Jakieś rozwiązania? Sprawdź problem tutaj: jsfiddle.net/50fam5g9/7 Uwaga: szerokość treści nie może być wcześniej znana w moim przypadku, dlatego należy ustawić ją na auto.
Sprout Coder
35
To podejście nie obejmie wszystkich przeglądarek i będzie bardzo specyficzne dla wersji przeglądarki, nad którą pracujesz podczas tworzenia.
Itsik Avidan
2
Co z poziomymi paskami przewijania? Jak możesz je ukryć?
www139
11
Po co komplikować i obliczać szerokość paska przewijania? Wystarczy ustawić box-sizing: border-box; width: calc(100% + 50px);i tę samą wartość dla wypełnienia. Żadna przeglądarka nie ma szerokości / wysokości paska przewijania 50
pikseli
360

Jest łatwy w WebKit, z opcjonalnym stylem:

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;
}
Anirban Bhui
źródło
1
próbowałem tego w cordovaaplikacji, działało dobrze. musiał zastosować się overflow:scrolldo elementu.
Kishor Pawar
41
Nie działa w Firefoksie, to całkiem oczywiste, ponieważ jest to czysto webkit. Dzięki :)
Zohair,
3
działa doskonale w aplikacjach Electron zgodnie z oczekiwaniami, ponieważ są chromem. +1 dzięki: D
rokoko
Od iOS8 nie działa to w połączeniu z-webkit-overflow-scrolling: touch
aleclarson
4
działa z chromem. ale nie działa z Mozilla Firefox.
romal tandel
298

Działa to dla mnie z prostymi właściwościami CSS:

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

W przypadku starszych wersji Firefoksa użyj: overflow: -moz-scrollbars-none;

Hristo Eftimov
źródło
13
Dla mnie overflow: -moz-scrollbars-noneukrywa paski przewijania w Firebox, ale także wyłącza przewijanie. Czy możesz przedstawić wersję demonstracyjną, w której to działa?
chipit24
1
Niestety -moz-scrollbars-nonewłaściwość została usunięta dla najnowszych wersji Firefoksa: developer.mozilla.org/en-US/docs/Web/CSS/overflow
Hristo Eftimov
2
Od iOS8 nie działa to w połączeniu z-webkit-overflow-scrolling: touch
aleclarson
3
W przypadku przestarzałego Firefoksa -moz-scrollbars-nonemożesz użyć @-moz-document url-prefix() { .container { overflow: hidden; } }. Zobacz stackoverflow.com/questions/952861/… .
Martin Ždila
1
Zaktualizowałem odpowiedź o najnowsze wsparcie dla przeglądarki Firefox :)
Hristo Eftimov
292

AKTUALIZACJA:

Firefox obsługuje teraz ukrywanie pasków przewijania za pomocą CSS, więc wszystkie główne przeglądarki są teraz objęte (Chrome, Firefox, Internet Explorer, Safari itp.).

Po prostu zastosuj następujący CSS do elementu, z którego chcesz usunąć paski przewijania:

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

Jest to najmniej hackerskie rozwiązanie dla wielu przeglądarek, o którym obecnie wiem. Sprawdź wersję demo.


ORYGINALNA ODPOWIEDŹ:

Oto inny sposób, o którym jeszcze nie wspomniano. To jest naprawdę proste i wymaga tylko dwóch div i CSS. Nie jest potrzebny JavaScript ani zastrzeżony CSS i działa on we wszystkich przeglądarkach. Nie wymaga też jawnego ustawiania szerokości pojemnika, dzięki czemu jest płynny.

Ta metoda wykorzystuje ujemny margines, aby przesunąć pasek przewijania poza element nadrzędny, a następnie taką samą ilość dopełnienia, aby przesunąć zawartość z powrotem do pierwotnej pozycji. Ta technika działa w przypadku przewijania w pionie, poziomie i na dwa sposoby.

Dema:

Przykładowy kod wersji pionowej:

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;
}
Richrd
źródło
39
Wiem, że to nowa odpowiedź na stare pytanie, ale powinna to być teraz odpowiedź zaakceptowana. Dobra robota, stary.
Wektor
3
To absolutnie najlepsza odpowiedź, bez dwóch zdań. W jaki sposób można go zmodyfikować w celu ukrycia poziomych pasków przewijania?
CeeMoney,
1
@CeeMoney Dodałem poziome demo. W przypadku elementów o stałej szerokości, takich jak obrazy, powinno to po prostu działać, ale w przypadku tekstu należy wyłączyć zawijanie.
Richrd
1
@Richrd - dzięki ton za demo - działa idealnie. Nie wiem, dlaczego wszyscy to utrudniamy, ale jest to tak proste, że głupio czuję, że nie robiłem tego wcześniej.
CeeMoney
4
Dziękuję @Richrd! Cieszę się, że przewinęłam do twojej odpowiedzi. Gdyby SO miało jakąś „siłę akceptowaną odpowiedź”, z pewnością użyłbym go teraz.
Martin D
78

Posługiwać się:

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

Jest to sztuczka polegająca na nieco nałożeniu paska przewijania na nakładający się div, który nie ma żadnych pasków przewijania:

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

Dotyczy to tylko WebKit przeglądarek ... Lub możesz użyć zawartości CSS specyficznej dla przeglądarki (jeśli taka będzie w przyszłości). Każda przeglądarka może mieć inną i określoną właściwość dla odpowiednich pasków.

W przypadku Microsoft Edge użyj: -ms-overflow-style: -ms-autohiding-scrollbar;lub -ms-overflow-style: none;zgodnie z MSDN .

Nie ma odpowiednika dla Firefoksa. Chociaż istnieje do tego celu wtyczka jQuery, http://manos.malihu.gr/tuts/jquery_custom_scrollbar.html

Arpit Singh
źródło
ictacademie.info/oussamaelbachiri ta strona @Oussama Zgredek używa media = „ekran”, a następnie właściwość „:: - webkit-scrollbar” dla css
Arpit Singh
A jakie są specyficzne dla css właściwości css?
Oussama el Bachiri
albo hacky układ, albo jquery to alternatywa
Arpit Singh
Twoje pierwsze rozwiązanie daje mi ten problem s24.postimg.org/idul8zx9w/Naamloos.jpg A co masz na myśli przez zhackowany układ @ArpitSingh
Oussama el Bachiri
4
Poniższe pozwoliło mi włączyć natywne przewijanie w Cordova z jQuery Mobile 1.4 na iOS7 i iOS8 // CSS ::-webkit-scrollbar { display: none; } .ui-content { -webkit-overflow-scrolling: touch; } // jQuery Mobile onMobileInit () $.mobile.touchOverflowEnabled = true;
Ryan Williams
33

Ta odpowiedź nie zawiera kodu, więc oto rozwiązanie ze strony :

Według strony to podejście nie musi wcześniej znać szerokości paska przewijania, aby działać, a rozwiązanie działa również dla wszystkich przeglądarek i można je zobaczyć tutaj .

Dobrą rzeczą jest to, że nie musisz używać wypełnienia ani różnic szerokości, aby ukryć pasek przewijania.

Jest to również bezpieczne powiększanie. Rozwiązania wypełnienia / szerokości pokazują pasek przewijania po powiększeniu do minimum.

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

Timo Kähkönen
źródło
To nie zadziała dla wszystkich przeglądarek ... Tylko przeglądarki internetowe. Używasz selektora specyficznego dla pakietu::-webkit-scrollbar {}
Prefiks
Przetestowałem to we wszystkich nowych przeglądarkach, zanim odpowiedziałem na pytanie. Również FF. Zdarzyło się kilka zmian w FF?
Timo Kähkönen
Zaktualizowałem odpowiedź. Wygląda na to, że dodanie padding-right: 150px;go naprawia. Testowane w FF, Chrome, Safari i Edge. Działa również przy niskich poziomach powiększenia ze względu na duże wypełnienie po prawej stronie.
Timo Kähkönen
2
Obsługa Edge, IE 11, IE10 (być może także niższych) html { -ms-overflow-style: none;}. W tych przeglądarkach nie trzeba używać padding-hack.
Timo Kähkönen,
Musiałem użyć odpowiedzi @ Timo i overflow-y: scrolluzyskać zachowanie przewijania, ale ukryte (podobnie jak Chrome), aby działało na Edge23.
jojo
21

Wystarczy użyć następujących trzech wierszy, a problem zostanie rozwiązany:

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

Gdzie liaddshapes to nazwa div, gdzie nadchodzi zwój.

Innodel
źródło
Pokaż mi swój problem w skrzypcach
Innodel
1
Łatwe i użyteczne, dzięki! Użyłem {display: none} zamiast {width: 0;}, a także pracy
Santi Nunez
2
Nie działa w MS Edge ani Firefox.
Dpedrinha
18

Działa to dla mnie w różnych przeglądarkach. Nie ukrywa to jednak natywnych pasków przewijania w przeglądarkach mobilnych.

W SCSS

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

W CSS

.hide-native-scrollbar {
  scrollbar-width: none; /* Firefox 64 */
  -ms-overflow-style: none; /* Internet Explorer 11 */
}
.hide-native-scrollbar::-webkit-scrollbar { /** WebKit */
  display: none;
}
Murhaf Sousli
źródło
Co {}oznaczają zagnieżdżone bloki ( )? Jak to interpretować? A &? Być może dopracujesz swoją odpowiedź?
Peter Mortensen,
Jest to SASS (najwyraźniej MNIEJ): css-tricks.com/the-sass-ampersand
vipatron
@PeterMortensen Właśnie widziałem twój komentarz teraz, &::-webkit-scrollbarstaje się .hide-native-scrollbar::-webkit-scrollbar { }w CSS
Murhaf Sousli
po prostu zrób { width: 0; height: 0;}dla :: - webkit-scrollbar zamiast display: nonena iOS.
adriendenat
W FF71 blokuje to przewijanie.
gen b.
11

Poniższe działało dla mnie w Microsoft, Chrome i Mozilli dla określonego elementu div:

div.rightsidebar {
    overflow-y: auto;
    scrollbar-width: none;
    -ms-overflow-style: none;
}
div.rightsidebar::-webkit-scrollbar { 
    width: 0 !important;
}
Meloman
źródło
zauważ, że scrollbar-width(tylko FF) jest oznaczony jako „eksperymentalny”
cimak
Tak @cimak, ale na FF można go ukryć bez problemu, więc jest on używany tylko w Chrome.
Meloman
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;
}

Zastosuj CSS odpowiednio.

Sprawdź tutaj (przetestowane w Internet Explorerze i Firefoxie).

Mischa
źródło
8

Od 11 grudnia 2018 r. (Firefox 64 i nowsze wersje) odpowiedź na to pytanie jest bardzo prosta, ponieważ Firefox 64+ implementuje teraz specyfikację Stylizacji paska przewijania CSS .

Wystarczy użyć następującego CSS:

scrollbar-width: none;

Link do informacji o wersji przeglądarki Firefox 64 tutaj .

Chris
źródło
3
To bardzo miło wiedzieć! Wygląda na to, że przeglądarki rzeczywiście robią postępy, haha!
Oussama el Bachiri
7

Posługiwać się:

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>
Owais
źródło
Nie jestem pewien, dlaczego zostało to zanegowane, ale właśnie go oceniłem, ponieważ idzie w dobrym kierunku, inne rozwiązania nie działały tak dobrze w moim przypadku. overflow-x: ukryty; + przelew-y: przewiń; jest to, co zadziałało, wraz z> 100% szerokością (110% w moim przypadku działało ładnie).
dAngelov
1
to to samo, co najbardziej uprzywilejowane rozwiązanie: próba ukrycia paska przewijania. nie jest to idealne, ponieważ różni się w zależności od przeglądarki
mwm
6

Posługiwać się

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
}

Wywołaj te funkcje dla dowolnego punktu, który chcesz załadować, rozładować lub ponownie załadować paski przewijania. Nadal można go przewijać w Chrome, gdy testowałem go w Chrome, ale nie jestem pewien innych przeglądarek.

użytkownik43353
źródło
6

To działa dla mnie:

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

scroll-content::-webkit-scrollbar {
    width: 0;
}
mangesh
źródło
5

W nowoczesnych przeglądarkach możesz używać 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;
});
Doua Beri
źródło
Oto odpowiedź, której szukałem. Dzięki. Użyłem overflow: hiddentego kodu, aby mat-card-content(w Angular 5 oczywiście) można było przewijać i to rozwiązało mój problem. Uwaga: użyłem e.deltaYjako mojego stepi działało jak normalne przewijanie, więc myślę, że normalne przewijanie, ale z ukrytym paskiem przewijania, jest to najlepsze dopasowanie.
imans77
1
strona, do której prowadzi link, ostrzega, że ​​takie podejście jest nieodpowiednie?
jnnnnn
5

Mój problem: nie chcę żadnego stylu w treści HTML. Chcę, aby moje ciało było bezpośrednio przewijalne bez paska przewijania i tylko pionowe przewijanie, współpracujące z siatkami CSS dla dowolnego rozmiaru ekranu.

Rozwiązania wyrównywania wartości marginesów w pudełku wpływają na rozwiązania w zakresie wielkości pudełka: content-box .

Nadal potrzebuję dyrektywy „-moz-scrollbars-none” i podobnie jak gdoron i Mr_Green musiałem ukryć pasek przewijania. Próbowałem -moz-transformi -moz-padding-start, aby wpłynąć tylko na Firefoksa, ale były responsywne efekty uboczne, które wymagały zbyt wiele pracy.

To rozwiązanie działa w przypadku treści HTML ze stylem „display: grid” i jest responsywne.

/* 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;
}
Lucile Fievet
źródło
4

Dodanie dopełnienia do wewnętrznej div, jak w obecnie akceptowanej odpowiedzi, nie będzie działać, jeśli z jakiegoś powodu chcesz użyć box-model: border-box.

W obu przypadkach działa zwiększenie szerokości wewnętrznej divdo 100% plus szerokość paska przewijania (przy założeniu, overflow: hiddenże div div).

Na przykład w CSS:

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

W JavaScript, w różnych przeglądarkach:

var child = document.getElementById('container2');
var addWidth = child.offsetWidth - child.clientWidth + "px";
child.style.width = 'calc(100% + ' + addWidth + ')';
herman
źródło
4

Tak właśnie robię dla przewijania w poziomie; tylko CSS i działa dobrze z frameworkami takimi jak Bootstrap / col- *. Potrzebuje tylko dwóch dodatkowych divs, a rodzic z widthlubmax-width set:

Możesz zaznaczyć tekst, aby go przewinąć lub przewinąć palcami, jeśli masz ekran dotykowy.

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

Krótka wersja dla leniwych:

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

Drelich
źródło
Dzięki, próbowałem, działa świetnie. Jedną rzeczą jest to, że lepiej się zmienić, margin-bottomaby mieć padding-bottomtę samą wartość. To nie zje poniżej miejsca dla elementu na dole. Zapobiega nakładaniu się.
haxpor
@haxpor margin-bottomJest ujemny, myślę, że nie można go zmienić na a padding-bottom, który nie radzi sobie z wartościami ujemnymi
Jean
3

Zdarzyło mi się wypróbować powyższe rozwiązania w moim projekcie iz jakiegoś powodu nie byłem w stanie ukryć paska przewijania z powodu pozycjonowania div. Dlatego postanowiłem ukryć pasek przewijania, wprowadzając div, który pokrywa go powierzchownie. Przykład poniżej dotyczy poziomego paska przewijania:

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

Odpowiedni CSS wygląda następująco:

#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*/
}
Adam Ranganathan
źródło
3

To będzie na ciele:

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

A to jest CSS:

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

#child
{
    background: white;
    height:500px;
}
Hilla
źródło
3

Jest to rozwiązanie typu divitis, które jednak powinno działać dla wszystkich przeglądarek ...

Znaczniki są następujące i muszą znajdować się wewnątrz czegoś o względnym ustawieniu (a jego szerokość powinna być ustawiona, na przykład 400 pikseli):

<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;
}
Peter Mortensen
źródło
3

perfect-scrollbarWtyczki wydaje się być droga, patrz: https://github.com/noraesae/perfect-scrollbar

Jest to dobrze udokumentowane i kompletne rozwiązanie oparte na JavaScript do problemu pasków przewijania.

Strona demonstracyjna: http://noraesae.github.io/perfect-scrollbar/

jmarceli
źródło
2
Nie rozumiem, jak to się ma do pytania?
Chris Nevill,
3
Gapiłem się na doskonały pasek przewijania przez 2 minuty bez natychmiastowego odkrycia, jak go użyć, aby ukryć pasek przewijania . Jeśli rozszerzysz swoją odpowiedź na ten temat, jestem pewien, że dostaniesz więcej głosów pozytywnych.
Christiaan Westerbeek
3

Poniższa stylizacja SASS powinna sprawić, że pasek przewijania będzie przezroczysty w większości przeglądarek (Firefox nie jest obsługiwany):

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

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

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

  &::-webkit-scrollbar-thumb {
    background-color: transparent;
  }
}
Alexander
źródło
2

Innym rodzajem hacków jest zrobienie, overflow-y: hiddena następnie ręczne przewinięcie elementu za pomocą czegoś takiego:

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'
    });
  });
}

Na blogu deepmikoto znajduje się świetny artykuł o tym, jak wykrywać i radzić sobie z onmousewheelwydarzeniami . Może ci się to przydać, ale zdecydowanie nie jest to eleganckie rozwiązanie.

Gark Garcia
źródło
2

Chciałem tylko udostępnić połączony fragment kodu do ukrywania paska przewijania, którego używam podczas programowania. Jest to zbiór kilku fragmentów znalezionych w Internecie, który działa dla mnie:

.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 */
}
stamat
źródło
2

Możesz użyć kodu poniżej, aby ukryć pasek przewijania, ale nadal możesz przewijać:

.element::-webkit-scrollbar { 
    width: 0 !important 
}
Tienanhvn
źródło
2

Aby ukryć paski przewijania dla elementów z przepełnioną zawartością, użyj.

.div{

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

}    
Alvin Moyo
źródło
Wsparcie praktycznie nie istnieje, z wyjątkiem FF, o czym wspominałeś, że jest za mało na to, o co prosił PO. Sprawdź caniuse.com/#feat=mdn-css_properties_scrollbar-width
Adrien
@Adrien Cóż, oryginalne pytanie brzmiało, że mają rozwiązanie dla innych przeglądarek. (Ale wydaje się, że Mozilla Firefox i Internet Explorer nie działają w ten sposób) mówi, że właśnie dlatego podałem rozwiązanie Firefox.
Alvin Moyo
Odkryłem, że działało to dobrze w połączeniu z odpowiednikiem: div :: - webkit-scrollbar {display: none; } dla Webkit / Chrome.
Sean Halls
1

Kolejne proste skrzypce robocze :

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

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

Przepełnienie ukryte w kontenerze nadrzędnym i automatyczne przepełnienie w kontenerze podrzędnym. Prosty.

geoyws
źródło
To nie ukrywa paska przewijania, po prostu wypycha go z widoku za pomocą wartości „left”.
robertmiles3
@ robertmiles3 to nie to samo? ukrywasz się i nie widzisz?
Bryan Willis
1
@ robertmiles3 wybrana odpowiedź powyżej robi to samo od prawej. Wygląda na to, że wszystkie rozwiązania są hackerskie, dopóki FIrefox nie zdecyduje się pozwolić CSS ponownie ukryć paski przewijania. blogs.msdn.com/b/kurlak/archive/2013/11/03/…
geoyws
Muszę się zgodzić. Jest to podobne rozwiązanie zaproponowane w przyjętej odpowiedzi. Jeśli to działa, to działa. przegłosowano
JSON
1

To podchwytliwe rozwiązanie działa nawet w starej przeglądarce IE

Jest to obejście [ pionowego paska przewijania ]

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

Po prostu spróbuj: jsfiddle

PYK
źródło
0

Po prostu ustaw szerokość szerokości dziecka na 100%, dopełnianie na 15 pikseli, overflow-xaby przewijać i overflow:hiddendla rodzica i dowolną szerokość.

Działa doskonale we wszystkich głównych przeglądarkach, w tym Internet Explorer i Edge, z wyjątkiem Internet Explorera 8 i niższych.

Sibongiseni Bentley Msomi
źródło