HTML 요소의 컨텐츠가 오버 플로우되는지 판별


136

HTML 요소가 내용을 오버플로했는지 JavaScript를 사용하여 스크롤 막대와 상관없이 확인할 수 있습니까? 예를 들어, 고정 크기가 작고 overflow 속성이 visible로 설정되고 요소에 스크롤 막대가없는 긴 div가 있습니다.

답변:


217

일반적으로, 당신은 비교할 수 client[Height|Width]scroll[Height|Width]이를 감지하기 위해 ...하지만 오버 플로우가 보일 때 값은 동일합니다. 따라서 탐지 루틴은 다음을 고려해야합니다.

// Determines if the passed element is overflowing its bounds,
// either vertically or horizontally.
// Will temporarily modify the "overflow" style to detect this
// if necessary.
function checkOverflow(el)
{
   var curOverflow = el.style.overflow;

   if ( !curOverflow || curOverflow === "visible" )
      el.style.overflow = "hidden";

   var isOverflowing = el.clientWidth < el.scrollWidth 
      || el.clientHeight < el.scrollHeight;

   el.style.overflow = curOverflow;

   return isOverflowing;
}

FF3, FF40.0.2, IE6, Chrome 0.2.149.30에서 테스트되었습니다.


감사합니다 Shog9 ... 검색 루틴은, 내가 오버플로 (숨겨진 / 표시) 재생하기 때문에 내가 필요한 것 같아요

stackoverflow.com/questions/2023787/ 에서 비슷한 질문 이 있습니다. 포함 요소의 어떤 부분에 오버플로가 숨겨져 있는지 알아 내려고합니다.
slolife

2
스타일이 잠시 바뀌면서 이것이 짧은 깜박임을 줄지 궁금합니다.
Stijn de Witt

3
+1. 이것은 최신 브라우저 (이 글을 쓰는 시점에서 Chrome 40 이상 및 기타 최신 버전 브라우저 포함)에서 작동합니다.
L0j1k 2019

1
MS Edge에서는 작동하지 않습니다. 때로는 내용이 있지만 넘쳐되지 clientWidthscrollWidth다릅니다 x 1 픽셀에 의해.
jesper December


2

나는이 대답이 완벽하다고 생각하지 않습니다. 때로는 텍스트가 오버플로 된 경우에도 scrollWidth / clientWidth / offsetWidth가 같습니다.

이것은 Chrome에서는 잘 작동하지만 IE 및 Firefox에서는 잘 작동하지 않습니다.

마지막 으로이 답변을 시도했습니다 : HTML 텍스트 오버플로 줄임표 감지

완벽하고 어디서나 잘 작동합니다. 그래서 저는 이것을 선택합니다. 어쩌면 시도해 볼 수 있습니다. 실망하지 않을 것입니다.


이 답변은 약간의 결함이 있기 때문에이 답변을 제거하거나 투표하지 않는 것이 좋습니다. 처음에는 이것을 사용하지만 특별한 CSS 스타일로는 완벽하게 작동하지 않습니다.
zjalex

1

다른 방법은 요소 너비와 부모 너비를 비교하는 것입니다.

function checkOverflow(elem) {
    const elemWidth = elem.getBoundingClientRect().width
    const parentWidth = elem.parentElement.getBoundingClientRect().width

    return elemWidth > parentWidth
}

0

jQuery를 사용하면 다음을 수행 할 수 있습니다.

if ( $(".inner-element").prop('scrollHeight') > $(".inner-element").height() ) {

    console.log("element is overflowing");

} else {

    console.log("element is not overflowing");

}

로 변경 .prop('scrollWidth')하고 .width()필요한 경우.


-2

이것은 자바 스크립트 솔루션 (Mootools 포함)으로 elHeader의 범위에 맞게 글꼴 크기를 줄입니다.

while (elHeader.clientWidth < elHeader.scrollWidth || elHeader.clientHeight < elHeader.scrollHeight) {
  var f = parseInt(elHeader.getStyle('font-size'), 10);
  f--;
  elHeader.setStyle('font-size', f + 'px');
}

elHeader의 CSS :

    width:100%;
    font-size:40px;
    line-height:36px;
    font-family:Arial;
    text-align:center;
    max-height:36px;
    overflow:hidden;

elHeader의 랩퍼는 elHeader의 너비를 설정합니다.

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