Kaydırma çubuğu (eksi) olmadan ekran genişliği nasıl elde edilir?


104

Bir öğem var ve genişliğine (!) Dikey kaydırma çubuğu olmadan ihtiyacım var.

Firebug bana vücut genişliğinin 1280 piksel olduğunu söylüyor.

Bunlardan herhangi biri Firefox'ta iyi çalışır:

console.log($('.element').outerWidth() );
console.log($('.element').outerWidth(true) );

$detour = $('.child-of-element').offsetParent();
console.log( $detour.innerWidth() );

Hepsi aradığım değer olan 1263px döndürüyor .

Ancak diğer tüm tarayıcılar bana 1280px veriyor .

Dikey kaydırma çubuğu (!) Olmadan tam ekran genişliği elde etmenin çapraz tarayıcı yolu var mı?


Dikey kaydırma çubuklarına ihtiyacınız var mı? Veya overflow: hidden'ı kullanabilir ve ardından genişliği hesaplayabilir misiniz?
Filip

Sorunuz için bu siteye başvurabilirsiniz stackoverflow.com/questions/8794338/…

deneyebilirsinizwidth: 100%;
www139

öğeyi, kaydırma çubuklarını içermeyen ekranın tüm genişliğinde yapmaya mı çalışıyorsunuz?
www139

Yanıtlar:


162

.prop("clientWidth") ve .prop("scrollWidth")

var actualInnerWidth = $("body").prop("clientWidth"); // El. width minus scrollbar width
var actualInnerWidth = $("body").prop("scrollWidth"); // El. width minus scrollbar width

içinde JavaScript :

var actualInnerWidth = document.body.clientWidth;     // El. width minus scrollbar width
var actualInnerWidth = document.body.scrollWidth;     // El. width minus scrollbar width

Not:scrollWidth Güvenilir bir şekilde kullanmak için öğenizin yatay olarak taşmaması gerektiğini unutmayın

jsBin demosu


Ayrıca kullanabilirsiniz, .innerWidth()ancak bu yalnızca bodyöğede çalışacaktır

var innerWidth = $('body').innerWidth(); // Width PX minus scrollbar 

2
Herhangi bir nedenle gövde elemanının genişliğini değiştirdiyseniz bu işe yaramaz.
Konstantin Pereiaslov

4
Görünüşe göre bu artık Chrome'da gerçekten çalışmıyor, bildirilen genişlik aslında pencerenin kendisinden 20px daha büyük, şimdiye kadar çok sayıda genişlik ölçümünü denemedim.
Sammaye

2
@Sammaye, marjı ayarlamayı unutmanıza (neden?) Neden olur: 0; BODY'ye veya ortak bir CSS sıfırlama kodu kullanın. jsbin.com/homixuqi/2/edit . Yani yine kod mükemmel çalışıyor .
Roko C. Buljan

2
@NamanGoel, vücut genişliğiyle karışıklıkları önlemek web tasarımcısı olarak sizin görevinizdir. Zor bir görev değil. Ayrıca, yükseklik ile ilgili olarak, bodytaşma olup olmadığına da bağlıdır . sınırlamak yerine taşarsa.
Roko C. Buljan

2
@ RokoC.Buljan Burada sizinle aynı fikirde değilim. Tabii ki hiçbir iyi web tasarımcısı / geliştirici gövde genişliği ve diğer şeylerle uğraşmamalı. Amacım, mevcut en güvenilir API'yi kullanmaktı. Bazı javascript geliştiricileri eklentiler vb. Oluşturuyor olabilir ve tüm sayfanın kontrolüne sahip olmayabilir.
Naman Goel

37

Vanilya javascript'i sadece yazarak kullanabilirsiniz:

var width = el.clientWidth;

Bunu, belgenin genişliğini aşağıdaki gibi almak için de kullanabilirsiniz:

var docWidth = document.documentElement.clientWidth || document.body.clientWidth;

