2008-09-27 6 views
100

Puis-je utiliser JavaScript pour vérifier (indépendamment des barres de défilement) si un élément HTML a débordé son contenu? Par exemple, une div longue avec une petite taille fixe, la propriété overflow définie sur visible et aucune barre de défilement sur l'élément.Détermine si le contenu d'un élément HTML déborde

Répondre

164

Normalement, vous pouvez comparer les client[Height|Width] avec scroll[Height|Width] pour pour détecter ceci ... mais les valeurs seront les mêmes quand le débordement est visible. Ainsi, une routine de détection doit tenir compte:

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

testé dans FF3, FF40.0.2, IE6, Chrome 0.2.149.30.

+0

merci Shog9 ... la routine de détection est, je pense, ce dont j'avais besoin, parce que je joue avec débordement (caché/visible) –

+0

J'ai une question similaire sur http://stackoverflow.com/questions/2023787/how-to-determine-if-hidden-overflow-text-is-at-top-or-bottom-of -élément où j'essaie de comprendre quelles parties de l'élément contenant ont un débordement caché. – slolife

+2

Je me demande si cela va donner un bref scintillement car le style est brièvement changé? –

0

Je ne pense pas que cette réponse soit parfaite. Parfois, scrollWidth/clientWidth/offsetWidth sont identiques même si le texte est overflow.

Cela fonctionne bien dans Chrome, mais pas dans IE et Firefox.

Enfin, j'ai essayé cette réponse: HTML text-overflow ellipsis detection

Il est parfait et fonctionne bien partout. Donc, je choisis cela, peut-être que vous pouvez essayer, vous ne serez pas déçu.

+0

Je suggère d'enlever ou d'annuler cette réponse, car il a un défaut. J'utilise ça au début, mais ça ne marche pas parfaitement avec un style css spécial. – zjalex

-1

Ceci est une solution javascript (avec Mootools) qui réduira la taille de la police pour s'adapter aux limites d'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'); 
} 

Le CSS de elHeader:

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

Notez l'emballage de elHeader définit la largeur elHeader.

Questions connexes