Sie finden viele Tutorials zu Menüleisten in HTML, aber für diesen speziellen (obwohl IMHO generischen) Fall habe ich keine vernünftige Lösung gefunden:
# THE MENU ITEMS SHOULD BE JUSTIFIED JUST AS PLAIN TEXT WOULD BE #
# ^ ^ #
- Es gibt eine unterschiedliche Anzahl von Nur-Text-Menüelementen und das Seitenlayout ist flüssig.
- Der erste Menüpunkt sollte linksbündig sein, der letzte Menüpunkt sollte rechtsbündig sein.
- Die restlichen Elemente sollten in der Menüleiste optimal verteilt sein.
- Die Anzahl variiert, daher besteht keine Möglichkeit, die optimalen Breiten vorab zu berechnen.
Beachten Sie, dass eine TABELLE auch hier nicht funktioniert:
- Wenn Sie alle TDs zentrieren, sind das erste und das letzte Element nicht richtig ausgerichtet.
- Wenn Sie die erste bzw. rechte Ausrichtung nach links und rechts ausrichten. Bei den letzten Elementen ist der Abstand nicht optimal.
Ist es nicht seltsam, dass es keinen offensichtlichen Weg gibt, dies mithilfe von HTML und CSS sauber zu implementieren?
span
anstelle eineshr
! Es funktioniert nicht wirklich, die Personalabteilung belegt sichtbaren Raum -#menu { border: solid 1px green; }
zur Bestätigung verwenden. Funktioniert auchdisplay: inline-block;
nicht im IE (... 7? CompatibilityView?) Für Elemente, die von Natur aus keine Inline-Elemente sind. HR ist ein Blockelement, daher schätze ich, dass Inline-Block für HR im IE nicht funktioniert. Wie auch immer, span.Ok, diese Lösung funktioniert unter IE6 / 7 nicht, da
:before
/ nicht unterstützt wird:after
, aber:Der Grund, warum ich das a-Tag als habe,
inline-block
ist, dass ich nicht möchte, dass die darin enthaltenen Wörter auch gerechtfertigt sind, und dass ich auch keine nicht unterbrechenden Leerzeichen verwenden möchte.quelle
text-justify: distribute-all-lines;
zumul
Selektor. Scheint proprietäres IE-Zeug zu sein.width: 100%
stattdessen verwendetmargin-left: 100%
:ul:after{content:""; margin-left:100%;}
Habe eine Lösung. Funktioniert in FF, IE6, IE7, Webkit usw.
Stellen Sie sicher, dass Sie keine Leerzeichen einfügen, bevor Sie das schließen
span.inner
. IE6 wird kaputt gehen.Sie können optional
.outer
eine Breite angebenquelle
.outer
line-height: 0
Kräften die Höhe der Liste, die so gerendert werden soll, als ob sie aus einer Zeile bestehen würde.Funktioniert mit Opera, Firefox, Chrome und IE
quelle
noch eine andere Lösung. Ich hatte keine Möglichkeit, das HTML wie das Hinzufügen einer angesehenen Klasse usw. anzugehen, also fand ich einen reinen CSS-Weg.
Funktioniert in Chrome, Firefox, Safari. Ich weiß nichts über IE.
Test: http://jsfiddle.net/c2crP/1
quelle
Machen Sie es
<p>
mittext-align: justify
?Update : Nevermind. Das funktioniert überhaupt nicht, wie ich gedacht hatte.
Update 2 : Funktioniert derzeit in keinem anderen Browser als dem IE, aber CSS3 unterstützt dies in Form von
text-align-last
quelle
text-align-last
funktioniert in allen anderen Browsern als Safari . Dies sollte der mögliche Gegner des Flexbox-Ansatzes oder des Span-Hacks sein .Für Gecko-basierte Browser habe ich diese Lösung entwickelt. Diese Lösung funktioniert nicht mit WebKit-Browsern (z. B. Chromium, Midori, Epiphany), sie zeigen jedoch nach dem letzten Element noch Leerzeichen an.
Ich habe die Menüleiste in einen begründeten Absatz eingefügt . Das Problem ist, dass die letzte Zeile eines begründeten Absatzes aus offensichtlichen Gründen nicht gerechtfertigt wird. Daher füge ich ein weites unsichtbares Element hinzu (z. B. ein Bild), das garantiert, dass der Absatz mindestens zwei Zeilen lang ist.
Jetzt wird die Menüleiste durch denselben Algorithmus gerechtfertigt, den der Browser zum Ausrichten von einfachem Text verwendet.
Code:
Bemerkung: Merkst du, dass ich betrogen habe? Um das Leerzeichenelement hinzuzufügen, muss ich die Breite der Menüleiste erraten. Diese Lösung hängt also nicht vollständig von den Regeln ab.
quelle
Text ist nur gerechtfertigt, wenn der Satz natürlich einen Zeilenumbruch verursacht. Alles, was Sie tun müssen, ist natürlich einen Zeilenumbruch zu erzwingen und zu verbergen, was in der zweiten Zeile steht:
CSS:
HTML:
Das li.break-Element muss sich in derselben Zeile wie das letzte Menüelement befinden und Inhalte enthalten (in diesem Fall ein nicht unterbrechendes Leerzeichen). Andernfalls werden in einigen Browsern kleine Elemente angezeigt, wenn es sich nicht in derselben Zeile befindet Zusätzlicher Platz am Ende Ihrer Zeile. Wenn dieser keinen Inhalt enthält, wird er ignoriert und die Zeile ist nicht gerechtfertigt.
Getestet in IE7, IE8, IE9, Chrome, Firefox 4.
quelle
Wenn Sie mit Javascript arbeiten möchten, ist dies möglich (dieses Skript basiert auf Mootools).
und die CSS
und das letzte HTML
quelle
Einfacheres Markup, getestet in Opera, FF, Chrome, IE7, IE8:
und css:
Live Beispiel .
quelle
Dies kann perfekt durch einige sorgfältige Messungen und den Selektor für das letzte Kind erreicht werden.
quelle
Ich kenne die ursprüngliche Frage, in der HTML + CSS angegeben ist, aber es wurde nicht ausdrücklich kein Javascript angegeben ;)
Beim Versuch, das CSS und das Markup so sauber wie möglich und semantisch so aussagekräftig wie möglich zu halten (unter Verwendung eines UL für das Menü), kam ich auf diesen Vorschlag. Wahrscheinlich nicht ideal, aber es kann ein guter Ausgangspunkt sein:
quelle