Dies ist für ein Menü gedacht.
Zum Beispiel habe ich ein div-Element mit 3 Bereichen, die alle einen gewissen Rand, eine maximale Breite und einen Gleitkommawert haben (links oder rechts).
Es wird von links positioniert und
sieht folgendermaßen
[[span1][span2][span3] - lots of free space here].
aus : Ich möchte es wie folgt ausgleichen :
[[span1] - space - [span2] - space - [span3]]
Wie kann ich dies mit CSS tun? Ich bezweifle, dass es nicht möglich ist.
Beachten Sie, dass der Stil beim Hinzufügen oder Entfernen eines Menüelements beibehalten werden soll.
HTML:
<div id="menu">
<span class="menuitem"></span>
<span class="menuitem"></span>
<span class="menuitem"></span>
</div>
CSS:
#menu {
...
width:800px;
}
.menuitem {
display:block;
float:left;
margin-left:25px;
position:relative;
min-height:35px;
max-width:125px;
padding-bottom:10px;
text-align:center;
}
<span>
ist kein Blockelement, es sollte keinwidth
Eigentum akzeptierenAntworten:
Früher verwendeten Sie eine Tabelle, und Ihre Menüelemente waren gleichmäßig verteilt, ohne dass die Breite für die Anzahl der Elemente explizit angegeben werden musste.
Wenn es nicht für IE 6 und 7 war (wenn das von Belang ist), können Sie dasselbe in CSS tun.
CSS:
Ohne die Anzahl der Artikel anpassen zu müssen.
Beispiel ohne
table-layout:fixed
- die Zellen sind gleichmäßig über die gesamte Breite verteilt, aber nicht unbedingt gleich groß, da ihre Breite durch ihren Inhalt bestimmt wird.Beispiel mit
table-layout:fixed
- Die Zellen sind unabhängig von ihrem Inhalt gleich groß. (Danke an @DavidHerse in den Kommentaren für diesen Zusatz.)Wenn Sie möchten, dass das erste und das letzte Menüelement links und rechts ausgerichtet sind, können Sie das folgende CSS hinzufügen:
quelle
Sie können begründen verwenden.
Dies ist ähnlich wie bei den anderen Antworten, außer dass sich die Elemente ganz links und ganz rechts an den Rändern befinden, anstatt gleich weit voneinander entfernt zu sein - [a ... b ... c statt .a..b..c.]
Ein Problem ist, dass Sie zwischen jedem Element Leerzeichen lassen müssen. [Siehe die Geige.]
Es gibt zwei Gründe, die Menüelemente auf Inline-Block zu setzen:
<li>
), muss die Anzeige auf Inline oder Inline-Block eingestellt werden, um in derselben Zeile zu bleiben.<span>click here</span>
) hat, wird jedes Wort gleichmäßig verteilt, wenn es auf Inline gesetzt ist, aber nur die Elemente werden verteilt, wenn es auf Inline-Block gesetzt ist.Siehe die JSFiddle
BEARBEITEN :
Jetzt, da Flexbox breite Unterstützung bietet (alle Nicht-IE und IE 10+), gibt es einen "besseren Weg".
Unter der Annahme der gleichen Elementstruktur wie oben benötigen Sie lediglich:
Wenn Sie möchten, dass auch die äußeren Elemente voneinander beabstandet sind, wechseln Sie einfach zwischen Leerzeichen und Leerzeichen.
Siehe die JSFiddle
quelle
Wenn jemand einen etwas anderen Ansatz ausprobieren möchte, kann er FLEX verwenden.
HTML
CSS
Hier ist die Geige: http://jsfiddle.net/ynemh3c2/ (Versuchen Sie auch, Divs hinzuzufügen / zu entfernen)
Hier habe ich davon erfahren: https://css-tricks.com/snippets/css/a-guide- zu-flexbox /
quelle
justify-content: space-between
unddisplay: flex
ist alles was wir brauchten, aber danke an @Pratul für die Inspiration!quelle
flex-wrap: wrap
diese Option, um den Inhalt zu umwickeln.Dies ist der schnelle und einfache Weg, dies zu tun
CSS
Dann passen die
width
derspan
s für die Zahl , die Sie haben.Beispiel: http://jsfiddle.net/jasongennaro/wvJxD/
quelle
width: 33%;
ist ungefähr so nah wie möglich, basiert jedoch auf dem übergeordneten Container und nicht auf der Anzahl der untergeordneten Elemente. Wenn Sie möchten, dass es basierend auf den untergeordneten (span) Elementen angepasst wird, müssen Sie wahrscheinlich mit JavaScript spielen.width
s automatisch basierend auf der Anzahl derspan
s berechnen, aber das würde einige js erfordern. Wenn sich Ihr Menü nicht häufig ändert, sollte das Anpassenwidth
kein Problem sein.Ich habe es mit der folgenden CSS-Kombination geschafft:
quelle
quelle
Sie müssen nur das div mit id
#menu
als flexiblen Container wie folgt anzeigen :quelle
Machen Sie alle Bereiche zu Inline-Block-Elementen. Erstellen Sie eine leere Streckenspanne mit einer Breite von 100% unter der Liste der Bereiche, die die Menüelemente enthalten. Als nächstes machen Sie das Div, das die Bereiche enthält, textausgerichtet: gerechtfertigt. Dies würde dann die Inline-Block-Elemente [Ihre Menüelemente] zwingen, gleichmäßig zu verteilen.
https://jsfiddle.net/freedawirl/bh0eadzz/3/
quelle