CSS Flexbox: Wie richten Sie die untergeordneten Elemente einer flexbox-container an entgegengesetzten enden der Hauptachse?
Ich bin ein styling-header einer Webseite. Ich möchte den header einer einzigen Zeile, die enthält ein logo und einige Navigations-links. Ich fühle mich der beste und modernste Weg, um layout dieser header ist heute mit CSS3 ist flexbox, so das ist, was ich verwenden möchten.
Ich würde gerne für das logo so weit Links in die flex-container wie möglich und die restlichen Navigations-Elemente werden so weit rechts wie möglich. Dies kann leicht erreicht werden durch das floaten die Elemente Links und rechts, aber das ist nicht das, was ich gerne tun würde. So...
, Wie Sie tun, richten Sie die untergeordneten Elemente einer flexbox-container an entgegengesetzten enden der Hauptachse?
Es ist eine Eigenschaft, die für die flexbox-Kind-Elemente, die es Ihnen erlaubt, dies zu tun auf der Querachse, align-self
, aber es scheint keiner da ist, dies zu tun auf der Hauptachse.
Der beste Weg, die ich mit gekommen dies zu erreichen, ist das einfügen eines zusätzlichen, leeren, element zwischen dem logo und der Navigation links, um zu dienen als Abstandhalter. Aber ein Teil der Grund, warum ich bin, die Wahl zu verwenden flexbox für dieses header ist zusammenhängend mit einem responsive design und ich weiß nicht, einen Weg, um das Abstand-element nehmen, bis alle verbleibenden Speicherplatz, unabhängig von der Breite des Fensters anzeigen.
Hier ist, wo ich momentan stehe mit den mark-up, vereinfacht, um nur die Elemente relevant für diese situation.
HTML
<ul>
<!-- Should be as far left as possible -->
<li id="main">Some Logo <span>Some tag line.</span></li>
<!-- Should be as far right as possible -->
<li>Home</li>
<li>Products</li>
<li>Price Sheet</li>
<li>Capabilities</li>
<li>Contact</li>
</ul>
CSS
ul {
width: 100%;
display: flex;
flex-flow: row nowrap;
justify-content: flex-end;
align-items: center;
padding: 0;
margin: 0;
list-style: none;
}
li {
margin: 0 8px;
padding: 8px;
font-size: 1rem;
text-align: center;
font-weight: bold;
color: white;
background: green;
border: solid 4px #333;
}
#main { font-size: 2rem; }
#main span { font-size: 1rem; }
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Frage:
Dies ist genau das, was die
flex-grow
CSS-Regel entworfen wurde. Wenn nur ein Kind-element hat dieflex-grow
Attribut gesetzt, dann wird es dauern, bis alle verbleibenden Platz in der flex-container. Den nur markup, die Sie benötigen in diesem Fall ist der folgende:HTML:
CSS:
Eine Komplette Live-Demo:
CSS:
HTML:
JSFiddle Version: https://jsfiddle.net/7oaahkk1/
Ich denke, die einzige Flexibilität, die erforderlich ist, zumindest bei großen Bildschirmen), sollten auf den ersten flex-Element in der Liste. Die, die Sie wollen zu platzieren Sie Ihr logo an.
Durch die Einstellung dieser Elemente
flex-grow
Regel1
und dietext-align
zuleft
bleibt er auf der linken Seite, wächst in der Größe, so dass Sie sicher, dass alle anderen Elemente bleiben auf der rechten Seite. Da kann das logo haben eine größere Höhe als alle anderen Gegenstände, würde es Sinn machen, ändern Sie diealign-items
Regelbaseline
, machen Sie sicher, dass alle Elemente, die horizontal ausgerichtet sind.Außerdem habe ich noch ein paar media queries zum ändern der flex-Einstellungen entsprechend anpassen.
CSS:
HTML:
:nth-child
odernth-of-type
mitodd
odereven
Werte nutzlos. Gleiche gilt für JS-iteration.Im wesentlichen müssen Sie ein Zeile container mit zwei untergeordnete Spalten
UND "justify-content: space-between" - verschieben der Spalten an den enden
Check my snippet (ganze Seite)!
CSS:
HTML:
JSfiddle Demo
ul
über den rest der Objekte in der Liste und verwenden Sie geschachtelte flex-container. Dies ist flexbox zu handeln, die auf zwei Elementen.justify-content: space-between
auf die wichtigsten übergeordneten flexbox gleichmäßig Raum die beiden Elemente.CSS:
HTML:
nav
(oderdiv
oderspan
, für diese Angelegenheit) ein Kind von einemul
.Eine Möglichkeit ist, um einen rechten Rand auf das erste element
CSS:
HTML: