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.

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 .


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

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;


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

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


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>


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.


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

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

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


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 .


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>

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.


6

To działa dla mnie:

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

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

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

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

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

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>


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

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

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

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/


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

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.


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

2

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

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

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

}    

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.


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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.