Neden margin: 0 auto ile ortalayamıyorum?


130

Bir #headerdiv var 100% widthve bu div içinde sırasız bir listem var. margin: 0 autoSırasız listeye başvurdum , ancak başlık div içinde ortalamıyor.

Biri bana nedenini söyleyebilir mi? Üst div'in genişliğini tanımlarsam, sırasız listenin kendisini ortalayabileceğini düşündüm margin: 0 auto. Neyi kaçırıyorum?

İşte kodum:

<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>

Hangi tarayıcıyı kullanıyorsunuz? IE / Win'in Margin auto ile bazı sorunları var.
JD Frias

Neden aynı zamanda sağda yüzüyorsun? Bunu ve muhtemelen şamandırayı da çıkar: li için bırak ve iyi olmalısın.
Simon

1
Bir gezinti çubuğu oluşturuyorum. Ul için şamandırayı sağdan çıkardım ve li için sola bir şamandıra koydum, ama bu şimdi hepsini sola koyuyor.
zeckdude

Yanıtlar:


135

Ana öğenin değil, merkezlediğiniz öğenin genişliğini tanımlamanız gerekir.

#header ul {
    margin: 0 auto;
    width: 90%;
}

Düzenleme : Tamam, test sayfasını şimdi gördüm ve bunu istediğinizi düşünüyorum:

#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;
}

2
Ya ul'nin genişliği dinamik olacaksa. Daha sonra PHP ile li'lerin içinde dinamik olarak farklı metinler koymayı düşünüyorum, bu yüzden bunu tahmin etmeye çalışıyorum.
zeckdude

2
Evet, o zaman margin: auto;
PatrikAkerstrand

1
Son önerinizi denedim ama işe yaramadı. En yeni sürümü önerilerinizle birlikte aynı konuma yükledim, böylece ne yaşadığımı görebilirsiniz. Ul sadece yaklaşık 50px sağa itiliyor.
zeckdude


1
BÜYÜK çalıştı! Bana yapıştığın ve bana yardım ettiğin için çok teşekkür ederim! Bu sorun beni öldürüyor! Tekrar teşekkürler!
zeckdude

44

Bir satır içi blok (soldan sağa) tüm satırı kapsar, bu nedenle burada sol ve / veya sağ kenar boşluğu çalışmaz. İhtiyacınız olan şey bir bloktur, bir bloğun solunda ve sağında sınırları vardır, bu nedenle kenar boşluklarından etkilenebilir.

Benim için şu şekilde çalışıyor:

#content {
display: block;
margin: 0 auto;
}

Çok yararlı öneriniz için teşekkür ederim, bir satır içi öğeyle aynı sorunu yaşadım ve neden çalışmadığını
anlayamadım

Bu en iyi cevaptır ve çok boyutlu pencere için işe yarar.
Yuda Prawira

14

Neden olmasın?

#header {
    text-align: center;
}

#header ul {
    display: inline;
}

Metin hizalama ekledim: sola; ul'yi ortalamak ve li içindeki metni sola hizalı tutmak için #header ul. Ayrıca, genişliğin dinamik (otomatik) olması için ul'yi satır içi blok olarak görüntülenecek şekilde ayarlamam gerekiyordu.
Brent Öz

3

İlk cevap en iyi biridir neden ben kalys.osmonov söyledi @, sen verebilir olarak aslında çalışma denedim ve değil, bilmiyorum text-align:centeriçin header, ama yapmak zorunda ulolduğu inline-blockziyade inlineve ayrıca bildirime sahip bu bir text-aligndereceye kadar iyi olmayan kalıtsal olabilir, bu yüzden daha iyi bir yol (IE 9'un altında çalışmamak) marginve kullanmaktır transform. Sadece aşağıdaki gibi kaldırın float rightve margin;0 autoburadan ul:

#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 */
}

Bu şekilde, ulIE8 vb. Umursamıyorsanız dinamik merkez genişliği oluşturma sorununu çözebilirsiniz .


0

Ul etiketinin genişliğini ayarlayabiliriz, sonra ortaya hizalar.

#header ul {
    display: block;
    margin: 0 auto;
    width: 420px;
    max-width: 100%;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.