Kaynak: MDN

Kaydırma çubuğu dahil olmak üzere tam pencerenin genişliğini aşağıdaki şekilde de alabilirsiniz:

var fullWidth = window.innerWidth;

Ancak bu, tüm tarayıcılar tarafından desteklenmez, bu nedenle bir yedek olarak, docWidthyukarıdaki gibi kullanmak ve kaydırma çubuğu genişliğini eklemek isteyebilirsiniz .

Kaynak: MDN


Kaydırma çubuğu varsa bu dikkate alınmaz
Ocak

6
document.documentElement.clientWidthBana en çok yardımcı oldu, çünkü yükseklik için de çalışıyor ( innerHeightgövde sayfayı doldurmazsa daha küçük olabilir, vb.) ve kaydırma çubuğu olmadan değeri alıyor.
user4642212

1
document.documentElement.clientWidth gerçek kazanan. body öğenizde minimum genişlik ayarınız yoksa ve tarayıcı şu anda bu minimum genişlikten daha küçük değilse document.body.clientWidth uygundur.
Codemonkey

12

$elementBir jQueryöğe olduğunu varsayan bazı örnekler :

// Element width including overflow (scrollbar)
$element[0].offsetWidth; // 1280 in your case

// Element width excluding overflow (scrollbar)
$element[0].clientWidth; // 1280 - scrollbarWidth

// Scrollbar width
$element[0].offsetWidth - $element[0].clientWidth; // 0 if no scrollbar

10

Bunu dene :

$('body, html').css('overflow', 'hidden');
var screenWidth1 = $(window).width();
$('body, html').css('overflow', 'visible');
var screenWidth2 = $(window).width();
alert(screenWidth1); // Gives the screenwith without scrollbar
alert(screenWidth2); // Gives the screenwith including scrollbar

Bu kodu kullanarak ekran genişliğini kaydırma çubuğu ile veya olmadan elde edebilirsiniz. Burada, taşma değerini değiştirdim bodyve kaydırma çubuğu olan ve olmayan genişliği elde ettim .


buna da güvenmek zorunda kaldım. yukarıdaki cevaplar benim için işe yaramadı
valerio0999

Zamanımı kurtardım! Çok teşekkürler!
Xonshiz

7

Kaydırma çubukları olmadan doğru genişliği ve yüksekliği elde etmenin en güvenli yeri HTML öğesidir. Bunu dene:

var width = document.documentElement.clientWidth
var height = document.documentElement.clientHeight

Tarayıcı desteği oldukça iyi, IE 9 ve üstü bunu destekliyor. ESKİ IE için, burada bahsedilen birçok yedekten birini kullanın.


0

Benzer bir problem yaşadım ve bunu yapmak width:100%;benim için çözüldü. Bu soruya bir cevap denedikten sonra ve <iframe>bu javascript ölçüm araçlarının bazı karmaşık fonksiyonlar kullanmadan bu javascript ölçüm araçlarını yanlış yapacağının farkına vardıktan sonra bu çözüme geldim . % 100 yapmak, bunu bir iframe'de halletmenin basit bir yoludur. Hangi HTML öğelerini işlediğinizden emin olmadığım için sorununuz hakkında bir şey bilmiyorum.


0

Bu çözümlerin hiçbiri benim için işe yaramadı, ancak kaydırma çubuğunun genişliğini ve genişliğini çıkararak düzeltmeyi başardım . Bunun tarayıcılar arası ne kadar uyumlu olduğundan emin değilim.


0

İşte kullandığım şey

function windowSizes(){
    var e = window,
        a = 'inner';
    if (!('innerWidth' in window)) {
        a = 'client';
        e = document.documentElement || document.body;
    }
    return {
        width: e[a + 'Width'],
        height: e[a + 'Height']
    };  
}

$(window).on('resize', function () {
    console.log( windowSizes().width,windowSizes().height );
});
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.