Jak ukryć pasek przewijania w przeglądarce Firefox?

84

Właśnie dowiedziałem się, jak ukryć pasek przewijania w Google Chrome, zrobiłem to z tym kodem:

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

Jedynym problemem jest to, że to nie działa w przeglądarce Firefox. Wypróbowałem wiele sposobów, ale nadal nie działa.

Daan Kleijngeld
źródło
2
nie wydaje się dobrym pomysłem zrobienie tego w ten sposób. użyj przepełnienia css ukrytego w html, body i użyj wrapper div ze 100% wysokością i szerokością.
Abhitalks
Może to być trochę zbyt oczywiste, ale czy próbowałeś -moz- dla przeglądarki Firefox? Zgadzam się jednak z abhitalks, to nie wydaje się być świetnym sposobem na zrobienie tego.
Myles,
jedno rozwiązanie robocze stackoverflow.com/questions/5820304/…
IvanM

Odpowiedzi:

118

Możesz użyć scrollbar-widthreguły. Możesz scrollbar-width: none;ukryć pasek przewijania w przeglądarce Firefox i nadal mieć możliwość swobodnego przewijania.

body {
   scrollbar-width: none;
}
George Flint
źródło
Masz literówkę, ale to powinno być akceptowane rozwiązanie.
shirajg,
7
Działa to w najnowszej przeglądarce, ale pamiętaj, że jest to nadal funkcja eksperymentalna . Pamiętaj też, że ta właściwość powinna być używana z elementem, który tworzy pasek przewijania. Na przykład, jeśli używasz materiału Angular Material md-content, to ciało nie tworzy paska przewijania, a raczej md-contentelement. Dlatego body { scrollbar-width: none; }nie zadziała, ale md-content { scrollbar-width:none; }zadziała.
Sajib Acharya
Dzięki stary, zaoszczędziłeś mi dużo czasu !!
Jan
23

Aby ukryć pasek przewijania w Chrome, Firefox i IE, możesz użyć tego:

.hide-scrollbar
{
    overflow: auto;
    -ms-overflow-style: none; /* IE 11 */
    scrollbar-width: none; /* Firefox 64 */
}
Rowin
źródło
20

Udało mi się ukryć pasek przewijania, ale nadal mogę przewijać kółkiem myszy dzięki temu rozwiązaniu:

html {overflow: -moz-scrollbars-none;}

Pobierz wtyczkę https://github.com/brandonaaron/jquery-mousewheel i dołącz tę funkcję:

jQuery('html,body').bind('mousewheel', function(event) {
    event.preventDefault();
    var scrollTop = this.scrollTop;
    this.scrollTop = (scrollTop + ((event.deltaY * event.deltaFactor) * -1));
    //console.log(event.deltaY, event.deltaFactor, event.originalEvent.deltaMode, event.originalEvent.wheelDelta);
  });
