Nasconde la barra di scorrimento, ma è comunque possibile scorrere


1129

Voglio poter scorrere l'intera pagina, ma senza che la barra di scorrimento venga mostrata.

In Google Chrome è:

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

Ma Mozilla Firefox e Internet Explorer non sembrano funzionare così.

Ho anche provato questo nei CSS:

overflow: hidden;

Ciò nasconde la barra di scorrimento, ma non riesco più a scorrere.

C'è un modo in cui posso rimuovere la barra di scorrimento mentre riesco ancora a scorrere l'intera pagina?

Con solo CSS o HTML, per favore.

Risposte:


788

Solo un test che sta funzionando bene.

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

Fiddle di lavoro

JavaScript:

Poiché la larghezza della barra di scorrimento differisce in diversi browser, è meglio gestirla con JavaScript. In tal caso Element.offsetWidth - Element.clientWidth, verrà visualizzata la larghezza esatta della barra di scorrimento.

JavaScript Working Fiddle

O

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

Fiddle di lavoro

JavaScript Working Fiddle

Informazione:

Sulla base di questa risposta, ho creato un semplice plugin di scorrimento .


16
Nel tuo ultimo "violino di lavoro" ne ho visti troppi, !importantquindi li ho rimossi tutti: jsfiddle.net/5GCsJ/954
Roko C. Buljan,

2
Questa soluzione non funziona quando la larghezza del contenuto è impostata su auto. quando si scorre completamente verso destra, parte del contenuto non è ancora visibile. Perché? Qualche soluzione? Verifica qui il problema: jsfiddle.net/50fam5g9/7 Nota: la larghezza del contenuto non può essere nota in anticipo nel mio caso, ecco perché deve essere impostato su auto.
Sprout Coder

35
Questo approccio non coprirà tutti i browser e sarà molto specifico per la versione del browser con cui stai lavorando durante lo sviluppo.
Itsik Avidan,

2
E le barre di scorrimento orizzontali? Come puoi nasconderli?
www139

11
Perché complicare e calcolare la larghezza della barra di scorrimento? Basta impostare box-sizing: border-box; width: calc(100% + 50px);e lo stesso valore per l'imbottitura. Nessun browser ha 50px larghezza / altezza della barra di scorrimento, quindi dovrebbe semplicemente coprirli tutti ...
Robert Koritnik,

362

È facile in WebKit, con uno stile opzionale:

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
provato questo in cordovaapp, ha funzionato bene. dovuto applicare overflow:scrollall'elemento.
Kishor Pawar,

41
Non funziona su Firefox, abbastanza ovvio in quanto indica semplicemente il webkit. Grazie :)
Zohair il

3
funziona eccellente nelle app Electron come previsto poiché sono di cromo. +1 grazie: D
rococò

Da iOS8, questo non funziona se usato con-webkit-overflow-scrolling: touch
aleclarson

4
funziona con Chrome. ma non funziona con Mozilla Firefox.
Romand Tandel,

299

Questo funziona per me con semplici proprietà CSS:

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

Per le versioni precedenti di Firefox, utilizzare: overflow: -moz-scrollbars-none;


13
Per me, overflow: -moz-scrollbars-nonenasconde le barre di scorrimento in Firebox ma disabilita anche lo scorrimento. Potete fornire una demo in cui questo funziona per voi?
chipit24,

1
Sfortunatamente la -moz-scrollbars-noneproprietà viene cancellata per le versioni più recenti di Firefox: developer.mozilla.org/en-US/docs/Web/CSS/overflow
Hristo Eftimov

2
Da iOS8, questo non funziona se usato con-webkit-overflow-scrolling: touch
aleclarson

3
Per Firefox obsoleto -moz-scrollbars-nonepuoi usare @-moz-document url-prefix() { .container { overflow: hidden; } }. Vedi stackoverflow.com/questions/952861/… .
Martin Ždila,

1
Ho aggiornato la mia risposta con l'ultimo supporto per Firefox :)
Hristo Eftimov,

292

AGGIORNARE:

Firefox ora supporta le barre di scorrimento nascoste con CSS, quindi ora sono coperti tutti i principali browser (Chrome, Firefox, Internet Explorer, Safari, ecc.).

È sufficiente applicare il seguente CSS all'elemento da cui si desidera rimuovere le barre di scorrimento:

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

Questa è la soluzione cross browser meno complicata di cui sono attualmente a conoscenza. Guarda la demo.


RISPOSTA ORIGINALE:

Ecco un altro modo che non è stato ancora menzionato. È davvero semplice e coinvolge solo due div e CSS. Non è necessario JavaScript o CSS proprietario e funziona in tutti i browser. Non richiede nemmeno l'impostazione esplicita della larghezza del contenitore, rendendolo così fluido.

