确定 HTML 元素的内容是否溢出

IT技术 javascript html css
2021-01-27 21:52:39

我可以使用 JavaScript 来检查(不考虑滚动条)HTML 元素是否溢出了其内容?例如,一个小的、固定大小的长 div,overflow 属性设置为可见,元素上没有滚动条。

6个回答

通常,您可以将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 中测试。

我在stackoverflow.com/questions/2023787/...有一个类似的问题,我试图找出包含元素的哪些部分隐藏了溢出。
2021-03-11 21:52:39
不适用于 MS Edge。有时,内容不满溢,但clientWidthscrollWidth不同的1px的。
2021-03-13 21:52:39
我想知道这是否会随着样式的短暂变化而产生短暂的闪烁?
2021-03-18 21:52:39
+1。这适用于现代浏览器(至少包括 Chrome 40 和撰写本文时的其他当前版本浏览器)。
2021-03-18 21:52:39
谢谢 Shog9 ......我认为,检测程序是我需要的,因为我玩溢出(隐藏/可见)
2021-03-27 21:52:39

我不认为这个答案是完美的。有时即使文本溢出,scrollWidth/clientWidth/offsetWidth 也是相同的。

这在 Chrome 中运行良好,但不适用于 IE 和 Firefox。

最后,我尝试了这个答案:HTML text-overflow ellipsis detection

它是完美的,适用于任何地方。所以我选择了这个,也许你可以试试,你不会失望的。

文本溢出和 HTML 元素溢出之间存在差异。最初的问题是关于 HTML 元素的。
2021-03-28 21:52:39
我建议删除或取消投票这个答案,因为它有一些缺陷。我一开始使用它,但它不能与某些特殊的 css 样式完美配合。
2021-04-09 21:52:39

另一种方法是将元素宽度与其父元素的宽度进行比较:

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

    return elemWidth > parentWidth
}
@CWSites 如果您在谈论图像,请尝试使用 object-fit: cover;
2021-03-12 21:52:39
子元素通常被包含或缩小以适应父元素。你如何解决这个问题?
2021-03-20 21:52:39
我不是在问图像,只是一个 DOM 元素,例如 adivspan
2021-04-08 21:52:39

使用 jQuery,您可以执行以下操作:

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

    console.log("element is overflowing");

} else {

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

}

变化.prop('scrollWidth').width()如果需要的话。