Kaydırma çubuğunu gizle, ancak yine de kaydırma yapabilir


1128

Kaydırma çubuğu gösterilmeden tüm sayfa boyunca kaydırma yapabilmek istiyorum.

Google Chrome'da:

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

Ancak Mozilla Firefox ve Internet Explorer böyle çalışmıyor.

Ayrıca bu CSS denedim:

overflow: hidden;

Bu kaydırma çubuğunu gizler, ancak artık kaydırma yapamıyorum.

Tüm sayfayı kaydırmaya devam ederken kaydırma çubuğunu kaldırmamın bir yolu var mı?

Sadece CSS veya HTML ile lütfen.

Yanıtlar:


787

Sadece iyi çalışan bir test.

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

Çalışma keman

JavaScript:

Kaydırma çubuğu genişliği farklı tarayıcılarda farklılık gösterdiğinden, JavaScript ile işlemek daha iyidir. Bunu yaparsanız Element.offsetWidth - Element.clientWidth, tam kaydırma çubuğu genişliği görünecektir.

JavaScript Çalışma Kemanı

Veya

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

Çalışma keman

JavaScript Çalışma Kemanı

Bilgi:

Bu cevaba dayanarak, basit bir kaydırma eklentisi oluşturdum .


16
Son "çalışan kemanda" çok fazla şey gördüm, !importantbu yüzden hepsini kaldırdım: jsfiddle.net/5GCsJ/954
Roko C. Buljan

2
İçeriğin genişliği otomatik olarak ayarlandığında bu çözüm çalışmaz. tamamen sağa kaydırdığınızda, içeriğin bir kısmı hala görünmez. Neden? Herhangi bir çözüm var mı? Sorunu buradan kontrol edin: jsfiddle.net/50fam5g9/7 Not: İçeriğin genişliği önceden benim durumumda bilinemez, bu yüzden otomatik olarak ayarlanması gerekir.
Filiz Kodlayıcı

35
Bu yaklaşım tüm tarayıcıları kapsamaz ve geliştirme sırasında üzerinde çalıştığınız tarayıcının sürümüne çok özgü olacaktır.
Itsik Avidan

2
Yatay kaydırma çubukları ne olacak? Bunları nasıl saklayabilirsin?
www139

11
Kaydırma çubuğu genişliğini neden karmaşıklaştırmalı ve hesaplamalıyım? box-sizing: border-box; width: calc(100% + 50px);Dolgu için sadece ayarlayın ve aynı değer. Hiçbir tarayıcının 50 piksellik kaydırma çubuğu genişliği / yüksekliği yoktur, bu yüzden hepsini kapsamalıdır ...
Robert Koritnik

361

WebKit'te isteğe bağlı stil ile kolaydır:

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
Bu denenmiş cordovauygulaması çalıştı cezası. overflow:scrollelemente başvurmak zorunda kaldı .
Kishor Pawar

41
Firefox üzerinde çalışmıyor, Bu tamamen webkit bildirdiği için oldukça açık. Teşekkürler :)
Zohair

3
Electron uygulamalarında krom oldukları için beklendiği gibi mükemmel çalışıyor. +1 teşekkürler: D
rococo

-webkit-overflow-scrolling: touch
İOS8'den

4
krom ile çalışır. ancak mozilla firefox ile çalışmaz.
romal tandel

299

Bu benim için basit CSS özellikleri ile çalışır:

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

Firefox'un eski sürümleri için şunu kullanın: overflow: -moz-scrollbars-none;


13
Benim overflow: -moz-scrollbars-noneiçin Firebox'taki kaydırma çubuklarını gizler, ancak kaydırmayı da devre dışı bırakır. Bunun sizin için işe yaradığı bir demo sunabilir misiniz?
chipit24

1
Ne yazık ki -moz-scrollbars-nonetesis en yeni Firefox sürümleri için silinmiştir: developer.mozilla.org/en-US/docs/Web/CSS/overflow
Hristo Eftimov 14:01 '

2
-webkit-overflow-scrolling: touch
İOS8'den

3
Eski Firefox -moz-scrollbars-noneiçin kullanabilirsiniz @-moz-document url-prefix() { .container { overflow: hidden; } }. Bkz. Stackoverflow.com/questions/952861/… .
Martin Ždila

