Wie kann ich zwei Inline-Blöcke so ausrichten, dass einer links und der andere rechts in derselben Linie liegt? Warum ist das so schwer? Gibt es so etwas wie LaTeXs \ hfill, das den Raum zwischen ihnen verbrauchen kann, um dies zu erreichen?
Ich möchte keine Floats verwenden, da ich mit Inline-Blöcken die Baselines ausrichten kann. Und wenn das Fenster für beide zu klein ist, kann ich mit Inline-Blöcken einfach die Textausrichtung auf Mitte ändern und sie werden übereinander zentriert. Die relative (übergeordnete) + absolute (Element-) Positionierung hat dieselben Probleme wie Floats.
Der HTML5:
<header>
<h1>Title</h1>
<nav>
<a>A Link</a>
<a>Another Link</a>
<a>A Third Link</a>
</nav>
</header>
Das CSS:
header {
//text-align: center; // will set in js when the nav overflows (i think)
}
h1 {
display: inline-block;
margin-top: 0.321em;
}
nav {
display: inline-block;
vertical-align: baseline;
}
Sie sind direkt nebeneinander, aber ich möchte das nav
auf der rechten Seite.
position: absolute
undinline-block
Antworten:
Bearbeiten: 3 Jahre sind vergangen, seit ich diese Frage beantwortet habe und ich denke, dass eine modernere Lösung benötigt wird, obwohl die aktuelle die Sache macht :)
1. Flexbox
Es ist bei weitem das kürzeste und flexibelste. Wenden Sie dies
display: flex;
auf den übergeordneten Container an und passen Sie die Platzierung der untergeordneten Container folgendermaßen anjustify-content: space-between;
:Kann hier online gesehen werden - http://jsfiddle.net/skip405/NfeVh/1073/
Beachten Sie jedoch, dass die Flexbox-Unterstützung IE10 und höher ist. Wenn Sie IE 9 oder älter unterstützen müssen, verwenden Sie die folgende Lösung:
2.Sie können die
text-align: justify
Technik hier anwenden.Das Arbeitsbeispiel finden Sie hier: http://jsfiddle.net/skip405/NfeVh/4/ . Dieser Code funktioniert ab IE7
Wenn Inline-Block-Elemente in HTML nicht durch Leerzeichen getrennt sind, funktioniert diese Lösung nicht - siehe Beispiel http://jsfiddle.net/NfeVh/1408/ . Dies kann der Fall sein, wenn Sie Inhalte mit Javascript einfügen.
Wenn uns IE7 egal ist, lassen Sie einfach die Star-Hack-Eigenschaften weg. Das Arbeitsbeispiel mit Ihrem Markup finden Sie hier - http://jsfiddle.net/skip405/NfeVh/5/ . Ich habe gerade den
header:after
Teil hinzugefügt und den Inhalt begründet.Um das Problem des zusätzlichen Leerzeichens zu lösen, das mit dem Pseudoelement eingefügt wird,
after
kann man einen Trickfont-size
ausführen, indem man das für das übergeordnete Element auf 0 setzt und es für die untergeordneten Elemente auf 14px zurücksetzt. Das Arbeitsbeispiel für diesen Trick finden Sie hier: http://jsfiddle.net/skip405/NfeVh/326/quelle
font-size
ist eher unerwünscht. Ich schlage eine andere Lösung vor. Beachten Sie, dass der.header:after
Dekorateur eine Höhenlinie gleich addiertfont-size
. Zum Glück wissen wir, wie viel das ist. Es ist genau1em
! Also negative Margen zur Rettung! Diese Geige zeigt wie .Ich habe die Antwort von @ skip405 genutzt und ein Sass-Mixin dafür erstellt:
Es akzeptiert 3 Parameter. Der Container, das linke und das rechte Element. Um die Frage zu beantworten, können Sie sie beispielsweise folgendermaßen verwenden:
quelle
Wenn Sie keine Floats verwenden möchten, müssen Sie Ihr Navi einwickeln:
... und fügen Sie einige spezifischere CSS hinzu:
Möglicherweise müssen Sie etwas mehr tun, aber das ist ein Anfang.
quelle
Wenn Sie bereits JavaScript verwenden, um Inhalte zu zentrieren, wenn der Bildschirm zu klein ist (gemäß Ihrem Kommentar für Ihre Kopfzeile), können Sie Floats / Ränder mit JavaScript rückgängig machen, während Sie gerade dabei sind, und Floats und Ränder normal verwenden.
Sie können sogar CSS-Medienabfragen verwenden, um die Menge an JavaScript zu reduzieren, die Sie verwenden.
quelle
Ich denke, eine mögliche Lösung hierfür ist die Verwendung von
display: table
:JSFiddle: http://jsfiddle.net/yxxrnn7j/1/
quelle
Neue Möglichkeiten, Elemente richtig auszurichten:
Gitter :
Demo
Bootstrap 4. Richtig ausrichten :
Demo
quelle
Anzeige der linken Mitte und rechts der Eltern. Wenn Sie mehr als 3 Elemente haben, verwenden Sie nth-child () für diese.
HTML-Beispiel:
CSS-Beispiel:
quelle
Geben Sie es float: right und das h1 float: left und setzen Sie ein Element mit clear: beide nach ihnen.
quelle
Für beide Elemente verwenden
das für das 'nav' Element verwenden
quelle