In CSS Flexbox, warum gibt es keine "rechtfertigen-Elemente" und "rechtfertigen-selbst" - Eigenschaften?

Betrachten die Hauptachse und die Querachse von einem flex-container:

In CSS Flexbox, warum gibt es keine
                                                                                                                       Source: W3C

Ausrichten flex-Elemente entlang der Hauptachse gibt es eine Eigenschaft:

Ausrichten flex-Elemente entlang der Querachse gibt es drei Eigenschaften:

In dem Bild oben, die Hauptachse ist horizontal-und quer-Achse ist vertikal. Dies sind die Standard-Richtungen eines flex-container.

Jedoch diese Richtungen können leicht ausgetauscht werden mit der flex-direction Eigenschaft.

/* main axis is horizontal, cross axis is vertical */
flex-direction: row;
flex-direction: row-reverse;

/* main axis is vertical, cross axis is horizontal */    
flex-direction: column;
flex-direction: column-reverse;

(Kreuz-Achse immer senkrecht zur Hauptachse.)

Meiner Sicht beschreiben, wie die Achsen' Arbeit ist, dass es scheint nicht zu sein, nichts besonderes entweder Richtung. Hochachse, Querachse, Sie sind beide gleich in Bezug auf die Bedeutung und flex-direction macht es leicht hin und her zu wechseln.

Also, warum tut der Kreuz-Achse, erhalten Sie zwei zusätzliche Ausrichtung Eigenschaften?

Warum sind align-content und align-items konsolidiert in einer Eigenschaft für die Haupt-Achse?

Warum die Hauptachse nicht bekommen justify-self Eigenschaft?


Szenarien, in denen diese Eigenschaften nützlich wäre:

  • platzieren Sie einen flex-Punkt in der Ecke des flex-container

    #box3 { align-self: flex-end; justify-self: flex-end; }

  • dass eine Gruppe von flex-Elemente ausrichten-rechts ( justify-content: flex-end ), aber das erste Element Links ausrichten (justify-self: flex-start)

    Betrachten einen Abschnitt mit einer Gruppe von nav-Elementen und ein logo. Mit justify-self dem logo angeglichen werden könnten, während Links der nav-Elemente bleiben weit rechts, und die ganze Sache passt reibungslos ("beugt") an verschiedene Bildschirmgrößen an.

  • in einer Reihe von drei flex-Elemente, befestigen Sie den mittleren Punkt auf der Mitte der container (justify-content: center) und richten Sie die benachbarten Elemente der container-Kanten (justify-self: flex-start und justify-self: flex-end).

    Beachten Sie, dass die Werte space-around und space-between auf
    justify-content Eigenschaft wird nicht halten Sie die mittlere Element zentriert in Bezug auf die Behälter, wenn die benachbarten Elemente haben unterschiedliche breiten.

CSS:

#container {
  display: flex;
  justify-content: space-between;
  background-color: lightyellow;
}
.box {
  height: 50px;
  width: 75px;
  background-color: springgreen;
}
.box1 {
  width: 100px;
}
.box3 {
  width: 200px;
}
#center {
  text-align: center;
  margin-bottom: 5px;
}
#center > span {
  background-color: aqua;
  padding: 2px;
}

HTML:

<div id="center">
  <span>TRUE CENTER</span>
</div>

<div id="container">
  <div class="box box1"></div>
  <div class="box box2"></div>
  <div class="box box3"></div>
</div>

<p>note that the middle box will only be truly centered if adjacent boxes are equal width</p>

jsFiddle-version


Als dies geschrieben wurde, gibt es keine Erwähnung von justify-self oder justify-items im flexbox-spec.

Jedoch in der CSS Box-Alignment-Modul, die der W3C unfertigen Vorschlag zur Einrichtung einer gemeinsamen Reihe von alignment-Eigenschaften für die Verwendung in alle box-Modelle, gibt es diese:

In CSS Flexbox, warum gibt es keine
                                                                                                                       
Quelle: W3C

Werden Sie feststellen, dass justify-self und justify-items angedacht... aber nicht für flexbox.


Werde ich Ende mit der Wiederholung der wichtigsten Frage:

Warum gibt es keine "rechtfertigen-Elemente" und "rechtfertigen-selbst" - Eigenschaften?

  • Wie würden Sie erwarten, dass justify-self arbeiten für ein flex-Element? Angenommen, Sie haben Elemente a,b,c,d mit extra Raum zu verteilen um Sie herum, und die flex-container hat justify-content: space-between, so dass Sie am Ende wie |a, b, c, d|. Was würde es bedeuten, z.B. die justify-self: center oder 'rechtfertigen-self: flex-end", nur um item 'b' es? Wo würden Sie erwarten, dass es zu gehen? (Ich sehe einige demos in einer der Antworten hier, aber ich sehe nicht, eine klare Weise, dass es funktionieren würde, im Allgemeinen.)
  • (Alternativ: nehmen wir an, wir haben justify-content: flex-start, also die Elemente, die überfüllt sind am Anfang wie |abcd |. Was würde Sie erwarten, es zu tun, wenn Sie justify-self: [anything] auf Position 'b' es?)
  • Sie schrieb: "Wie würden Sie erwarten, dass justify-self arbeiten für ein flex-Element? Ich würde sagen, nicht so anders als auto Margen arbeiten bereits auf flex-Elemente. In Ihrem zweiten Beispiel justify-self: flex-end auf Position d bewegen würde, es auf die andere Seite. Das an sich wäre eine tolle Funktion, die auto Margen kann das schon tun. Ich stellte eine Antwort mit einer demonstration.
  • Ich bin meistens sehen mehr use-cases hier, und use-cases sind toll-aber das knifflige bit ist, wie Schuhlöffel diese in die tatsächliche Art und Weise, dass justify-content und justify-self angegeben sind, so dass Fälle mit Konflikten (wie die Szenarien, die ich fragte) sind klar & vernünftig definiert. Wie ich bereits in meiner Antwort hier {justify|align}-selfsind über das ausrichten von Elementen innerhalb einer größeren box, die Größe ist unabhängig von der {justify|align}-self Wert-und es gibt keine solche box, in der Haupt-Achse für flex-Element ausgerichtet werden, in.
  • RE "nicht anders als auto-Ränder" - ich war tatsächlich zu Fragen, wie man Sie sich vorstellen justify-self und justify-content interagieren würde, in Fällen, in denen Sie in Konflikt (wie die Szenarien, die ich angelegt). Auto-Margen einfach nicht die Interaktion mit justify-content an - Sie stehlen alles von der Verpackung Platz vor justify-content bekommt eine chance, es zu benutzen. So, auto Ränder sind nicht wirklich eine gute analog, wie dies funktionieren würde.
InformationsquelleAutor Michael_B | 2015-09-13
Schreibe einen Kommentar