❓프론트엔드 개발을 할 때, HTML에 그려질 요소의 너비나 높이 값을 알아야 할 때가 있다. 이때 패딩, 보더를 포함한 값이 필요할 수도 있고, 패딩이나 보더를 포함하지 않은 값이 필요할 수도 있다.
👉🏻 JS는 요소의 너비나 높이 같은 기하 정보 프로퍼티를 제공한다. clientHeight(width)
, offsetHeight(width)
, 스크롤의 길이까지 고려한scrollHeight(width)
등이 존재한다.
🔰 아래 사진은 기본 height, width, border, padding
을 나타낸 사진이다.
🔰 아래 사진에서 기하 프로퍼티인 clientHeight(width)
, offsetHeight(width)
, scrollHeight(width)
를 한눈에 볼 수 있다.
기하 프로퍼티는 화면에 보이는 요소(display element)를 대상으로만 계산된다. 즉 화면에 표시되지 않는 요소의 기하 프로퍼티는 0이다. 또한 모든 값은 정수로 반올림된다.
🌟 지금부터 하나씩 알아보자.
clientHeight(width)
content height(width)
+ padding
의 값.content height(width)
와 clientHeight(width)
는 정확히 일치한다.clientTop
, clientLeft
clientTop
, clientLeft
로 테두리 두께를 측정할 수 있다.offsetHeight(width)
content height(width)
+ padding
+ border
의 값. function isHidden(elem) {
return !elem.offsetWidth && !elem.offsetHeight;
}
scrollHeight(width)
content height(width)
+ padding
의 크기값scrollTop
, scrollLeft
scrollTop
, scrollLeft
은 은 가려진 영역의 위쪽 높이/왼쪽 너비를 나타낸다.scrollTop
, scrollLeft
값은 수정이 가능하다. 즉 scrollTop
을 0이나 1e9같은 아주 큰 숫자로 설정해 스크롤바를 최상단이나 최하단으로 옮길 수 있다.getComputedStyle
로 너비와 요소를 얻지 마라getComputedStyle
를 사용해 CSS가 적용된 요소의 높이와 너비를 구할 수 있다. 하지만 기하 프로퍼티를 사용해 너비와 높이 정보를 얻어야 하는 이유가 있다.CSS width
와 height
는 다른 CSS 프로퍼티의 영향을 받는다. 요소의 너비와 높이 계산 방법을 '지정’하는 box-sizing
이 이런 프로퍼티의 대표적인 예이다. 따라서 box-sizing
을 변경하면 getComputedStyle
로 구한 값이 부정확해 질 수 있다.
CSS width
와 height
는 auto
일 수 있다. 인라인 요소(inline element)가 이런 경우에 속한다. 자바스크립트 입장에선 정확한 px값이 있어야 계산을 할 수 있기 때문에 auto
라는 값은 쓸모가 없다.
<span id="elem">안녕하세요!</span>
<script>
alert( getComputedStyle(elem).width ); // auto
</script>
getComputedStyle(elem).width
를 사용하면, Chrome 같은 브라우저는 스크롤바 너비를 제외한 진짜 내부 너비를 반환하는데 (Windows 이외의 OS가 설치된 PC의)Firefox 에서는 스크롤바를 무시하고 CSS로 설정한 너비를 반환한다.❗따라서, 이러한 이유로 getComputedStyle이 아닌 기하 프로퍼티를 사용해야 한다.
offsetHeight(Width)
– 테두리를 포함하여, 요소 '전체’가 차지하는 높이와 너비
clientTop
,clientLeft
– 요소 제일 밖을 감싸는 영역과 요소 안(콘텐츠 + 패딩)을 감싸는 영역 사이의 거리를 나타냄. 대부분의 경우 왼쪽, 위쪽 테두리 두께와 일치하지만, 오른쪽에서 왼쪽으로 글을 쓰는 언어가 세팅된 OS에선clientLeft
에 스크롤바 두께가 포함됨
clientHeight(Width)
– 콘텐츠와 패딩을 포함한 영역의 높이와 너비로, 스크롤바는 포함되지 않음
scrollHeight(Width)
–clientWidth
,clientHeight
같이 콘텐츠와 패딩을 포함한 영역의 너비와 높이를 나타내는데, 스크롤바에 의해 숨겨진 콘텐츠 영역까지 포함됨
scrollTop
,scrollLeft
– 스크롤바가 아래, 오른쪽으로 움직임에 따라 가려지게 되는 요소 콘텐츠의 너비와 높이
스크롤바를 움직일 수 있게 해주는scrollLeft와
scrollTop을
제외한 모든 프로퍼티는 읽기 전용이다.
<사진 출처 & refe : JSInfo>