Chrome'da kaydırma çubuğunun sayfa genişliğine eklenmesini önleyin


125

Chrome'da .html sayfalarımı tutarlı bir genişlikte tutmaya çalışırken küçük bir sorunum var, Örneğin, çok sayıda içeriğe sahip bir sayfam (1), görüntü alanının (doğru kelime?) Yüksekliğini aşıyor, dolayısıyla dikey bir kaydırma çubuğu var bu sayfada (1). Sayfa (2) 'de aynı düzene sahibim (menüler, div'ler, ... vb.) Ancak daha az içeriğe sahibim, bu yüzden dikey kaydırma çubukları yok.

Sorun şu ki, sayfa (1) 'de kaydırma çubukları öğeleri hafifçe sola itiyor (genişliğe ekleniyor mu?) Ve her şey sayfada (2) iyi ortalanmış görünüyor.

Hala HTML / CSS / JS konusunda yeni başlayan biriyim ve bunun o kadar da zor olmadığına oldukça ikna oldum, ancak çözümü bulmakta hiç şansım olmadı. IE10'da ve FireFox'ta (karışmayan kaydırma çubukları) amaçlandığı gibi çalışıyor, bununla yalnızca Chrome'da karşılaştım.

Yanıtlar:


42

Kaydırma çubuğu boyutunu alabilir ve ardından kaba bir kenar boşluğu uygulayabilirsiniz.

Bunun gibi bir şey:

var checkScrollBars = function(){
    var b = $('body');
    var normalw = 0;
    var scrollw = 0;
    if(b.prop('scrollHeight')>b.height()){
        normalw = window.innerWidth;
        scrollw = normalw - b.width();
        $('#container').css({marginRight:'-'+scrollw+'px'});
    }
}

H-kaydırma çubuğunu kaldırmak için CSS:

body{
    overflow-x:hidden;
}

Şuna bir göz atmayı deneyin: http://jsfiddle.net/NQAzt/


1
Akıllı çözüm, yine de 'eğer'deki durumu anlamıyorum!
Acemad

3
ScrollHeight, bir öğenin toplam yüksekliğidir. Ne görüyorsun ve ne gizli. Bir örnek: Pencerenizin yüksekliği 500px gibi, gövdenin içeriği 900px. 500 piksel gösterilir, ancak diğer 400 piksel gizlidir ve bu kalan pikseli gösteren kaydırma çubuğu görünecektir. Dolayısıyla koşul, "tüm içeriğin yüksekliği, bakış açısı yüksekliğinden daha büyükse, gövdeye marjı ekle" gibidir. Kötü ingilizcem için özür dilerim
Lwyrn

Şimdi anladım, net açıklama için teşekkürler, bu çözümü denedim ve ek bir yatay kaydırma çubuğu aldım, nedenini bilmiyorum.
Acemad


4
Bu çözüm kaydırmayı devre dışı bırakıyor
çığ1

117

REDDİ : bindirme olmuştur kullanımdan kaldırıldı .
Kesinlikle mecbur kalırsan bunu yine de kullanabilirsin ama kullanmamaya çalış.

Bu yalnızca WebKit tarayıcılarında çalışır , ancak ben onu çok seviyorum. autoDiğer tarayıcılardaki gibi davranacak .

.yourContent{
   overflow-y: overlay;
}

Bu, kaydırma çubuğunun yalnızca bir kaplama olarak görünmesini sağlar , böylece öğenizin genişliğini etkilemez !


IE11 için çalışmıyor. Bindirme değerinin IE'de çalışması için herhangi bir çözüm var mı?
Anvesh Reddy

Bildiğim kadarıyla değil, bu ileti dizisinde IE için önerilen diğer seçeneklerle
idare etmeniz gerekecek

Çok gerekli! İşaretlememde ne halt yaptığımı görmek yarım saatten fazla sürdü. Hangi stilleri aşırı kullandım? Bu da varsayılan olmalıdır.
kushalvm

3
Ancak kullanımdan kaldırıldı
Akash Yellappa

1
Çözümü bunu yansıtacak şekilde güncelledim. Biraz üzgün: P
simonDos

57

Tek yapmanız gereken eklemek:

html {
    overflow-y: scroll;
}

Css dosyanızda bu, gerekli olup olmadığına bakılmaksızın kaydırıcıya sahip olacak, ancak sadece kaydırma yapamayacaksınız.

Bu, görüntü alanının her ikisi için de aynı genişliğe sahip olacağı anlamına gelir.


4
öyleyse, her ikisine de kaydırma çubukları eklemek zorunda mıyım? dikey kaydırma çubuğunun genişliğini görmezden gelmenin bir yolu yok mu? Teşekkür ederim !
Acemad

Farkında olduğum şeyi görmezden gelmenin yolu yok ama söylediklerim işe yarıyor @ Rockr90
Hive7

@ d3c0y bu doğru ve cevabımda bundan bahsetmiştim ama bunu yapmanın en kolay yöntemi. Ancak bunun son 3 yılda değişip değişmediğini bilmiyorum
Hive7

@aks. tarayıcıyı kaydırabileceğinizi düşünmeye zorlar, böylece kaydırma çubuğunu ve kaydırmayı etkinleştirir, y yan kaydırma çubuğu olur
Hive7

1
overflow-y: kaydırma; kaydırılabilir öğeler olmasa bile tüm görünüm alanına kaydırma çubuğunu ekleyecek / gösterecektir.
Abhilash

35

Muhtemelen

html {
    width: 100vw;
}

tam istediğin şey.


1
Bu, benim kullanım durumum için harika çalıştı: gist.github.com/bmcminn/1ab50da18bde75f39bc88e8292a5a847calc() Ana içerik görünümünün genişliğini belirlemek için kullanıyorum , böylece sabit ekran dışı gezinme, masaüstünde, yerelliği korurken ekranın sol tarafını işgal edebilir mobil cihazda ilerleyin.
bmcminn

3
36 saattir kaydırma çubuklarımla uğraşıyorum. İşe yarayan birkaç farklı çözümüm oldu, ancak başka sorunlar da ortaya çıktı. Bu, hem çalışan hem de başka bir yerde normal bir kaydırma çubuğu kullanmama izin veren ilk çözümdür. Teşekkür ederim.
koşer

Rica ederim! Ancak html's genişliğiyle uğraşmakvw biraz zor , bu yüzden lütfen biraz dikkatli olun!
Neurotransmitter

Bu harika çalıştı, biri bunun nasıl çalıştığını açıklayabilir mi?
Zeus

1
Çözüm fena değil, ancak yatay kaydırma ekleyebilir.
FDisk

19

Safari ve Chrome gibi Webkit tarayıcıları, genişliği hesaplarken kaydırma çubuğu genişliğini görünür sayfa genişliğinden çıkarır:% 100 veya 100vw. Daha fazlası DM Rutherford'un Kaydırma ve Sayfa Genişliği .

Onun overflow-y: overlayyerine kullanmayı deneyin .


9
Lütfen birden fazla soruya aynı cevapları göndermeyin. İyi bir yanıt gönderin, ardından diğer soruları kopya olarak kapatmak için oylayın / işaretleyin. Soru yinelenen bir soru değilse , yanıtlarınızı soruya uyarlayın.
Paul Roub

Bu çalışmalıdır, ancak kaplama henüz standart değildir ve tüm tarayıcılarda desteklenmemektedir.
Zia Ul Rehman Mughal

Hızlı hıçkırık: Safari'de bu, sayfanın kaydırmayı durdurmasına neden oldu
joshfindit

13

Ekleyebileceğimi buldum

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

doğrudan css'me ve kaydırma çubuğunu görünmez hale getirir, ancak yine de kaydırmama izin verir (en azından Chrome'da). Sayfanızda dikkat dağıtıcı bir kaydırma çubuğu istemediğinizde kullanışlıdır!