1
Cevabımı Firefox için en son destekle güncelledim :)
Hristo Eftimov

292

GÜNCELLEME:

Firefox artık CSS ile kaydırma çubuklarının gizlenmesini desteklediğinden, tüm büyük tarayıcılar artık kapsanmaktadır (Chrome, Firefox, Internet Explorer, Safari vb.).

Kaydırma çubuklarını kaldırmak istediğiniz öğeye aşağıdaki CSS'yi uygulamanız yeterlidir:

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

Bu, şu anda farkında olduğum en az hacky çapraz tarayıcı çözümüdür. Demoyu inceleyin.


ORİJİNAL CEVAP:

İşte henüz bahsedilmeyen başka bir yol. Gerçekten basittir ve sadece iki div ve CSS içerir. JavaScript veya tescilli CSS gerekmez ve tüm tarayıcılarda çalışır. Kabın genişliğinin de açıkça ayarlanmasını gerektirmez, böylece kabı akışkan hale getirir.

Bu yöntem, kaydırma çubuğunu üst öğeden çıkarmak için negatif bir kenar boşluğu ve ardından içeriği orijinal konumuna geri itmek için aynı miktarda dolgu kullanır. Teknik dikey, yatay ve iki yönlü kaydırma için çalışır.

Demos:

Dikey sürüm için örnek kod:

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
Bunun eski bir soruya yeni bir cevap olduğunu biliyorum, ama şimdi kabul edilen cevap bu olmalı. İyi şeyler dostum.
vektör

3
Bu kesinlikle en iyi cevap, eller aşağı. Peki, yatay kaydırma çubuklarını gizlemek için bunu nasıl değiştirebiliriz?
CeeMoney

1
@CeeMoney Yatay bir demo ekledim. Görüntüler gibi sabit genişlikli içerik öğeleri için sadece çalışması gerekir, ancak metin için kaydırmayı devre dışı bırakmanız gerekir.
Richrd

1
@Richrd - demo için bir ton teşekkürler - mükemmel çalışıyor. Neden hepimizi bu kadar zorlaştırdığımızı bilmiyorum ama bu çok basit, bunu daha önce yapmadığım için aptal hissediyorum.
CeeMoney

4
Teşekkürler @Richrd! Cevabınıza geldiğim için çok mutluyum. SO bazı "zorla kabul edilmiş cevap" olurdu, ben kesinlikle şimdi kullanmak istiyorum.
Martin D

78

kullanın:

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

Bu, kaydırma çubuğunu, kaydırma çubukları olmayan çakışan bir div ile bir miktar üst üste bindirmek için bir hiledir:

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

Bu yalnızca WebKit tarayıcıları içindir ... Veya tarayıcıya özgü CSS içeriği kullanabilirsiniz (gelecekte varsa). Her tarayıcının ilgili çubukları için farklı ve belirli bir özelliği olabilir.

Microsoft Kenar kullanım için: -ms-overflow-style: -ms-autohiding-scrollbar;ya -ms-overflow-style: none;kadar MSDN başına .

Firefox için eşdeğeri yoktur. Bunu başarmak için bir jQuery eklentisi olmasına rağmen, http://manos.malihu.gr/tuts/jquery_custom_scrollbar.html


ictacademie.info/oussamaelbachiri bu site @Oussama Dobby css için medya = 'ekran' ve sonra ':: - webkit-scrollbar' özelliğini kullanıyor
Arpit Singh

Ve tho css özellikleri nelerdir?
Oussama el Bachiri

ya hacky bir düzen ya da jquery alternatiftir
Arpit Singh

İlk çözümünüz bana bu sorunu veriyor s24.postimg.org/idul8zx9w/Naamloos.jpg Ve hacky düzeniyle ne demek istiyorsun @ArpitSingh
Oussama el Bachiri 21:13

4
Aşağıdakiler, iOS7 ve iOS8 // CSS ::-webkit-scrollbar { display: none; } .ui-content { -webkit-overflow-scrolling: touch; } // jQuery Mobile onMobileInit () üzerinde jQuery Mobile 1.4 ile Cordova'da yerel kaydırmayı etkinleştirmeme izin verdi $.mobile.touchOverflowEnabled = true;
Ryan Williams