Questo metodo utilizza un margine negativo per spostare la barra di scorrimento fuori dal genitore e quindi la stessa quantità di riempimento per riportare il contenuto nella posizione originale. La tecnica funziona con scorrimento verticale, orizzontale e bidirezionale.

Demos:

Codice di esempio per la versione verticale:

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
So che questa è una nuova risposta a una vecchia domanda, ma questa dovrebbe essere la risposta accettata ora. Roba buona amico.
Vettore

3
Questa è assolutamente la risposta migliore, senza dubbio. Ora, come si modifica per nascondere le barre di scorrimento orizzontali?
CeeMoney,

1
@CeeMoney Ho aggiunto una demo orizzontale. Per elementi di contenuto a larghezza fissa come le immagini dovrebbe funzionare, ma per il testo è necessario disabilitare il wrapping.
Richrd,

1
@Richrd - grazie mille per la demo - funziona perfettamente. Non so perché lo rendiamo così difficile, ma è così semplice che mi sento sciocco per non averlo fatto prima.
CeeMoney,

4
Grazie @Richrd! Sono così felice di aver cercato la tua risposta. Se SO avesse una "risposta accettata dalla forza", la utilizzerei sicuramente adesso.
Martin D,

78

Uso:

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

Questo è un trucco per sovrapporre in qualche modo la barra di scorrimento con un div sovrapposto che non ha barre di scorrimento:

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

Questo è solo per WebKit browser ... O potresti usare contenuti CSS specifici del browser (se ce ne sono in futuro). Ogni browser potrebbe avere una proprietà diversa e specifica per le rispettive barre.

Per uso Microsoft Edge: -ms-overflow-style: -ms-autohiding-scrollbar;o -ms-overflow-style: none;come per MSDN .

Non esiste un equivalente per Firefox. Sebbene ci sia un plugin jQuery per raggiungere questo obiettivo, http://manos.malihu.gr/tuts/jquery_custom_scrollbar.html


ictacademie.info/oussamaelbachiri questo sito @Oussama Dobby utilizza media = 'screen' e quindi la proprietà ':: - webkit-scrollbar' per css
Arpit Singh,

E quali sono le proprietà specifiche dei CSS?
Oussama el Bachiri,

un'alternativa hacky o jquery è un'alternativa
Arpit Singh,

La tua prima soluzione mi dà questo problema s24.postimg.org/idul8zx9w/Naamloos.jpg E cosa intendi con hacky layout @ArpitSingh
Oussama el Bachiri

4
Quanto segue mi ha permesso di abilitare lo scorrimento nativo in Cordova con jQuery Mobile 1.4 su iOS7 e iOS8 // CSS ::-webkit-scrollbar { display: none; } .ui-content { -webkit-overflow-scrolling: touch; } // jQuery Mobile onMobileInit () $.mobile.touchOverflowEnabled = true;
Ryan Williams

33

Questa risposta non include il codice, quindi ecco la soluzione dalla pagina :

Secondo la pagina questo approccio non ha bisogno di conoscere in anticipo la larghezza della barra di scorrimento per funzionare e la soluzione funziona anche per tutti i browser, e può essere vista qui .

La cosa buona è che non sei costretto a usare le imbottiture o le differenze di larghezza per nascondere la barra di scorrimento.

Anche questo è sicuro per lo zoom. Le soluzioni di imbottitura / larghezza mostrano la barra di scorrimento quando vengono ingrandite al minimo.

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


Questo non funzionerà per tutti i browser ... Solo i browser webkit. Stai utilizzando un selettore specifico per il webkit::-webkit-scrollbar {}
prefisso

L'ho provato in tutti i nuovi browser prima di rispondere alla domanda. Anche FF. Ha avuto alcuni cambiamenti in FF?
Timo Kähkönen,

Ho aggiornato la risposta. Sembra che l'aggiunta lo padding-right: 150px;risolva. Testato in FF, Chrome, Safari ed Edge. Funziona anche con livelli di zoom bassi a causa dell'ampia spaziatura verso destra.
Timo Kähkönen,

2
Supporto Edge, IE 11, IE10 (forse anche inferiore) html { -ms-overflow-style: none;}. In questi browser non è necessario utilizzare padding-hack.
Timo Kähkönen,

Ho dovuto usare la risposta di @ Timo e overflow-y: scrollottenere il comportamento di scorrimento ma nascosto (proprio come Chrome) per farlo funzionare su Edge23.
jojo,

21

Basta usare le seguenti tre righe e il problema sarà risolto:

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

Dove liaddshapes è il nome del div dove sta arrivando lo scroll.


Mostrami il tuo problema con il violino
Innodel,

1
Facile e utile, grazie! Ho usato {display: none} invece di {width: 0;} e ho anche lavorato
Santi Nunez,

2
Non funziona su MS Edge o Firefox.
Dpedrinha,

