Höhe von HTML-Elementen automatisch anpassen – mit jQuery und Javascript
Oft kommt es vor, das man zwei oder mehr Elemente, sei es nun ein Layer, Bild oder was auch immer, mit gleicher Höhe darstellen will. Das stellt bei statischen Inhalten überhaupt kein Problem dar, gibt es doch die schöne CSS-Eigenschaft height.
Was aber, wenn wir dynamische Inhalte darstellen wollen und gar nicht wissen wieviel Inhalt wir pro Element bekommen. Bei Texten, längeren Namen or whatever aus einer Datenbank ist dies oft der Fall. Durch den unterschiedlich langen Inhalt werden die Elemente nun dementsprechend anders hoch dargestellt. Das sieht bei Elementen die wir nebeneinander zeigen möchten meistens ziemlich doof aus.
Hier kann das Javascript-Framework jQuery helfen. jQuery bietet eine Funktion mit dem Namen .height(), die uns die Höhe eines Elements setzen oder auslesen kann. Hier wird nicht einfach die CSS-Eigenschaft height ausgelesen, sondern die fertig gerenderte Höhe des Elements. So braucht man mit jQuery nicht viel Mühe, um alle gewünschten Elemente zu durchlaufen, das höchste zu bestimmen und alle Elemente auf eben diese Höhe anzupassen.
Der HTML-Code
Gehen wir von folgendem HTML-Code aus. CSS habe ich zu besseren Ansicht inline definiert:
<div class="autoheight" style="float: left; width: 200px; background-color: lightgreen;"> Hier steht Inhalt, der in der Länge bzw. Höhe variabel sein kann. Zum testen schreib ich hier irgendwas rein. </div> <div class="autoheight" style="float: left; width: 200px; background-color: orange;"> Hier steht Inhalt, der in der Länge bzw. Höhe variabel sein kann. Zum testen schreib ich hier irgendwas rein. Hier steht Inhalt, der in der Länge bzw. Höhe variabel sein kann. Zum testen schreib ich hier irgendwas rein. Hier steht Inhalt, der in der Länge bzw. Höhe variabel sein kann. Zum testen schreib ich hier irgendwas rein. </div> <div class="autoheight" style="float: left; width: 200px; background-color: mediumblue;"> Hier steht Inhalt, der in der Länge bzw. Höhe variabel sein kann. Zum testen schreib ich hier irgendwas rein. Hier steht Inhalt, der in der Länge bzw. Höhe variabel sein kann. Zum testen schreib ich hier irgendwas rein. </div>
Das Javascript mit jQuery
Zuerst müssen wir die Höhe des höchsten Div’s ausfindig machen. Wir gehen am besten alle Elemente durch und bestimmen so das höchste von allen. Dazu müssen wir uns den höchsten Wert einfach nur merken und immer vergleichen:
/* Variable zum Merken der maximalen Höhe */
var max_height = 0;
/* alle Elemente mit der CSS-Klasse "autoheight" durchlaufen */
$('.autoheight').each(function(e) {
/* Höhe des aktuellen Elements */
h = $(this).height();
/* Wenn Höhe erfolgreich bestimmt werden konnte */
if(typeof(h) != "undefined") {
/* Wenn aktuelle Höhe gösser unserer maximalen, Höhe merken */
if(h > max_height) {
max_height = h;
}
}
});
Nun müssen wir alle anderen Elemente höher bekommen. Wenn wir die maximale Höhe bestimmen konnten, wenden wir diese jetzt einfach auf alle Elemente an:
if(max_height > 0) {
$('.autoheight').height(max_height);
}
Das ganze Javascript sieht dann so aus:
var max_height = 0;
$('.autoheight').each(function(e) {
h = $(this).height();
if(typeof(h) != "undefined") {
if(h > max_height) {
max_height = h;
}
}
});
if(max_height > 0) {
$('.autoheight').height(max_height);
}
Das fertige Ergebnis als Beispiel
Das oben beschriebene Beispiel sollte dann in etwa so aussehen:
Boxen original
Hier steht Inhalt, der in der Länge bzw. Höhe variabel sein kann. Zum testen schreib ich hier irgendwas rein.
Hier steht Inhalt, der in der Länge bzw. Höhe variabel sein kann. Zum testen schreib ich hier irgendwas rein.
Hier steht Inhalt, der in der Länge bzw. Höhe variabel sein kann. Zum testen schreib ich hier irgendwas rein.
Boxen mit jQuery angepasst
Hier steht Inhalt, der in der Länge bzw. Höhe variabel sein kann. Zum testen schreib ich hier irgendwas rein.
Hier steht Inhalt, der in der Länge bzw. Höhe variabel sein kann. Zum testen schreib ich hier irgendwas rein.
Hier steht Inhalt, der in der Länge bzw. Höhe variabel sein kann. Zum testen schreib ich hier irgendwas rein.
Sehr cool. Habe ich in ähnlicher Form auch schon verwendet, um etwas auf exakt 100% Höhe (Monitor) auszurichten. Kann diese Vorgehensweise nur jedem empfehlen.
Viele Grüße
lastactionseo
Noch ein Vorschlag:
Nimmt einfach den Eltern-Container um die max_height zu ermitteln. Dann braucht es keine Schleife die alle Kinder nach der Höhe abfragt.
$(‘ul#autoheight li’).height($(‘ul#autoheight’).height());
Ich würde nicht .height() verwenden um die höhe zu ermitteln sondern .outerHeight() (http://api.jquery.com/outerHeight/) der vorteil: Outerheight schliesst ebenfalls padding und border ein (falls gar margin benötigt wird kann man dies mit .outerHeught(true) ermitteln!
Eine weitere möglichkeit ist dem wrapper ein Background-Image zu geben welches 1px hoch ist und repeat-y hat…
Die Funktion scheint nicht mehr zu funktionieren. Im aktuellen Firefox (16.0.2) sehen beide Ansichten identisch aus.
@ToM80 Danke für den Hinweis. Der Artikel ist dem Relaunch zum Opfer gefallen. jQuery wurde falsch angesprochen. Ist gefixt.
@Gerrit @Pascal Danke für Eure Tipps! outerHeight ist wirklich besser.