100vw로 인해 수평 오버플로가 발생하지만 둘 이상인 경우에만?


101

이것을 가지고 있다고 가정하십시오.

html, body {margin: 0; padding: 0}
.box {width: 100vw; height: 100vh}

<div class="box">Screen 1</div>

스크롤바없이 화면을 채우는 무언가를 얻을 수 있습니다. 그러나 다른 추가 :

<div class="box">Screen 1</div>
<div class="box">Screen 2</div>

수직 스크롤바 (예상)뿐만 아니라 약간의 수평 스크롤도 표시됩니다.

너비를 생략하거나 너비 : 100 %로 설정할 수 있다는 것을 알고 있지만 왜 이런 일이 발생하는지 궁금합니다. 100vw가 "뷰포트 너비의 100 %"로되어 있지 않습니까?


html과 body에 숨겨진 오버플로를 피하십시오. 자식 요소에 위치 고정을 사용하려는 경우 좋은 솔루션이 아닙니다. max-width가 좋은 방법 인 것 같습니다 !!!
NeueDeutsche

답변:


156

wf4에서 이미 설명했듯이 수직 스크롤 때문에 수평 스크롤이 존재합니다. 를 제공하여 해결할 수 있습니다 max-width: 100%.

.box {
    width: 100vw;
    height: 100vh;
    max-width:100%;  /* added */
}

작업 바이올린


3
고마워, 이것은 문제를 해결하는 데 잘 작동하지만 여전히 약간 직관적이지 않은 기본 동작이라고 생각합니다.
phocks

2
직관적이지 않은 것에 대해 : caniuse.com에 따르면 이것은 브라우저 버그입니다. caniuse.com/#feat=viewport-units- > 알려진 문제 8 : 현재 Firefox를 제외한 모든 브라우저는 100vw를 세로 스크롤 막대를 포함한 전체 페이지 너비로 잘못 간주하여 overflow : auto가 설정된 경우 가로 스크롤 막대가 발생할 수 있습니다. .
Jacob van Lingen

48
max-width: 100%스크롤바가없는 뷰포트의 너비 인 경우 100vw처음 에는 필요하지 않았습니다. :-) width: 100%요소에 배치 된 조상이 없기 때문에 사용할 수 있으므로 참조는 본문입니다.
Capsule

8
이것은 아무것도 해결하지 못합니다! max-width는 요소가 신체의 직접적인 종속물이기 때문에 작동합니다! 100 % 대신 100vw를 사용하는 실제 사례 (예 : 컨테이너 내부의 요소)에서는 작동하지 않습니다.
Eliezer Berlin

2
내 div가 너비 또는 패딩을 모르는 컨테이너에 있기 때문에 너비를 100 % 사용할 수 없습니다. 그것이 100 % 대신 100vw를 사용하는 전체 이유이므로이 대답은 무의미합니다. 스크롤바가 없더라도 항상 스크롤바를 표시하도록 설정 한 경우에도 Mac에서도 발생합니다.
Curtis 19

38

스크롤바가 포함되어 vw가로 스크롤이 추가되어 세로 스크롤 아래를 볼 수 있습니다.

상자가 1 개뿐이면 너비 100 % x 높이 100 %입니다. 2를 추가하면 너비 100 % x 높이 200 %이므로 수직 스크롤바가 트리거됩니다. 수직 스크롤바가 트리거되면 수평 스크롤바가 트리거됩니다.

추가 overflow-x:hidden할 수 있습니다 .body

