2011-08-21 9 views
34

Come posso rilevare un overflow del testo verticale in un elemento div?Come rilevare l'overflow nell'elemento div?

CSS:

div.rounded { 
    background-color:#FFF; 
    height: 123px; 
    width:200px; 
    font-size:11px; 
    overflow:hidden; 
} 

HTML:

<div id="tempDiv" class="rounded"> 
    Lorem ipsum dolor sit amet, 
    consectetur  adipiscing elit. Phasellus vel quam vestibulum orci blandit laoreet. 
</div> 
+2

Cosa intendi per "rilevare" esattamente? Cosa vuoi fare in reazione, mostrare una barra di scorrimento? –

+0

Voglio ridimensionare div al passaggio del mouse se il testo trabocca ma l'ho già eliminato, quindi non faceva parte della domanda. –

+0

Vecchia domanda simile con una grande risposta: https://stackoverflow.com/a/143889/573057 – earcam

risposta

45

È possibile easil y farlo confrontando scrollHeight con clientHeight, provare quanto segue:

<script type="text/javascript"> 
function GetContainerSize() 
{ 
    var container = document.getElementById ("tempDiv"); 
    var message = "The width of the contents with padding: " + container.scrollWidth + "px.\n"; 
    message += "The height of the contents with padding: " + container.scrollHeight + "px.\n"; 

    alert (message); 
} 
</script> 

Per ulteriori informazioni si prega di dare un'occhiata a: http://help.dottoro.com/ljbixkkn.php

+0

Questo non funziona se la regola di overflow sul div è 'visible', che è l'impostazione predefinita. Utilizzo di Firefox 18. – Ryan

+0

Non indica quale sia il div specifico che trabocca. – NoBugs

+0

Il problema con questa soluzione è che se l'elemento è nascosto (o è padre) entrambi restituiscono 0 .. una soluzione alternativa? –

5

seguente plugin per jQuery avviserà il risultato.

CSS

#tempDiv{ 
    height:10px; 
    overflow:hidden; 
}​ 

Per determinare trabocco nella larghezza,

(function($) { 
    $.fn.isOverflowWidth = function() { 
     return this.each(function() { 
      var el = $(this); 
      if (el.css("overflow") == "hidden") { 
       var text = el.html(); 
       var t = $(this.cloneNode(true)).hide().css('position', 'absolute').css('overflow', 'visible').width('auto').height(el.height()); 
       el.after(t);  
       function width() { 
        return t.width() > el.width(); 
       }; 
       alert(width()); 
      } 
     }); 
    }; 
})(jQuery); 

Per determinare trabocco in altezza,

(function($) { 
    $.fn.isOverflowHeight = function() { 
     return this.each(function() { 
      var el = $(this); 
      if (el.css("overflow") == "hidden") { 
       var text = el.html(); 
       var t = $(this.cloneNode(true)).hide().css('position', 'absolute').css('overflow', 'visible').height('auto').width(el.width()); 
       el.after(t); 

       function height() { 
        return t.height() > el.height(); 
       }; 
       alert(height()); 
      } 
     }); 
    }; 
})(jQuery); 

http://jsfiddle.net/C3hTV/

+2

Non sicuro che questo sia il modo più efficiente o migliore per controllare - e se ci fosse uno script all'interno di quel particolare div, sarebbe rieseguito it – NoBugs

2

Una variante di risposta di Chamika è quello, nel tuo html reale, hanno un interno e Div esterno. Il Div esterno avrebbe altezza e larghezza statiche e overflow nascosto. Il Div interno ha solo il contenuto e si estenderà al contenuto.

È quindi possibile confrontare l'altezza e la larghezza dei 2 Div, senza la necessità di aggiungere qualcosa in modo dinamico.

<div id="tempDiv" class="rounded"> 
    <div class="content"> 
     Lorem ipsum dolor sit amet, 
     consectetur  adipiscing elit. Phasellus vel quam vestibulum orci blandit laoreet. 
    </div> 
</div>