Wie kann eine ungeordnete Liste mit unbekannter Breite horizontal zentriert werden?


70

Es ist üblich, dass eine Reihe von Links in einer Fußzeile in einer Liste dargestellt wird, z.

<div id="footer">
    <ul>
        <li><a href="#">Home</a></li>
        <li><a href="#">About</a></li>
        <li><a href="#">Contact</a></li>
    </ul>
</div>

Ich möchte, dass alles in der div # -Fußzeile horizontal zentriert ist. Wenn es ein Absatz wäre, würden Sie einfach sagen : p { text-align: center; }. Oder wenn ich die Breite des wüsste, <ul>könnte ich einfach sagen#footer ul { width: 400px; margin: 0 auto; } .

Aber wie zentrieren Sie die ungeordneten Listenelemente, ohne eine feste Breite für das festzulegen? <ul> ?

BEARBEITEN: Klarstellung - Die Listenelemente sollten nebeneinander und nicht unten stehen.

Antworten:


164

Die Lösung, wenn Ihre Listenelemente sein können, display: inlineist ganz einfach:

#footer { text-align: center; }
#footer ul { list-style: none; }
#footer ul li { display: inline; }

Allerdings müssen Sie oft display:blockauf Ihrem <li>s verwenden. In diesem Fall funktioniert das folgende CSS:

#footer { width: 100%; overflow: hidden; }
#footer ul { list-style: none; position: relative; float: left; display: block; left: 50%; }
#footer ul li { position: relative; float: left; display: block; right: 50%; }

Das ist toll. Ich habe nie daran gedacht, display: inline zu verwenden, um dies zu lösen.
— Brett DeWoody

Wie wäre es mit display: inline-blockauf Ihrem <li>s? Sie können sie mit Textausrichtung zentrieren, und dennoch verhalten sie sich bei Bedarf wie ein Block.
— Bis zum

34

Verwenden Sie das folgende CSS, um Ihr Problem zu lösen

#footer{ text-align:center; height:58px;}
#footer ul {  font-size:11px;}
#footer ul li {display:inline-block;}

Hinweis : Nicht float:leftin li verwenden. es wird dein li dazu bringen, sich links auszurichten.


12

Noch eine Lösung:

#footer { display:table; margin:0 auto; }
#footer li { display:table-cell; padding: 0px 10px; }

Dann springt ul beim Zoomen von Text nicht in die nächste Zeile.


1
Ich fand dieses hier das Beste. Großartige Idee!
— Kenton de Jong

Ich bin hierher zurückgekehrt, um dies ein zweites Mal zu benutzen, und wieder funktioniert es! Vielen Dank
— Scott Dallas

Genau das suche ich. Vielen Dank!
— R. Canser Yanbakan

8

Es hängt davon ab, ob Sie meinen, dass die Listenelemente unter dem vorherigen oder rechts vom vorherigen liegen, dh:

Home
About
Contact

oder

Home | About | Contact

Der erste, mit dem Sie einfach arbeiten können:

#wrapper { width:600px; background: yellow; margin: 0 auto; }
#footer ul { text-align: center; list-style-type: none; }

Das zweite könnte so gemacht werden:

#wrapper { width:600px; background: yellow; margin: 0 auto; }
#footer ul { text-align: center; list-style-type: none; }
#footer li { display: inline; }
#footer a { padding: 2px 12px; background: orange; text-decoration: none; }
#footer a:hover { background: green; color: yellow; }

2

Versuchen Sie, die Liste in ein Div zu verpacken, und geben Sie diesem Div die Inline-Eigenschaft anstelle Ihrer Liste.


0

Die Antwort von philfreo ist großartig, es funktioniert perfekt (browserübergreifend, mit IE 7+). Fügen Sie einfach meine Exp für das Ankertag in li hinzu.

#footer ul li { display: inline; }
#footer ul li a { padding: 2px 4px; } /* no display: block here */

#footer ul li { position: relative; float: left; display: block; right: 50%; }
#footer ul li a {display: block; left: 0; } 

2
Dies könnte ein Kommentar zu der Antwort gewesen sein, die @philfreo gegeben hat.
— Michael Reneer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.