CrazyScientist
źródło
13
Wydaje się, że jest to odpowiednik „przepełnienia: ukryty”; i nie pozwala na przewijanie :-(
bob
U mnie działa - poziomy pasek przewijania jest teraz ukryty w Firefoksie. Dzięki!
Liran H
4
Od wersji Firefox 63 działa to tylko wtedy, gdy w ustawieniach funkcji Firefoksa ustawisz layout.css.overflow.moz-scrollbars.enabledto true, co czyni go nieodpowiednim do użytku produkcyjnego. developer.mozilla.org/en-US/docs/Web/CSS/overflow#Deprecated
Josh
Nie pomogło mi to jednak wstawienie scrollbar-width: none; wewnątrz html.
slodeveloper
8

To jest to, czego potrzebowałem, aby wyłączyć paski przewijania, zachowując przewijanie w Firefoksie, Chrome i Edge w:

          @-moz-document url-prefix() { /* Disable scrollbar Firefox */
            html{
              scrollbar-width: none;
            }
          }
          body {
            margin: 0; /* remove default margin */
            scrollbar-width: none; /* Also needed to disable scrollbar Firefox */
            -ms-overflow-style: none;  /* Disable scrollbar IE 10+ */
            overflow-y: scroll;
          }
          body::-webkit-scrollbar {
            width: 0px;
            background: transparent; /* Disable scrollbar Chrome/Safari/Webkit */
          }
Logan Powell
źródło
5

W przypadku zestawu internetowego użyj następujących elementów:

::-webkit-scrollbar {
    width: 0px;  /* remove scrollbar space */
    background: transparent;  /* optional: just make scrollbar invisible */
}

W przypadku przeglądarki Mozilla Firefox użyj następującego kodu:

@-moz-document url-prefix() {
    html,body{overflow: hidden !important;}
}

a jeśli przewijanie nie działa, dodaj

element {overflow-y: scroll;}

do określonego elementu

romal tandel
źródło
4

To jest coś w rodzaju ogólnego rozwiązania:

<div class="outer">
 <div class="inner">
    Some content...
 </div>
</div>

<style>
 .outer {
 overflow: hidden;
}
 .inner {
 margin-right: -16px;
 overflow-y: scroll;
 overflow-x: hidden;
}
</style>

Pasek przewijania jest ukryty przez nadrzędny element DIV.

Wymaga to użycia overflow: hidden w nadrzędnym div.

Myles
źródło
3
Działa, ale nie jest niezawodny, ponieważ 16 pikseli to tylko zakładana szerokość paska przewijania.
igorpavlov
46
podczas kopiowania podaj kredyty dla prawdziwego autora @chowey. stackoverflow.com/questions/15394065/…
Rexhin
Nie działa na FF 56, gdy wewnętrzna zawartość div jest dłuższa niż szerokość ekranu
Mr Jedi
3
Ta poprawka rozwiązuje problem FF, ale ma gorsze skutki uboczne w innych przeglądarkach (wycinanie tekstu)
Kosmonaft.
Z łatwością widzę, jak używam tego we wszystkich divach, które wymagają przewijania mojej aplikacji ...
Philippe,
3

W nowszych wersjach Firefoksa stare rozwiązania już nie działają, ale z powodzeniem zastosowałem w wersji 66.0.3 scrollbar-colorwłaściwość, którą możesz ustawić transparent transparenti która sprawi, że pasek przewijania w Firefoksie na pulpicie będzie przynajmniej niewidoczny (nadal ma miejsce w widoczny obszar i na urządzeniach mobilnych nie działa, ale pasek przewijania jest cienką linią umieszczoną nad treścią po prawej stronie).

overflow-y: auto; //or hidden if you don't want horizontal scrolling
overflow-y: auto;
scrollbar-color: transparent transparent;
Chris Aelbrecht
źródło
Jak to się robi w FF70 +? scrollbar-width: none;już nie działa. Muszę ukryć pasek przewijania, a nie uczynić go przezroczystym.
gen b.
1
::-webkit-scrollbar {
  display: none;
}

Nie zadziała w Firefoksie, ponieważ Firefox zrezygnował z obsługi ukrytych pasków przewijania z funkcjonalnością (możesz używać overflow: -moz-scrollbars-none;w starszych wersjach).

Manmeet Kaur
źródło
1

Na wszelki wypadek, jeśli ktoś szuka hackowania, aby w jakiś sposób uczynić pasek przewijania niewidocznym w przeglądarce Firefox (79.0).

Oto rozwiązanie, które z powodzeniem działa w przeglądarce Chrome, IE, Safari i sprawia, że ​​pasek przewijania jest przezroczysty w przeglądarce Firefox. Żadne z powyższych nie działało w przypadku przeglądarki Firefox (79.0) w prawdziwym ukrywaniu paska przewijania.

Proszę, jeśli ktoś znajdzie sposób na zrobienie tego bez zmiany koloru, będzie to bardzo pomocne. Komentarz Pls poniżej.

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

.scrollhost ::-moz-scrollbar {
  display: none;
 
}
 
.scrollhost {
  overflow: auto;
  -ms-overflow-style: none;
  scrollbar-color: transparent transparent; /*just hides the scrollbar for firefox */
}
Aditya Patnaik
źródło
0

Spróbuj użyć tego:

overflow-y: -moz-hidden-unscrollable;

peeter
źródło
2
Ukrywa się, scrollbarale zatrzymuje przewijanie. jaka jest różnica między overflow-y: -moz-hidden-unscrollable;i overflow: hidden. Właściwie nic, więc nie jest to właściwa odpowiedź. ale daję ci głos za. dzięki.
AmerllicA
2
różnica polega na tym, że pierwszy ukrywa go tylko w
Firefoksie
Głosowałem na ciebie, ale to dla mnie takie dziwne, dlaczego tak jest -2? twoja odpowiedź jest prawidłowa
AmerllicA
Pytanie brzmi, jak ukryć paski przewijania, ale nadal można pozwolić użytkownikowi przewijać w razie potrzeby, gdy zawartość się przepełnia, a nie całkowicie wyłączyć przewijanie. powodem tego jest to, że paski przewijania FF są brzydkie i czasami pojawiają się, nawet jeśli zawartość nie jest przepełniona. Wszystkie inne przeglądarki oferują do tego proste i eleganckie rozwiązanie CSS - może muszę powiedzieć, nawet IE!
Philippe
0

W niektórych szczególnych przypadkach (element znajduje się po prawej stronie ekranu lub jego przepełnienie nadrzędne jest ukryte) może to być rozwiązanie:

@-moz-document url-prefix() {
  .element {
    margin-right: -15px;
  }
}
gazdagergo
źródło
0

Próbowałem wszystkiego i to, co działało najlepiej w moim rozwiązaniu, to zawsze wyświetlać pionowy pasek przewijania, a następnie dodać trochę ujemnego marginesu, aby go ukryć.

To działało dla IE11, FF60.9 i Chrome 80

body {
  -ms-overflow-style: none; /** IE11 */
  overflow-y: scroll;
  overflow-x: hidden;
  margin-right: -20px;
}
John Carroll
źródło
0

Mam to działające dla mnie w ReactJS używając create-react-app, umieszczając to w moim App.css:

@-moz-document url-prefix() {
  html,
  body {
    scrollbar-width: none;
  }
}

Również bodyelement maoverflow: auto

Dante Souza e Souza
źródło