html, body {margin: 0; padding: 0; overflow-x:hidden;}
.box {width: 100vw; height: 100vh; background-color:#ff0000}
.box2 {width: 100vw; height: 100vh; background-color:#ffff00}

http://jsfiddle.net/NBzVV/


1
이렇게하면 스크롤바 아래에 내용이 나타납니다. jsfiddle.net/NBzVV/1 이것이 적절한 해결 방법이 되려면 올바른 패딩을 추가해야합니다.
James Donnelly 2014

1
네, 잘 발견되었습니다. 에 추가 max-width:100%하면 .box이를 방지 할 수 있습니다.
wf4 2014-04-29

4
"그러므로 수직 스크롤 아래를 볼 수 있도록 수평 스크롤이 추가됩니다."<-이 문장은 제 뇌가 실제로 무슨 일이 일어나고 있는지 시각적으로 이해하는 데 도움이되었습니다. +1
Ivan Durst 2015 년

항목에 overflow추가해도 작동 x하지 않습니다 postition: sticky.
T.Chmelevskij

14

비슷한 문제가 있었고 JS 및 CSS 변수를 사용하여 다음 솔루션을 찾았습니다.

JS :

function setVw() {
  let vw = document.documentElement.clientWidth / 100;
  document.documentElement.style.setProperty('--vw', `${vw}px`);
}

setVw();
window.addEventListener('resize', setVw);

CSS :

width: calc((var(--vw, 1vw) * 100);

1vw는 대체 값입니다.


1
이거 너무 좋아. 아주 우아한
andrevenancio

이것은 전 세계적으로 사용 가능하기 때문에 완벽합니다. 감사합니다.
fvaldez421 20.06.08

이것은 훌륭한 기술입니다. 공유해 주셔서 감사합니다! 한 가지 문제점은 초기 크기 조정을 위해 dom이로드 된 후이 스크립트를 실행해야하므로 바닥 글에 넣거나 DOMContentLoaded 이벤트를 추가해야한다는 것입니다.
dec

2

업데이트 : Chrome 버전 66부터 더 이상 질문에 의해보고 된 동작을 재현 할 수 없습니다. 해결 방법이 필요하지 않은 것 같습니다.


원래 답변

이것은 실제로이 답변 과 위의 의견 에서보고 된 버그 입니다.

허용 된 답변 (추가 .box {max-width: 100%;}) 의 해결 방법은 일반적으로 작동하지만 현재 display:table(Chrome에서 테스트 됨) 작동하지 않는다는 점이 주목할 만합니다 . 이 경우 내가 찾은 유일한 해결 방법은 width:100%대신 사용하는 것입니다.


음, 받아 들여진 대답이 바뀌 었나요? 당신은 받아 들여진 대답과 같은 것을 제안하고 있습니다. 이것이 답이 스스로 완성되어야하는 이유입니다.
Kissaki

허용되는 대답은 max-width: 100%. 로 변경 width: 100vw을 제안 했습니다 width: 100%. 나는 내 대답을 독립적으로 업데이트했습니다.
Cornflex

1
Chrome 외에 다른 브라우저가 있으며 일부는 스크롤바를 다르게 처리합니다.
LocalPCGuy

1

vw에 포함 된 스크롤바 너비를 제거하려면 다음을 수행해야합니다.

html, body {
    overflow-x: hidden;
    height: 100vh;
}

훌륭합니다. 다른 솔루션으로는 문제가 해결되지 않았지만 이로 인해 해결되었습니다. (폭을 100 %로 변경하면 더 이상보기의 전체 너비로 늘어나지 않았기 때문에 개체의 너비가 감소했습니다.)
subjord

0
*,
html,
body {
  margin: 0;
  padding: 0;
  overflow: hidden;/*add This*/ 
}
/*and enjoy ^_^ */

6
문제를 숨겨도 해결되지 않습니다. 귀하의 접근 방식은 실제로 오버플로를 제거하지만 단순히 숨 깁니다. 내용 (때문에 어떤 이유의) 외부 표시해야 할 때 문제가 발생할 수 있습니다
다니엘 슈타이너

3
안녕하세요 user13149444! 코드 전용 답변은 문제를 해결할 수 있지만 해결 방법을 설명하면 훨씬 더 유용합니다. 커뮤니티는 귀하의 답변을 완전히 이해하기 위해 이론과 코드가 모두 필요합니다.
RBT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.