5
Bu biraz riskli ve çapraz tarayıcı çözümü değil, stackoverflow.com/questions/9251354/…
Alex Pyzhianov

4

Sabit genişliğe sahip kapsayıcılar için , kapsayıcı başka bir div'e sarılıp her iki div'e aynı genişlik uygulanarak saf bir CSS çapraz tarayıcı çözümü gerçekleştirilebilir.

#outer {
  overflow-y: auto;
  overflow-x: hidden;
  /*
   * width must be an absolute value otherwise the inner divs width must be set via
   * javascript to the computed width of the parent container
   */
  width: 200px;
}

#inner {
  width: inherit;
}

Codepen ile ilgili bir örnek görmek için buraya tıklayın


3

Diğer cevabım şu anda pek işe yaramıyor gibi görünüyor (ama yine de onu işlevsel hale getirmeye çalışacağım).

Ama temelde yapmanız gereken ve dinamik olarak yapmaya çalıştığı şey, içeriğin genişliğini ana kaydırılabilir bölmeden biraz daha az olacak şekilde ayarlamaktır.
Böylece, kaydırma çubuğu göründüğünde içerik üzerinde hiçbir etkisi olmaz.

Bu ÖRNEK , widthtarayıcının bunu bizim için yapmasını sağlamaya çalışmak yerine, URL'leri kodlayarak bu hedefe ulaşmanın daha hilekâr bir yolunu göstermektedir padding.
Bu mümkünse, kalıcı bir kaydırma çubuğu istemiyorsanız bu en basit çözümdür.