33

Bu cevap kodu içermediğinden, sayfadaki çözüm şöyledir :

Sayfaya göre, bu yaklaşımın çalışmak için kaydırma çubuğunun genişliğini önceden bilmesine gerek yoktur ve çözüm tüm tarayıcılar için de çalışır ve burada görülebilir .

İyi olan şey, kaydırma çubuğunu gizlemek için dolgu veya genişlik farklarını kullanmaya zorlanmamanızdır.

Bu aynı zamanda zum için de güvenlidir. Doldurma / genişlik çözümleri, minimuma yakınlaştırıldığında kaydırma çubuğunu gösterir.

Firefox düzeltmesi: 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>


Bu tüm tarayıcılar için işe yaramaz ... Sadece webkit tarayıcıları. Webkit'e özgü bir seçici kullanıyorsunuz::-webkit-scrollbar {}
Önek

Soruyu cevaplamadan önce tüm yeni tarayıcılarda test ettim. Ayrıca FF. FF'de bazı değişiklikler oldu mu?
Timo Kähkönen

Cevabı güncelledim. Görünüşe göre ekleme işlemi padding-right: 150px;düzeltiyor. FF, Chrome, Safari ve Edge'de test edildi. Sağa doğru büyük dolgu sayesinde düşük zoom seviyelerinde de çalışır.
Timo Kähkönen

2
Edge, IE 11, IE10 (belki de daha düşük) desteği html { -ms-overflow-style: none;}. Bu tarayıcılarda dolgu-hack kullanmaya gerek yoktur.
Timo Kähkönen

@ overflow-y: scrollTimo'nun cevabını kullanmak ve kaydırma davranışı elde etmek zorunda kaldım ama Edge23'te çalışması için gizli (tıpkı Chrome gibi).
Jojo

21

Sadece aşağıdaki üç satırı kullanın ve probleminiz çözülecektir:

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

Liaddshapes, kaydırmanın geldiği div'ın adıdır.


Bana
kemanda

1
Kolay ve kullanışlı, teşekkürler! {Width: 0;} yerine {display: none} kullandım ve ayrıca çalıştım
Santi Nunez

2
MS Edge veya Firefox üzerinde çalışmaz.
Dpedrinha

18

Bu benim için çapraz tarayıcıda çalışır. Ancak, bu, mobil tarayıcılarda yerel kaydırma çubuklarını gizlemez.

In SCSS

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

In CSS

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

İç içe bloklar ( {}) ne anlama geliyor? Nasıl yorumlanacak? Ve &? Belki cevabınızı ayrıntılı olarak açıklarsınız?
Peter Mortensen

Bu SASS bir şey (görünüşe göre, DAHA AZ): css-tricks.com/the-sass-ampersand
vipatron

@PeterMortensen Sadece şimdi yorum gördüm, &::-webkit-scrollbarolur .hide-native-scrollbar::-webkit-scrollbar { }CSS'deki
Murhaf Sousli

sadece iOS { width: 0; height: 0;}yerine :: - webkit-scrollbar display: noneiçin yapın.
adriendenat

FF71'de bu tüm kaydırmayı engeller.
gen b.

11

Aşağıdakiler benim için belirli bir div öğesi için Microsoft, Chrome ve Mozilla'da çalışıyordu:

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

not scrollbar-width(sadece FF) "deneysel" olarak işaretlenmiştir
cimak

Evet @ cimak, ancak FF'de herhangi bir sorun olmadan gizleyebilirsiniz, bu yüzden sadece Chrome için kullanılır.
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;
}

CSS'yi buna göre uygulayın.

Buradan kontrol edin (Internet Explorer ve Firefox'ta test edilmiştir).



7

kullanın:

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>

Bunun neden reddedildiğinden emin değilim, ancak doğru yönde ilerlediği için onu iptal ettim, diğer çözümler benim durumumda gerçekten iyi çalışmadı. taşma-x: gizli; + taşma-y: kaydırma; % 100 genişlik ile birlikte hile yaptı (benim durumumda% 110 güzel çalıştı).
dAngelov

1
en çok dile getirilen çözümle aynı şeydir: kaydırma çubuğunu gizlemeye çalışmak. bu ideal değildir çünkü tarayıcıya göre değişir
mwm

6

kullanım

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
}

