(마이너스) 스크롤바없이 화면 너비를 얻는 방법?


102

요소가 있고 세로 스크롤 막대가없는 너비가 필요합니다.

Firebug는 몸 너비가 1280px라고 말합니다.

다음 중 하나는 Firefox에서 잘 작동합니다.

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

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

그들은 모두 내가 찾고있는 값인 1263px를 반환 합니다.

그러나 다른 모든 브라우저는 1280px를 제공합니다 .

(!) 세로 스크롤바없이 전체 화면 너비를 얻는 크로스 브라우저 방법이 있습니까?


수직 스크롤바가 필요합니까? 또는 overflow : hidden을 사용하고 너비를 계산할 수 있습니까?
Filip

질문에 대한이 사이트를 참조 할 수 있습니다. stackoverflow.com/questions/8794338/…

당신은 시도 할 수 있습니다width: 100%;
www139

요소를 스크롤 막대를 포함하지 않고 화면의 전체 너비로 만들려고합니까?
www139 2015-07-05

답변:


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

에서 자바 스크립트 :

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

추신 :scrollWidth 안정적 으로 사용하려면 요소가 수평으로 오버플로되지 않아야합니다.

jsBin 데모


당신은 또한 사용할 수 .innerWidth()있지만 이것은 요소 에서만 작동합니다body

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

2
어떤 이유로 본문 요소의 너비를 변경 한 경우에는 작동하지 않습니다.
Konstantin Pereiaslov 2013-08-21

4
이것은 더 이상 Chrome에서 실제로 작동하지 않는 것 같습니다.보고 된 너비는 실제로 창 자체보다 20px 더 큽니다. 지금까지 수많은 너비 측정을 시도해 보았습니다.
Sammaye

2
@Sammaye는 margin : 0을 설정하는 것을 잊었습니다. BODY에 연결하거나 일반적인 CSS 재설정 코드를 사용하세요. jsbin.com/homixuqi/2/edit . 다시 말하지만 코드는 완벽하게 작동합니다 .
Roko C. Buljan 2014 년

2
@NamanGoel 웹 디자이너로서 신체 폭의 혼란을 방지하는 것이 귀하의 임무입니다. 어려운 일이 아닙니다. 또한 높이에 관해서는 body오버플로 여부에 따라 다릅니다 . 제한하는 것보다 넘치면.
Roko C. Buljan 2015

2
@ RokoC.Buljan 나는 당신과 여기에 동의하지 않습니다. 물론 좋은 웹 디자이너 / 개발자가 몸통과 물건을 망쳐서는 안됩니다. 내 요점은 사용 가능한 가장 안정적인 API를 사용하는 것입니다. 일부 자바 스크립트 개발자는 플러그인 등을 빌드 할 수 있으며 전체 페이지를 제어하지 못할 수 있습니다.
Naman Goel 2015

36

간단히 다음과 같이 작성하여 바닐라 자바 ​​스크립트를 사용할 수 있습니다.

var width = el.clientWidth;

이를 사용하여 다음과 같이 문서의 너비를 가져올 수도 있습니다.

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

출처 : MDN

다음과 같이 스크롤바를 포함한 전체 창의 너비를 가져올 수도 있습니다.

var fullWidth = window.innerWidth;

그러나 이것은 모든 브라우저에서 지원되지 않으므로 폴백 docWidth으로 위와 같이 사용 하고 스크롤바 너비 에 추가하는 것이 좋습니다.

출처 : MDN


스크롤바가있는 경우는 고려하지 않습니다.
Jan

5
document.documentElement.clientWidth높이에서도 작동 innerHeight하고 (본문이 페이지를 채우지 않는 경우 더 작을 수 있음) 스크롤바없이 값을 가져 오기 때문에 가장 도움이되었습니다 .
user4642212

1
document.documentElement.clientWidth가 진정한 승자입니다. document.body.clientWidth는 body 요소에 최소 너비가 설정되어 있지 않고 브라우저가 현재 최소 너비보다 작지 않는 한 괜찮습니다.
Codemonkey

12

여기에 가정 몇 가지 예입니다 $elementA는 jQuery요소 :

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

이 시도 :

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

이 코드를 사용하여 스크롤 막대를 사용하거나 사용하지 않고 화면 너비를 얻을 수 있습니다. 여기에서 오버플로 값을 변경하고 body스크롤 막대를 사용하거나 사용하지 않고 너비를 얻습니다.


나도 이것에 의존해야했다. 답변은 위의 나를 위해 작동하지 않았다
valerio0999

내 시간을 절약했습니다! 정말 감사합니다!
Xonshiz

7

스크롤바없이 정확한 너비와 높이를 얻을 수있는 가장 안전한 곳은 HTML 요소입니다. 이 시도:

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

브라우저 지원은 꽤 괜찮은데, IE 9 이상이이를 지원합니다. OLD IE의 경우 여기에 언급 된 여러 대체 방법 중 하나를 사용하십시오.


0

나는 비슷한 문제를 경험했고 width:100%;나를 위해 해결했습니다. 나는이 질문에 대한 답을 시도하고의 본질이 <iframe>복잡한 기능을 사용하지 않고도 이러한 자바 스크립트 측정 도구를 부정확하게 만들 것이라는 것을 깨달은 후에이 솔루션을 찾았습니다 . 100 %는 iframe에서 처리하는 간단한 방법입니다. 어떤 HTML 요소를 조작하고 있는지 확실하지 않기 때문에 귀하의 문제에 대해 잘 모릅니다.


0

이 솔루션 중 어느 것도 나를 위해 일하지 않았지만 너비를 취하고 스크롤 막대너비를 빼서 문제를 해결할 수있었습니다 . 브라우저 간 호환이 얼마나되는지 잘 모르겠습니다.


0

내가 사용하는 것은 다음과 같습니다.

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 );
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.