Bu iyi bir çözüm, ancak Bootstrap kullanarak duyarlı bir web sitesi üzerinde çalışıyorum ve genişliği ve her şeyi otomatikleştirmek önemli, ne dersiniz?
Acemad

(olasılık sırasına göre): birisi diğer cevabımın nasıl işe yarayacağını çözmediği sürece (dolgu veya kenar boşluğu ile); seçmeli olarak dolgu uygulamak için ortam sorgularını bir şekilde kullanabilirsiniz ; veya css ifadeleri , dolguyu seçici olarak uygulamak için modern tarayıcılarda uygulanır. Bence sadece kalıcı bir kaydırma çubuğu veya kaydırma çubuğunu algılamak için JS'yi kullanmanın yolu
Hashbrown

1

DÜZENLE: Bu cevap şu anda pek doğru değil, burada ne yapmaya çalıştığımı görmek için diğer cevabıma bakın. Düzeltmeye çalışıyorum, ancak yardım sunabilirseniz, yorumlarda bunu yapın, teşekkürler!

Kullanımı padding-right, bir kaydırma çubuğunun aniden ortaya çıkmasını azaltır.

MİSAL

dolgunun taşınmadığını gösteren chrome devtools

Noktalardan da görebileceğiniz gibi, bir kaydırma çubuğu olup olmadığına bakılmaksızın metin, kaydırmadan önce sayfada aynı noktaya gelir.
Bunun nedeni, bir kaydırma çubuğu tanıtıldığında dolgunun arkasında gizlenmesidir, böylece kaydırma çubuğu metni itmez!


3
Kaydırma çubuğu genişliği, kullandığınız işletim sistemi ve tarayıcıya göre değişebilir. 20px ve 40px ölçebilir
Lwyrn

2
mümkün olan tüm değerlerin maksimumunu kullanırsınız
Hashbrown

1
Bazı cihazlar / işletim sistemi tarayıcısının kaydırmalarının genişliği bile yoktur.
Sergey Goliney

0
.modal-dialog {
   position: absolute;
   left: calc(50vw - 300px);
}

300 piksel, iletişim penceresi genişliğimin yarısıdır.

Aslında benim için işe yarayan tek şey bu.


0

Aynı sorunu Chrome'da yaşadım. Benim için sadece kaydırma çubuğu her zaman görünür olduğunda oldu. (genel ayarlarda bulundu) Bir modelim var ve modeli açtığımda fark ettim ...

body {
    padding-left: 15px;
}

gövdeye eklenir. Bunun olmasını engellemek için ekledim

body {
    padding-left: 0px !important;
}

0

İlk cevap için yorum ekleyemiyorum ve uzun zaman oldu ... ama bu demoda bir sorun var:

if(b.prop('scrollHeight')>b.height()){
    normalw = window.innerWidth;
    scrollw = normalw - b.width();
    $('#container').css({marginRight:'-'+scrollw+'px'});
}

b.prop ('scrollHeight') her zaman b.height () 'a eşittir,

Bence şöyle olmalı:

if(b.prop('scrollHeight')>window.innerHeight) ...

Sonunda bir yöntem öneriyorum:

html {
 overflow-y: scroll;
}

:root {
  overflow-y: auto;
  overflow-x: hidden;
}

:root body {
  position: absolute;
}

body {
 width: 100vw;
 overflow: hidden;
}
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.