Kaydırma çubuklarını yüklemek veya boşaltmak veya yeniden yüklemek istediğiniz herhangi bir nokta için bu işlevleri çağırın. Chrome'da test ettiğim için hala Chrome'da kaydırılabilir, ancak diğer tarayıcılardan emin değilim.


6

Bu benim için çalışıyor:

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

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

5

Modern tarayıcılarda şunları kullanabilirsiniz 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;
});

Aradığım cevap buydu. Teşekkürler. Ben kullandım overflow: hiddenve bu kod, mat-card-content(açısal 5, tabii ki) kaydırılabilir olması ve bunlar benim sorunum çözüldü. Not: Kullandığım e.deltaYne biz olarak stepve normalde kaydırma ancak gizli kaydırma çubuğu ile, bu en iyi eşleşme olup düşünüyorum bu yüzden, normal kaydırma gibi çalıştı.
imans77

1
bağlantı verilen sayfa bu yaklaşımın uygun olmadığı konusunda uyarıda bulunuyor mu?
jnnnnn

5

Benim sorunum: HTML içeriğimde herhangi bir stil istemiyorum. Vücudumun herhangi bir ekran çubuğu için CSS ızgaralarıyla çalışan herhangi bir kaydırma çubuğu olmadan ve yalnızca dikey bir kaydırma olmadan doğrudan kaydırılabilir olmasını istiyorum .

Kutu boyutlandırma değer darbe dolgu veya marj çözümleri, bunlar ile çalışır içerik-box: box-boyutlandırma .

Hala "-moz-scrollbars-none" yönergesine ihtiyacım var ve gdoron ve Mr_Green gibi kaydırma çubuğunu gizlemek zorunda kaldım. Denedim -moz-transformve -moz-padding-startdarbeye karşı sadece Firefox, ama çok fazla çalışma ihtiyacı duyarlı yan etkileri vardı.

Bu çözüm, "display: grid" stiline sahip HTML gövde içeriği için çalışır ve yanıt verir.

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

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

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

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

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

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

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

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

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

4

divŞu anda kabul edilen cevapta olduğu gibi bir iç kısma dolgu eklemek , herhangi bir nedenden dolayı kullanmak istiyorsanız işe yaramaz box-model: border-box.

Her iki durumda da işe yarayan şey, iç genişliğini div% 100 artı kaydırma çubuğunun genişliğine ( overflow: hiddendış bölmede varsayarak ) arttırmaktır .

Örneğin, CSS'de:

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

JavaScript'te çapraz tarayıcı:

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

4

Yatay kaydırma için böyle yapıyorum; sadece CSS ve Bootstrap / col- * gibi çerçevelerle iyi çalışır. Yalnızca iki ekstra divs ve bir widthveya max-widthsetli üst öğeye ihtiyaç duyar :

Metni kaydırmak için seçebilir veya dokunmatik ekranınız varsa parmaklarınızla kaydırabilirsiniz.

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

Tembel insanlar için kısa versiyon:

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


Teşekkürler, denedim, harika çalışıyor. Bir şey değiştirmek daha iyidir olduğunu margin-bottomolmayı padding-bottomama aynı değere sahip. Bu, alttaki eleman için alanın altında yemek yemez. Çakışmayı önler.
haxpor

@haxpor margin-bottomNegatif, bence bu bir olarak değiştirilemez padding-bottom, negatif değerleri işleyemez
Jean

4

Aşağıdaki SASS stili, kaydırma çubuğunuzu çoğu tarayıcıda saydam yapmalıdır (Firefox desteklenmez):

.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

Projemde yukarıdaki çözümleri deniyorum ve nedense div konumlandırma nedeniyle kaydırma çubuğunu gizleyemedim. Bu nedenle, kaydırma çubuğunu yüzeysel olarak kapsayan bir div ekleyerek gizlemeye karar verdim. Aşağıdaki örnek yatay kaydırma çubuğu içindir:

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

Karşılık gelen CSS aşağıdaki gibidir:

#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