18

Questo funziona per me su più browser. Tuttavia, ciò non nasconde barre di scorrimento native nei browser mobili.

In SCSS

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

Nel CSS

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

Cosa significano blocchi nidificati ( {})? Come deve essere interpretato? E il &? Forse elaborato nella tua risposta?
Peter Mortensen,

È una cosa SASS (apparentemente MENO): css-tricks.com/the-sass-ampersand
vipatron

@PeterMortensen Ho appena visto il tuo commento ora, &::-webkit-scrollbardiventa .hide-native-scrollbar::-webkit-scrollbar { }in CSS
Murhaf Sousli

basta fare { width: 0; height: 0;} per :: - webkit-scrollbar anziché display: noneper iOS.
adriendenat,

In FF71 questo blocca tutto lo scorrimento.
gene b.

11

Quanto segue funzionava per me su Microsoft, Chrome e Mozilla per un elemento div specifico:

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

si noti che scrollbar-width(solo FF) è contrassegnato come "sperimentale"
cimak

Sì @cimak, ma su FF puoi nasconderlo senza alcun problema, quindi è davvero usato solo per 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;
}

Applicare i CSS di conseguenza.

Controlla qui (testato in Internet Explorer e Firefox).


8

A partire dall'11 dicembre 2018 (Firefox 64 e versioni successive), la risposta a questa domanda è davvero molto semplice poiché Firefox 64+ implementa ora le specifiche CSS Styling Styling .

Usa il seguente CSS:

scrollbar-width: none;

Link alla nota di rilascio di Firefox 64 qui .


3
È molto bello saperlo! Sembra che i browser stiano davvero facendo progressi, ahah!
Oussama el Bachiri,

7

Uso:

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>

Non sono sicuro del motivo per cui questo è stato sottoposto a downgrade, ma l'ho appena votato perché va nella giusta direzione, le altre soluzioni non hanno funzionato bene nel mio caso. overflow-x: nascosto; + overflow-y: scroll; è ciò che ha funzionato, insieme alla larghezza> 100% (110% nel mio caso ha funzionato bene).
Angelov,

1
è la stessa cosa del sollution più votato: cercare di nascondere la barra di scorrimento. questo non è l'ideale perché varia con il browser
mwm

6

Uso

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
}

Chiamare queste funzioni per qualsiasi punto che si desidera caricare o scaricare o ricaricare le barre di scorrimento. È ancora scorrevole in Chrome come l'ho testato in Chrome, ma non sono sicuro degli altri browser.


6

Questo funziona per me:

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

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

5

Sui browser moderni puoi usare 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;
});

