Ich habe ein kleines besonderes Problem, das ich derzeit mit einem löse table
, siehe unten. Grundsätzlich möchte ich, dass zwei Divs 100% der verfügbaren Breite einnehmen, aber nur so viel vertikalen Raum wie nötig einnehmen (was auf dem Bild nicht wirklich so offensichtlich ist). Die beiden sollten immer genau die gleiche Höhe haben, mit einer kleinen Linie dazwischen, wie gezeigt.
(Quelle: pici.se )
Das ist alles sehr einfach zu machen table
, was ich gerade mache. Ich bin jedoch nicht besonders an der Lösung interessiert, da dies semantisch gesehen eigentlich keine Tabelle ist.
html
css
html-table
Deniz Dogan
quelle
quelle
Antworten:
Sie können Spalten gleicher Höhe in CSS erhalten, indem Sie den unteren Abstand einer großen Menge, den unteren negativen Rand derselben Menge anwenden und die Spalten mit einem Div umgeben, dessen Überlauf ausgeblendet ist. Das vertikale Zentrieren des Textes ist etwas schwieriger, aber dies sollte Ihnen auf dem Weg helfen.
Ich denke, das ist erwähnenswert
Die vorherige Antwort von streetpc hat ungültiges HTML, der Doctype ist XHTML und es gibt einfache Anführungszeichen um die Attribute. Bemerkenswert ist auch dasSie benötigen kein zusätzliches Element mitclear
on, um die internen Schwimmer des Containers zu löschen. Wenn Sie einen versteckten Überlauf verwenden, werden die Floats in allen Nicht-IE-Browsern gelöscht. Wenn Sie dann nur etwas hinzufügen, um hasLayout wie width oder zoom: 1 zu erhalten, wird der IE seine internen Floats löschen.Ich habe dies in allen modernen Browsern FF3 + Opera9 + Chrome Safari 3+ und IE6 / 7/8 getestet. Es mag wie ein hässlicher Trick erscheinen, aber es funktioniert gut und ich benutze es oft in der Produktion.
Ich hoffe das hilft.
quelle
Es ist Jahr 2012 + n, also wenn Sie nicht mehr kümmern sich um IE6 / 7,
display:table
,display:table-row
unddisplay:table-cell
Arbeit in allen modernen Browsern:http://www.456bereastreet.com/archive/200405/equal_height_boxes_with_css/
Update 17.06.2016: Wenn Sie der Meinung sind, dass die Zeit dafür gekommen ist
display:flex
, schauen Sie sich Flexbox Froggy an .quelle
display: flex
?Sie sollten Flexbox verwenden, um dies zu erreichen. Es wird in IE8 und IE9 nicht unterstützt und nur mit dem Präfix -ms in IE10, aber alle anderen Browser unterstützen es. Für Herstellerpräfixe sollten Sie auch Autoprefixer verwenden .
quelle
Sie können dies mit js zum Laufen bringen:
quelle
Dies ist ein klassisches Problem in CSS. Dafür gibt es keine wirkliche Lösung.
Dieser Artikel von A List Apart ist eine gute Lektüre zu diesem Problem. Es wird eine Technik namens "Faux Columns" verwendet, die darauf basiert, dass ein vertikal gekacheltes Hintergrundbild auf dem Element mit den Spalten vorhanden ist , wodurch die Illusion von Spalten gleicher Länge entsteht. Da es sich auf dem Wrapper der schwebenden Elemente befindet, ist es so lang wie das längste Element.
Die A List Apart-Redakteure haben diesen Hinweis zum Artikel:
Die Technik erfordert vollständig statische Breitenentwürfe, die mit den Flüssigkeitslayouts und reaktionsschnellen Entwurfstechniken, die heutzutage für geräteübergreifende Standorte beliebt sind, nicht gut funktionieren. Für Standorte mit statischer Breite ist dies jedoch eine zuverlässige Option.
quelle
Ich hatte ein ähnliches Problem und meiner Meinung nach ist es die beste Option, nur ein wenig Javascript oder JQuery zu verwenden.
Sie können gewünschte Divs auf die gleiche Höhe bringen, indem Sie den höchsten Div-Wert erhalten und diesen Wert auf alle anderen Divs anwenden. Wenn Sie viele Divs und viele Lösungen haben, schlage ich vor, wenig fortgeschrittenen js-Code zu schreiben, um herauszufinden, welcher der Divs der höchste ist, und dann seinen Wert zu verwenden.
Mit jquery und 2 divs ist es sehr einfach, hier ist Beispielcode:
$('.smaller-div').css('height',$('.higher-div').css('height'));
Und zum Schluss gibt es noch eine letzte Sache. Ihre Polsterung (oben und unten) muss gleich sein! Wenn Sie eine größere Polsterung haben, müssen Sie den Polsterungsunterschied beseitigen.
quelle
Soweit ich weiß, können Sie dies mit aktuellen CSS-Implementierungen nicht tun. Um zwei Spalten mit gleicher Höhe zu erstellen, benötigen Sie JS.
quelle
Dies funktioniert bei mir in IE 7, FF 3.5, Chrome 3b, Safari 4 (Windows).
Funktioniert auch in IE 6, wenn Sie das klarere Div unten auskommentieren. Bearbeiten : wie Natalie Downe sagte, können Sie fügen Sie einfach
width: 100%;
auf ,#container
statt.Ich kenne keine CSS-Methode, um den Text vertikal im rechten Div zu zentrieren, wenn das Div keine feste Höhe hat. Wenn dies
line-height
der Fall ist, können Sie den Wert auf den gleichen Wert wie die Div-Höhe setzen und ein inneres Div mit Ihrem Text einfügendisplay: inline; line-height: 110%
.quelle
Mit Javascript können Sie die beiden div-Tags auf dieselbe Höhe bringen. Das kleinere div wird mit dem folgenden Code auf die gleiche Höhe wie das höchste div-Tag eingestellt:
Mit "left" und "right" sind die IDs der div-Tags.
quelle
Mit der CSS-Eigenschaft -> display: table-cell
quelle
Verwenden Sie mit JS
data-same-height="group_name"
alle Elemente, die dieselbe Höhe haben sollen .Das Beispiel: https://jsfiddle.net/eoom2b82/
Der Code:
quelle
Ich musste etwas Ähnliches tun, hier ist meine Implementierung. Um den Zweck zusammenzufassen, müssen zwei Elemente die Breite eines bestimmten übergeordneten Containers einnehmen und die Höhe nur so hoch sein, wie sie sein muss. Im Wesentlichen entspricht die Höhe der maximalen Höhe der größten Menge an Inhalt, der andere Behälter ist jedoch bündig.
html
CSS
quelle
Vor einigen Jahren löste die
float
Eigenschaft dieses Problem mit demtable
Ansatzdisplay: table;
unddisplay: table-row;
unddisplay: table-cell;
.Aber jetzt mit der flex-Eigenschaft können Sie es mit 3 Codezeilen lösen:
display: flex;
undflex-wrap: wrap;
undflex: 1 0 50%;
1 0 50%
sind dieflex
Werte, die wir gegeben haben:flex-grow flex-shrink flex-basis
jeweils. Es ist eine relativ neue Verknüpfung in Flexbox, um zu vermeiden, dass sie einzeln eingegeben werden. Ich hoffe das hilft jemandem da draußenquelle