Ich habe eine Seite mit folgender Struktur:
<div id="header"></div>
<div id="main">
<div id="navigation"></div>
<div id="content"></div>
</div>
<div id="footer"></div>
Die Navigation befindet sich links und der Inhaltsbereich rechts. Die Informationen für den Inhaltsbereich werden über PHP abgerufen, sodass sie jedes Mal anders sind.
Wie kann ich die Navigation vertikal skalieren, sodass ihre Höhe der Höhe des Inhaltsbereichs entspricht, unabhängig davon, welche Seite geladen wird?
display: flex; align-items: stretch;
für die div # main einstellen . Und nicht verwendenheight: 100%
für div # contentAntworten:
HINWEIS : Diese Antwort gilt für ältere Browser ohne Unterstützung des Flexbox-Standards. Einen modernen Ansatz finden Sie unter: https://stackoverflow.com/a/23300532/1155721
Ich schlage vor, Sie werfen einen Blick auf Spalten gleicher Höhe mit browserübergreifendem CSS und No Hacks .
Grundsätzlich ist es nicht trivial, dies mit CSS auf browserkompatible Weise zu tun (aber mit Tabellen trivial). Suchen Sie sich also eine geeignete vorgefertigte Lösung.
Die Antwort hängt auch davon ab, ob Sie 100% Höhe oder gleiche Höhe wünschen. Normalerweise ist es gleich hoch. Wenn es 100% Höhe ist, ist die Antwort etwas anders.
quelle
border:1px solid blue
z. B. aufcontainer2
: Der blaue Rand befindet sich in den ersten beiden Spalten, nicht nur in der zweiten Spalte, wie Sie es erwartet hätten.display:table
Für die Eltern:
Sie sollten einige Präfixe hinzufügen, http://css-tricks.com/using-flexbox/ .
Bearbeiten: Wie @Adam Garner feststellte, Elemente ausrichten: strecken; wird nicht gebraucht. Seine Verwendung ist auch für Eltern, nicht für Kinder. Wenn Sie das Dehnen von Kindern definieren möchten, verwenden Sie align-self.
quelle
align-items: center
dann verwenden, muss der Gegenstand, den Sie dehnen müssen, verwendet werdenalign-self: normal
Dies ist ein frustrierendes Problem, das sich ständig mit Designern befasst. Der Trick ist, dass Sie die Höhe für BODY und HTML in Ihrem CSS auf 100% einstellen müssen.
Dieser scheinbar sinnlose Code soll dem Browser definieren, was 100% bedeutet. Frustrierend, ja, aber der einfachste Weg.
quelle
html { height: 100%; } body { height: 98%; }
.Ich finde, dass das Setzen der beiden Spalten auf
display: table-cell;
anstattfloat: left;
gut funktioniert.quelle
Wenn es Ihnen nichts ausmacht, dass das Navigations-Div im Falle eines unerwartet kurzen Inhalts-Divs abgeschnitten wird, gibt es mindestens einen einfachen Weg:
Ansonsten gibt es die Faux- Column - Technik.
quelle
quelle
Verwenden von jQuery:
quelle
Math.max()
wäre dein Freund hier.css
Funktion können Sie nicht zwischen Bildschirm- und Druckmedien unterscheiden, wie dies normalerweise bei der Verwendung von reinen CSS-Lösungen der Fall ist. Daher können Druckprobleme auftreten.Versuchen Sie, den unteren Rand zu 100% zu machen.
quelle
Schauen Sie sich dieses Beispiel an .
quelle
height: 100%
aber es stellte sich heraus, dass es nicht benötigt wurde.height : <percent>
funktioniert nur, wenn Sie alle übergeordneten Knoten mit der angegebenen prozentualen Höhe und einer festen Höhe in Pixel, ems usw. auf der obersten Ebene haben. Auf diese Weise wird die Höhe auf Ihr Element herabgesetzt.Sie können 100% für HTML- und Body-Elemente angeben, wie bereits bei @Travis angegeben, damit die Seitenhöhe auf Ihre Knoten herabfällt.
quelle
Nach langem Suchen und Ausprobieren löste nichts mein Problem außer
auf die Kinder div
und für Eltern wenden Sie dies an
Außerdem verwende ich Bootstrap und dies hat die Reaktion für mich nicht beschädigt.
quelle
flex-direction: column;
damit dies für mich funktioniert.Basierend auf der in diesem Artikel beschriebenen Methode habe ich eine .Less dynamische Lösung erstellt:
Html:
Weniger:
quelle
display: grid
Zum übergeordneten Element hinzufügenquelle
Ich weiß, dass es eine lange Zeit her ist, seit die Frage gestellt wurde, aber ich fand eine einfache Lösung und dachte, jemand könnte sie verwenden (Entschuldigung für das schlechte Englisch). Hier kommt's:
CSS
HTML
Einfaches Beispiel. Beachten Sie, dass Sie sich in Reaktionsfähigkeit verwandeln können.
quelle
Meine Lösung:
quelle
Der Titel und der Inhalt der Frage enthalten einen gewissen Widerspruch. Der Titel spricht von einem übergeordneten Div, aber die Frage lässt es so klingen, als ob Sie möchten, dass zwei Geschwister-Divs (Navigation und Inhalt) dieselbe Höhe haben.
Möchten Sie (a), dass sowohl Navigation als auch Inhalt 100% der Höhe von main entsprechen, oder (b) dass Navigation und Inhalt dieselbe Höhe haben?
Ich gehe davon aus, dass (b) ... wenn dem so ist, denke ich nicht, dass Sie dies angesichts Ihrer aktuellen Seitenstruktur tun können (zumindest nicht mit reinem CSS und ohne Skripterstellung). Sie müssten wahrscheinlich etwas tun wie:
und stellen Sie das Inhalts-Div so ein, dass es einen linken Rand hat, unabhängig von der Breite des Navigationsbereichs. Auf diese Weise befindet sich der Inhalt des Inhalts rechts von der Navigation und Sie können das Navigations-Div auf 100% der Höhe des Inhalts einstellen.
BEARBEITEN: Ich mache das komplett in meinem Kopf, aber Sie müssten wahrscheinlich auch den linken Rand des Navigationsbereichs auf einen negativen Wert setzen oder den absoluten linken Wert auf 0 setzen, um ihn ganz nach links zurückzuschieben. Das Problem ist, dass es viele Möglichkeiten gibt, dies zu erreichen, aber nicht alle sind mit allen Browsern kompatibel.
quelle
[Ich beziehe mich in einer anderen Antwort auf Dmitys Less-Code] Ich vermute, dass dies eine Art "Pseudocode" ist?
Soweit ich weiß, versuchen Sie es mit der Faux-Column-Technik, die den Trick machen sollte.
http://www.alistapart.com/articles/fauxcolumns/
Hoffe das hilft :)
quelle
quelle
gibt
position: absolute;
das Kind gearbeitet in meinem Fallquelle
Sie verwenden CSS Flexbox
quelle
Diese Antwort ist nicht mehr ideal, da CSS-Flexbox und -Raster in CSS implementiert wurden. Es ist jedoch immer noch eine funktionierende Lösung
Auf einem kleineren Bildschirm möchten Sie wahrscheinlich die Höhe automatisch beibehalten, da col1, col2 und col3 aufeinander gestapelt sind.
Nach einem Medienabfrage-Haltepunkt möchten Sie jedoch, dass Spalten nebeneinander mit der gleichen Höhe für alle Spalten angezeigt werden.
1125 px ist nur ein Beispiel für einen Haltepunkt für die Fensterbreite, nach dem alle Spalten auf die gleiche Höhe eingestellt werden sollen.
Sie können natürlich bei Bedarf weitere Haltepunkte festlegen.
quelle
Ich hatte das gleiche Problem, es funktionierte , basierend auf Hakam Fostok Antwort, habe ich ein kleines Beispiel erstellt, in einigen Fällen kann es funktionieren könnte , ohne hinzuzufügen ,
display: flex;
undflex-direction: column;
auf dem übergeordneten ContainerJSFiddle
quelle
Wie bereits gezeigt, ist die Flexbox am einfachsten. z.B.
Dadurch werden alle untergeordneten Elemente an der Mitte innerhalb des übergeordneten Elements ausgerichtet.
quelle
Von:
http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css
gibt Bootstrap an, aber Sie benötigen kein Bootstrap, um dies zu verwenden. Die Beantwortung dieser alten Frage, da dies für mich funktioniert hat und ziemlich einfach zu implementieren scheint.
Dies war die gleiche Antwort, die ich auf diese Frage gegeben habe
quelle
Hier Old Fashion Demo basierend auf
position: absolute
Content Container undposition: relative
Parent Container.Was die moderne Art betrifft, sind Flexboxen die besten.
quelle
Der einfachste Weg, dies zu tun, besteht darin, es einfach zu fälschen. A List Apart hat dies im Laufe der Jahre ausführlich behandelt, wie in diesem Artikel von Dan Cederholm aus dem Jahr 2004 .
So mache ich es normalerweise:
Sie können diesem Design einfach einen Header hinzufügen, indem Sie #container in ein anderes div einschließen, das Header-div als Geschwister des # Containers einbetten und die Rand- und Breitenstile in den übergeordneten Container verschieben. Außerdem sollte das CSS in eine separate Datei verschoben und nicht inline usw. usw. aufbewahrt werden. Schließlich kann die Clearfix-Klasse auf positioniseverything gefunden werden .
quelle