Làm thế nào để có được chiều rộng màn hình mà không có (dấu trừ) thanh cuộn?


102

Tôi có một phần tử và cần chiều rộng của nó mà không có (!) Thanh cuộn dọc.

Firebug cho tôi biết chiều rộng cơ thể là 1280px.

Một trong hai cách này hoạt động tốt trong Firefox:

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

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

Tất cả đều trả về 1263px , đó là giá trị tôi đang tìm kiếm.

Tuy nhiên, tất cả các trình duyệt khác đều cung cấp cho tôi 1280px .

Có cách nào trên nhiều trình duyệt để có chiều rộng toàn màn hình mà không có (!) Thanh cuộn dọc không?


Bạn có cần thanh cuộn dọc không? Hoặc bạn có thể sử dụng tràn: ẩn và sau đó tính chiều rộng?
Filip

bạn có thể tham khảo trang web này cho các câu hỏi của bạn stackoverflow.com/questions/8794338/...

bạn có thể thửwidth: 100%;
www139

bạn đang cố gắng làm cho phần tử có chiều rộng toàn bộ màn hình mà không bao gồm các thanh cuộn?
www139,

Câu trả lời:


161

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

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

trong JavaScript :

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

Tái bút: Lưu ý rằng để sử dụng scrollWidthmột cách đáng tin cậy, phần tử của bạn không được tràn theo chiều ngang

jsBin demo


Bạn cũng có thể sử dụng .innerWidth()nhưng điều này sẽ chỉ hoạt động trên bodyphần tử

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

2
Điều này sẽ không hoạt động nếu vì lý do nào đó bạn đã thay đổi chiều rộng của phần tử body.
Konstantin Pereiaslov

4
Có vẻ như điều này không thực sự hoạt động trên Chrome nữa, chiều rộng được báo cáo thực sự lớn hơn 20px so với chính cửa sổ, tôi đã thử nhiều phép đo chiều rộng cho đến nay vẫn không có kết quả.
Sammaye

2
@Sammaye đó là lý do bạn quên (tại sao?) Đặt ký quỹ: 0; thành BODY hoặc sử dụng mã đặt lại CSS thông thường. jsbin.com/homixuqi/2/edit . Vì vậy, một lần nữa, mã hoạt động hoàn toàn tốt .
Roko C. Buljan,

2
@NamanGoel, công việc của bạn với tư cách là nhà thiết kế web là ngăn chặn tình trạng lộn xộn với chiều rộng cơ thể. Nó không phải là một nhiệm vụ khó khăn. Ngoài ra, về chiều cao, nó phụ thuộc vào việc bạn có bị bodytràn hay không. nếu nó tràn hơn là ràng buộc nó.
Roko C. Buljan

2
@ RokoC.Buljan Tôi không đồng ý với bạn ở đây. Tất nhiên, không có nhà thiết kế / nhà phát triển web giỏi nào lại làm rối với chiều rộng nội dung và nội dung. Quan điểm của tôi là về việc sử dụng API đáng tin cậy nhất hiện có. Một số nhà phát triển javascript có thể đang xây dựng các trình cắm thêm, v.v. và có thể không có quyền kiểm soát toàn bộ trang.
Naman Goel

36

Bạn có thể sử dụng vanilla javascript bằng cách viết:

var width = el.clientWidth;

Bạn cũng có thể sử dụng điều này để lấy chiều rộng của tài liệu như sau:

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

Nguồn: MDN

Bạn cũng có thể lấy chiều rộng của toàn bộ cửa sổ, bao gồm cả thanh cuộn, như sau:

var fullWidth = window.innerWidth;

Tuy nhiên, điều này không được hỗ trợ bởi tất cả các trình duyệt, vì vậy để dự phòng, bạn có thể muốn sử dụng docWidthnhư trên và thêm chiều rộng thanh cuộn .

Nguồn: MDN


Điều này không đưa vào tài khoản nếu có một thanh cuộn
Jan

5
document.documentElement.clientWidthđã giúp tôi nhiều nhất, vì nó cũng hoạt động với chiều cao ( innerHeightcó thể nhỏ hơn nếu phần nội dung không lấp đầy trang, v.v.) và nhận giá trị mà không cần thanh cuộn.
user4642212

1
document.documentElement.clientWidth là người chiến thắng thực sự. document.body.clientWidth là được trừ khi bạn đặt chiều rộng tối thiểu trên phần tử body của mình và trình duyệt hiện nhỏ hơn chiều rộng tối thiểu đó.
Codemonkey

12

Dưới đây là một số ví dụ giả sử $elementlà một jQueryphần tử:

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

Thử cái này :

$('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

Bạn có thể nhận được chiều rộng màn hình có và không có thanh cuộn bằng cách sử dụng mã này. Ở đây, tôi đã thay đổi giá trị tràn của bodyvà lấy chiều rộng có và không có thanh cuộn.


tôi cũng phải dựa vào điều này. câu trả lời ở trên không làm việc cho tôi
valerio0999

Tiết kiệm thời gian của tôi! Cảm ơn rất nhiều!
Xonshiz

7

Nơi an toàn nhất để có được chiều rộng và chiều cao chính xác mà không cần thanh cuộn là từ phần tử HTML. Thử cái này:

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

Hỗ trợ trình duyệt là khá tốt, với IE 9 trở lên hỗ trợ điều này. Đối với IE CŨ, hãy sử dụng một trong nhiều cách dự phòng được đề cập ở đây.


0

Tôi đã trải qua một vấn đề tương tự và đã width:100%;giải quyết nó cho tôi. Tôi đã tìm ra giải pháp này sau khi thử một câu trả lời cho câu hỏi này và nhận ra rằng bản chất của an <iframe>sẽ làm cho các công cụ đo lường javascript này không chính xác nếu không sử dụng một số chức năng phức tạp. Thực hiện 100% là một cách đơn giản để chăm sóc nó trong iframe. Tôi không biết về sự cố của bạn vì tôi không chắc bạn đang thao tác những phần tử HTML nào.


0

Không có giải pháp nào trong số những giải pháp này phù hợp với tôi, tuy nhiên tôi đã có thể sửa nó bằng cách lấy chiều rộng và trừ chiều rộng của thanh cuộn . Tôi không chắc điều này tương thích với nhiều trình duyệt như thế nào.


0

Đây là những gì tôi sử dụng

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 );
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.