Questa è la risposta che stavo cercando. Grazie. Ho usato overflow: hiddene questo codice, affinché mat-card-content(nell'angolare 5, ovviamente) sia scorrevole e questi hanno risolto il mio problema. Nota: l'ho usato e.deltaYcome mio stepe ha funzionato come lo scorrimento normale, quindi penso che per lo scorrimento normale ma con la barra di scorrimento nascosta, questa è la migliore corrispondenza.
imans77,

1
la pagina collegata qui avverte che questo approccio non è appropriato?
jnnnnn,

5

Il mio problema: non desidero alcuno stile nel mio contenuto HTML. Voglio che il mio corpo scorra direttamente senza alcuna barra di scorrimento e solo uno scorrimento verticale, lavorando con le griglie CSS per qualsiasi dimensione dello schermo.

Il valore del ridimensionamento delle scatole influisce sulle imbottiture o sulle soluzioni a margine, funzionano con il ridimensionamento delle scatole: content-box .

Ho ancora bisogno della direttiva "-moz-scrollbars-none" e, come gdoron e Mr_Green, ho dovuto nascondere la barra di scorrimento. Ho provato -moz-transforme -moz-padding-start, per avere un impatto solo su Firefox, ma c'erano effetti collaterali che richiedevano troppo lavoro.

Questa soluzione funziona per il contenuto del corpo HTML con stile "display: grid" ed è reattiva.

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

L'aggiunta di un padding a un interno div, come nella risposta attualmente accettata, non funzionerà se per qualche motivo si desidera utilizzare box-model: border-box.

Ciò che funziona in entrambi i casi è aumentare la larghezza dell'interno dival 100% più la larghezza della barra di scorrimento (supponendooverflow: hidden sul div esterno).

Ad esempio, nei CSS:

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

In JavaScript, browser incrociato:

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

4

Ecco come lo faccio per lo scorrimento orizzontale; solo CSS e funziona bene con framework come Bootstrap / col- *. Ha solo bisogno di due extra dive il genitore con un widthomax-width set:

È possibile selezionare il testo per farlo scorrere o scorrere con le dita se si dispone di un touchscreen.

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

Versione breve per persone pigre:

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


Grazie, ho provato, funziona benissimo. Una cosa è che è meglio cambiare margin-bottomper essere padding-bottomma con lo stesso valore. Ciò non consumerà spazio sotto per l'elemento in basso. Previene la sovrapposizione.
haxpor,

@haxpor margin-bottomÈ negativo, penso che non possa essere cambiato in a padding-bottom, che non può gestire valori negativi
Jean

4

Il seguente stile SASS dovrebbe rendere la barra di scorrimento trasparente sulla maggior parte dei browser (Firefox non è supportato):

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

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

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

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

3

Mi capita di provare le soluzioni di cui sopra nel mio progetto e per qualche motivo non sono riuscito a nascondere la barra di scorrimento a causa del posizionamento div. Quindi, ho deciso di nascondere la barra di scorrimento introducendo un div che la copre superficialmente. L'esempio seguente è per una barra di scorrimento orizzontale:

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

Il CSS corrispondente è il seguente:

#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

Questo sarà al corpo:

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

E questo è il CSS:

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

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

3

Questa è una soluzione divitis-esque che tuttavia dovrebbe funzionare per tutti i browser ...

Il markup è il seguente e deve essere all'interno di qualcosa con posizionamento relativo (e la sua larghezza deve essere impostata, ad esempio 400 pixel):

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

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

Il 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

Il perfect-scrollbarplugin sembra essere la strada da percorrere, vedi: https://github.com/noraesae/perfect-scrollbar

È una soluzione ben documentata e completa basata su JavaScript per il problema delle barre di scorrimento.

Pagina di dimostrazione: http://noraesae.github.io/perfect-scrollbar/


2
Non riesco a vedere come questo si collega alla domanda?
Chris Nevill,

3
Ho fissato la barra di scorrimento perfetta per 2 minuti senza una rivelazione immediata di come usarla per nascondere la barra di scorrimento . Se espandessi la tua risposta su quell'argomento, sono sicuro che otterrai più voti.
Christiaan Westerbeek

3

È possibile utilizzare il codice seguente per nascondere la barra di scorrimento, ma pur essendo in grado di scorrere:

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

3

Per nascondere le barre di scorrimento per gli elementi con contenuto traboccante, utilizzare.

.div{

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

}    

Il supporto è praticamente inesistente ad eccezione di FF, come hai menzionato, è troppo poco per ciò che l'OP ha richiesto. Controlla caniuse.com/#feat=mdn-css_properties_scrollbar-width
Adrien

@Adrien Bene, la domanda originale affermava che hanno una soluzione per altri browser. (Ma Mozilla Firefox e Internet Explorer non sembrano funzionare in questo modo), dice, questa è la ragione per cui ho dato la soluzione Firefox.
Alvin Moyo,

Ho trovato che ha funzionato bene se combinato con l'equivalente: div :: - webkit-scrollbar {display: none; } per Webkit / Chrome.
Sean Halls,

2

Un altro tipo di approccio hacky è quello di fare overflow-y: hiddene quindi scorrere manualmente l'elemento con qualcosa del genere:

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

C'è un ottimo articolo su come rilevare e gestire gli onmousewheeleventi nel blog di deepmikoto . Questo potrebbe funzionare per te, ma non è sicuramente una soluzione elegante.


2

Volevo solo condividere uno snippet combinato per nascondere la barra di scorrimento che utilizzo durante lo sviluppo. È una raccolta di diversi frammenti trovati su Internet che funziona per me:

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

1

Un altro semplice violino funzionante :

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

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

Overflow nascosto nel contenitore padre e overflow automatico nel contenitore figlio. Semplice.


Questo non nasconde la barra di scorrimento, la spinge semplicemente fuori dalla vista con il valore "sinistra".
robertmiles3

@ robertmiles3 non è la stessa cosa? nascondersi e non poter vedere?
Bryan Willis,

1
@ robertmiles3 la risposta selezionata sopra fa la stessa cosa da destra. Sembra che tutte le soluzioni siano confuse fino a quando FIrefox non decide di consentire ai CSS di nascondere nuovamente le barre di scorrimento. blogs.msdn.com/b/kurlak/archive/2013/11/03/…
geoyws

Devo essere d'accordo Questa è una soluzione simile proposta dalla risposta accettata. Se funziona, funziona. votato
JSON il

1

Questa soluzione complicata funziona anche sul vecchio browser Web IE

È una soluzione alternativa alla [ barra di scorrimento verticale ]

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

Basta provarlo: jsfiddle


0

Basta impostare la larghezza della larghezza del bambino al 100%, imbottitura a 15 pixel, overflow-xper scorrere eoverflow:hidden per il genitore e la larghezza desiderata.

Funziona perfettamente su tutti i principali browser, inclusi Internet Explorer e Edge, ad eccezione di Internet Explorer 8 e versioni precedenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.