Bu vücutta olacak:

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

Ve bu CSS:

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

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

3

Bu, yine de tüm tarayıcılar için çalışması gereken bir divit esque çözümüdür.

İşaretleme aşağıdaki gibidir ve göreli konumlandırmaya sahip bir şeyin içinde olması gerekir (ve genişliği örneğin 400 piksel olarak ayarlanmalıdır):

<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-scrollbarEklenti gitmek için yol olarak görünüyor, bkz: https://github.com/noraesae/perfect-scrollbar

Kaydırma çubukları sorunu için iyi belgelenmiş ve eksiksiz bir JavaScript tabanlı çözümdür.

Deneme sayfası: http://noraesae.github.io/perfect-scrollbar/


2
Bunun soru ile nasıl ilişkili olduğunu göremiyorum?
Chris Nevill

3
Kaydırma çubuğunu gizlemek için nasıl kullanıldığına dair hemen bir açıklama yapmadan 2 dakika boyunca mükemmel kaydırma çubuğuna bakıyorum . Bu konudaki cevabınızı genişletirseniz, eminim daha fazla oy alırsınız.
Christiaan Westerbeek

2

Başka bir tür hacky yaklaşım yapmak overflow-y: hiddenve sonra böyle bir şey ile el ile kaydırma öğesidir:

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

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

Deepmikoto'nun blogunda onmousewheelolayların nasıl tespit edileceği ve bunlarla nasıl başa çıkılacağı hakkında harika bir makale var . Bu sizin için işe yarayabilir, ancak kesinlikle zarif bir çözüm değildir.


2

Sadece geliştirirken kullandığım kaydırma çubuğunu gizlemek için kombine bir snippet'i paylaşmak istedim. İnternette benim için çalışan birkaç parçacığın bir koleksiyonudur:

.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

Kaydırma çubuğunu gizlemek için aşağıdaki kodu kullanabilirsiniz, ancak yine de kaydırma yapabilirsiniz:

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

2

Taşan içeriğe sahip öğelerin kaydırma çubuklarını gizlemek için kullanın.

.div{

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

}    

Bahsettiğiniz gibi FF dışında destek hemen hemen mevcut değil. OP'nin istediği şey için çok az. Kontrol caniuse.com/#feat=mdn-css_properties_scrollbar-width
Adrien

@Adrien Eh, orijinal soru diğer tarayıcılar için bir çözüm olduğunu belirtti. (Ancak Mozilla Firefox ve Internet Explorer bu şekilde çalışmıyor gibi görünüyor) diyor, bu yüzden Firefox Çözümü verdim.
Alvin Moyo

Eşdeğer ile birleştirildiğinde bu iyi çalıştı buldum: div :: - webkit-scrollbar {display: none; } Webkit / Chrome için.
Sean Halls

1

Başka bir basit çalışma keman :

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

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

Üst kapta taşma ve alt kapta otomatik taşma. Basit.


Bu kaydırma çubuğunu gizlemez, sadece "sol" değerle görünmez hale getirir.
robertmiles3

@ robertmiles3 aynı şey değil mi? gizleme ve görememe?
Bryan Willis

1
@ robertmiles3 yukarıdaki seçilen cevap sağdan aynı şeyi yapıyor. FIrefox, CSS'nin kaydırma çubuklarını tekrar gizlemesine izin vermeye karar verene kadar tüm çözümler hack gibi görünüyor. blogs.msdn.com/b/kurlak/archive/2013/11/03/…
geoyws

Katılıyorum. Bu, kabul edilen cevap tarafından önerilen benzer bir çözümdür. Çalışırsa çalışır. upvoted
JSON

1

Bu zor çözüm eski IE web tarayıcısında bile çalışır

Bu [ dikey kaydırma çubuğu ] için bir geçici çözümdür

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

Sadece dene: jsfiddle


0

overflow-xKaydırma overflow:hiddenyapmak, ebeveyn ve istediğiniz genişlik için çocuğun genişliğinin genişliğini% 100, dolgu değerini 15 piksele ayarlayın .

Internet Explorer 8 ve daha düşük sürümler hariç, Internet Explorer ve Edge dahil tüm büyük tarayıcılarda mükemmel çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.