Ausrichten von Elementen Links und in der Mitte mit flexbox
Ich bin mit flexbox zu richten, mein Kind-Elemente. Was ich tun möchte-center ein element und lassen Sie die anderen ausgerichtet, um den sehr linken. Normalerweise würde ich nur die Links-element mit margin-right: auto
. Das problem ist, dass schiebt das center-element aus der Mitte. Ist das möglich ohne mit absoluter Positionierung?
HTML & CSS
CSS:
#parent {
align-items: center;
border: 1px solid black;
display: flex;
justify-content: center;
margin: 0 auto;
width: 500px;
}
#left {
margin-right: auto;
}
#center {
margin: auto;
}
HTML:
<div id="parent">
<span id="left">Left</span>
<span id="center">Center</span>
</div>
- Besuchen Sie diese Website verweisen, um flexbox: css-tricks.com/snippets/css/a-guide-to-flexbox
- Ich konnte nichts sehen dort, dass an meinem Problem.
- Ich habe dieses link als Referenz für die meisten genaue und Gründliche Beschreibung von flexbox. Wenn Sie nicht finden können, eine Antwort gibt, dann kann es nicht möglich sein. Eine Sache, die Sie ausprobieren können, ohne absolute Positionierung ist die Verwendung von zwei Behältern. Man wird ausrichten, die erste Schaltfläche auf der linken Seite, die zweite wird sich ausrichten an der Mitte. Drücken Sie dann die zweite mit negativem top-margin.
- Ja, es ist möglich ohne absolute Positionierung. Erstellen Sie ein drittes element in den HTML-Code (
#right
). Machen es identisch mit#left
, außer am anderen Ende des Containers. Wenden Sie den folgenden CSS#right
:visibility: hidden
undmargin-left: auto
. Jetzt diemargin-right: auto
auf#left
funktioniert wie gewünscht. Mehr Informationen finden Sie hier: stackoverflow.com/q/35250367/3597276
Du musst angemeldet sein, um einen Kommentar abzugeben.
EDIT: Sehen Solo ' s Antwort unten, es ist die bessere Lösung.
Die Idee hinter flexbox ist ein framework zur einfachen ausrichten von Elementen mit Variablen Dimensionen in einem container. Als solche, es macht wenig Sinn, um eine Anordnung, wobei die Breite eines Elements wird Total ignoriert. Im wesentlichen, das ist genau das, was die absolute Positionierung ist für, wie es dauert, das element aus dem normalen Fluss.
Soweit ich weiß, gibt es keine schöne Möglichkeit, dies zu tun, ohne mit
position: absolute;
, so würde ich vorschlagen, es zu benutzen... aber Wenn Sie WIRKLICH nicht wollen, oder nicht verwenden können, die absolute Positionierung, dann nehme ich an, Sie könnte verwenden Sie eine der folgenden Problemumgehungen.Wenn Sie wissen, die genaue Breite von der "Linken" div, dann könnte man ändern
justify-content
zuflex-start
(Links) und richten Sie dann die "Center" div wie diese:Wenn Sie nicht wissen, die Breite, dann könnte man die doppelten "Links" auf der rechten Seite, verwenden Sie
justify-content: space-between;
ausblenden und die neue Rechte element:Nur klar zu sein, das ist wirklich, wirklich hässlich... besser absolute Positionierung als duplicate content. 🙂
CSS:
HTML:
Hinzufügen Dritte leeres element:
Und die folgenden Stil:
Nur nach Links und rechts eingestellt sind, um zu wachsen und Dank der Tatsachen, dass...
...- center-element wird immer perfekt zentriert.
Dies ist viel besser als akzeptierte Antwort meiner Meinung nach, weil Sie nicht haben, um Kopie Links die Inhalte nach rechts und verstecken es, um gleiche Breite für beide Seiten es einfach magisch passiert (flexbox ist magisch).
In Aktion:
CSS:
HTML:
.parent::after{content: ''; flex: 1}
right
verlassen und div mit der Klasseleft
leer.text-align: right;
Klasse.right
.Versuchen, diese keine hacks 🙂
CSS
HTML
http://codepen.io/whisher/pen/XpGaEZ
Habe ich eine andere Lösung. Meiner Meinung nach, fügen Sie einen leeren block an das center-element ist gut, aber code-Weise bisschen hässlich. Meine Lösung für dieses ist unten
Wenn Sie nicht wollen, verlassen sich auf die Positionierung, die einzige Möglichkeit, die ich gefunden habe, dass es wirklich mittig ist die Verwendung einer Kombination von auto-margin und negative Marge verhindern, dass das element zentriert zu bekommen, geschoben über von der linken Seite ausgerichtet element. Dies erfordert, dass Sie wissen, die genaue Breite von der linken Seite ausgerichtet element obwohl.
CSS:
HTML:
Soweit ich weiß, dies ist möglich mit dem folgenden code.
https://jsfiddle.net/u5gonp0a/
CSS:
HTML: