Javascript

나만 헷갈림? style.left, offsetWidth, clientWidth, scrollWidth 총정리

킹king 2022. 6. 3. 10:48
반응형

1. HTMLElement.style

document.querySelector('div').style.left = '100px';
document.querySelector('div').style.width = '200px';

어떤 element을 css말고 javascript로 변경하고 싶다면 이렇게 쓰면 됨.

 

그런데, width값을 알고싶어서 저걸 쓰면 값이 제대로 나오지 않음

그 이유는 css나 인라인코드로 width값 등이 설정되어있더라도, 자바스크립트로 별도로 지정되지 않았다면 style.width형태로는 요소의 값을 뽑아낼 수 없음.

 

즉 css로 display: none을 해서 화면상에는 없어도 자바스크립트로 별도로 값을 지정해줬다면 그 값을 출력함. 자바스크립트로 width를 10000px로 해놓고 화면상에는 부모요소 등에 의해 실제로 200px만 보이더라도 style.width를 찍으면 10000px로 나옴.

 

또한 정수로 출력되지 않고 '100px'이렇게 string형태로 나옴.

 

 

2. HTMLElement.offsetWidth

얘는 css값까지 다 포함해서 진짜 우리 눈에 보이는 요소만큼 값을 정수로 뽑아냄.

console.log(document.querySelector('div').offsetWidth);

만약 div가 display:none 상태라면 width값을 0으로 출력함.

 

css로 width: 200px이라고 했다면 200, 여기에 padding: 10px으로 추가했다면 220이라고 알려줌(padding, border, scroll 포함해서 알려줌)

초록색 본문~검정 border까지 포함

 

 

3. Element.clientWidth

근데 또 border, scroll은 상관없이 padding까지만 포함해서 알고싶다면 이를 쓰면 됨.

console.log(document.querySelector('div').clientWidth);

초록색 본문만

 

 

4. Element.scrollWidth

console.log(document.querySelector('div').scrollWidth);

근데 만약에 자식이 사실 엄~~~~~청 긴데 부모요소가 200px 200px으로 제한해서(overflow로) 자식이 그만큼만 보이는 상태인데 자식의 총길이를 알고싶다면? 그럴때 얘를 씀

숨겨진 모든 초록색 본문