Stellen Sie fest, ob der Inhalt eines HTML-Elements überläuft


136

Kann ich mit JavaScript überprüfen (unabhängig von Bildlaufleisten), ob ein HTML-Element seinen Inhalt übergelaufen ist? Beispiel: Ein langes Div mit einer kleinen festen Größe, der sichtbaren Überlaufeigenschaft und keinen Bildlaufleisten für das Element.

Antworten:


217

Normalerweise können Sie die client[Height|Width]mit vergleichen scroll[Height|Width], um dies zu erkennen ... aber die Werte sind dieselben, wenn ein Überlauf sichtbar ist. Eine Erkennungsroutine muss dies berücksichtigen:

// 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;
}

Getestet in FF3, FF40.0.2, IE6, Chrome 0.2.149.30.


danke Shog9 ... die Erkennungsroutine ist, denke ich, was ich brauchte, weil ich mit Überlauf (versteckt / sichtbar)

Ich habe eine ähnliche Frage unter stackoverflow.com/questions/2023787/…, wo ich versuche herauszufinden, welche Teile des enthaltenen Elements einen versteckten Überlauf haben.
Slolife

2
Ich frage mich, ob dies ein kurzes Flackern hervorruft, wenn der Stil kurz geändert wird.
Stijn de Witt

3
+1. Dies funktioniert in modernen Browsern (einschließlich mindestens Chrome 40 und anderen Browsern der aktuellen Version aus der Zeit dieses Schreibens).
L0j1k

1
Funktioniert nicht in MS Edge. Manchmal ist Inhalt nicht aber überfüllt clientWidthund scrollWidthvon 1px unterscheidet.
Jesper


2

Ich denke nicht, dass diese Antwort perfekt ist. Manchmal sind die scrollWidth / clientWidth / offsetWidth gleich, obwohl der Text überläuft.

Dies funktioniert gut in Chrome, aber nicht in IE und Firefox.

Zuletzt habe ich diese Antwort ausprobiert: Erkennung von HTML-Textüberlauf-Auslassungspunkten

Es ist perfekt und funktioniert überall gut. Also wähle ich das, vielleicht kannst du es versuchen, du wirst nicht enttäuschen.


Ich schlage vor, diese Antwort zu entfernen oder abzuwählen, da sie einen Defekt aufweist. Ich benutze dies zuerst, aber es kann nicht perfekt mit einem speziellen CSS-Stil funktionieren.
Zjalex

1

Eine andere Möglichkeit besteht darin, die Elementbreite mit der Breite des übergeordneten Elements zu vergleichen:

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

    return elemWidth > parentWidth
}

0

Mit jQuery können Sie Folgendes tun:

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

    console.log("element is overflowing");

} else {

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

}

Wechseln Sie zu .prop('scrollWidth')und .width()bei Bedarf.


-2

Dies ist eine Javascript-Lösung (mit Mootools), die die Schriftgröße reduziert, um sie an die Grenzen von elHeader anzupassen.

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

Das CSS von elHeader:

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

Beachten Sie, dass der Wrapper von elHeader die Breite von elHeader festlegt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.