Mam element #header
DIV, 100% width
a wewnątrz tego elementu DIV mam nieuporządkowaną listę. Zastosowałem się margin: 0 auto
do listy nieuporządkowanej, ale nie wyśrodkowuje jej w nagłówku div.
Czy ktoś może mi powiedzieć, dlaczego? Pomyślałem, że jeśli zdefiniuję szerokość nadrzędnego elementu div, to lista nieuporządkowana powinna być w stanie wyśrodkować się margin: 0 auto
. czego mi brakuje?
Oto mój kod:
<style>
* {
margin: 0;
padding: 0;
}
#header {
width: 100%;
background-color: #333;
min-height: 160px;
font-family:Arial, Helvetica, sans-serif;
}
#sitename {
font-size: 50px;
width: 620px;
margin:0 auto;
padding-top: 35px;
color:#999;
}
#header ul {
float: right;
margin: 0 auto;
}
#header ul li {
float: left;
padding-right: 20px;
list-style-type: none;
font-size: 20px;
}
</style>
</head>
<body>
<div id="header">
<h1 id="sitename">Photography Auction Site</h1>
<ul>
<li>List of Photos</li>
<li>Image Gallery</li>
<li>Contact Us</li>
</ul>
</div>
</body>
</html>
Odpowiedzi:
Musisz zdefiniować szerokość elementu, który chcesz wyśrodkować, a nie elementu nadrzędnego.
#header ul { margin: 0 auto; width: 90%; }
Edycja : Ok, widziałem teraz stronę testową, a oto jak myślę, że chcesz to:
#header ul { list-style:none; margin:0 auto; width:90%; } /* Remove the float: left; property, it interferes with display: inline and * causes problems. (float: left; makes the element implicitly a block-level * element. It is still good to use display: inline on it to overcome a bug * in IE6 and below that doubles horizontal margins for floated elements) * The styles below is the full style for the list-items. */ #header ul li { color:#CCCCCC; display:inline; font-size:20px; padding-right:20px; }
źródło
Blok inline obejmuje całą linię (od lewej do prawej), więc margines lewy i / lub prawy nie będzie tutaj działać. To, czego potrzebujesz, to blok, blok ma obramowania po lewej i prawej stronie, więc można wpływać na marginesy.
Tak to działa u mnie:
#content { display: block; margin: 0 auto; }
źródło
Dlaczego nie?
#header { text-align: center; } #header ul { display: inline; }
źródło
Nie wiem, dlaczego pierwsza odpowiedź jest najlepszy, próbowałem go i nie działa w rzeczywistości, jak @ kalys.osmonov powiedział, można dać
text-align:center
sięheader
, ale trzeba zrobićul
jakinline-block
zamiastinline
, a także trzeba powiadomienia któretext-align
mogą być dziedziczone, co w pewnym stopniu nie jest dobre, więc lepszym sposobem (nie działającym poniżej IE 9) jest użyciemargin
itransform
. Po prostu usuńfloat right
imargin;0 auto
odul
, jak poniżej:#header ul { /* float: right; */ /* margin: 0 auto; */ display: inline-block; margin-left: 50%; /* From parent width */ transform: translateX(-50%); /* use self width which can be unknown */ -ms-transform: translateX(-50%); /* For IE9 */ }
W ten sposób można rozwiązać problem polegający na tworzeniu dynamicznej szerokości
ul
środka, jeśli nie obchodzi Cię IE8 itp.źródło
Możemy ustawić szerokość tagu ul, a wtedy wyrówna się on do środka.
#header ul { display: block; margin: 0 auto; width: 420px; max-width: 100%; }
źródło