“Marj: 0 auto;” için tam olarak ne gereklidir? çalışmak?


206

Bir öğedeki ayarın ortalamak margin: 0 auto;için kullanıldığını biliyorum (sol-sağ). Bununla birlikte, elementin ve ebeveyninin otomatik marjın çalışması için belirli kriterleri karşılaması gerektiğini biliyorum ve sihri asla doğru şekilde göremiyorum.

Yani sorum basit: margin: 0 auto;çocuğu sol-sağ ortalamak için bir öğe ve üst öğesi üzerinde hangi CSS özelliklerinin ayarlanması gerekiyor ?


Bu IE benim için asla düzgün görünmüyor ... bu yüzden ben de merak ediyorum.
mpen

5
@ Mark: IE margin: 0 auto;yalnızca standartlar modunda doğru şekilde işleyecektir , bu nedenle bir doktipe ihtiyacınız vardır (daha önce ihtiyaç duyulmamış gibi).
BoltClock

Yanıtlar:


293

Kafamın üstünden:

  1. Eleman olmalıdır blok düzeyi, örneğin, display: blockya dadisplay: table
  2. Öğe yüzmemelidir
  3. Elemanın sabit veya mutlak pozisyonu olmamalıdır 1

Diğer insanların kafalarının üstünde:

  1. Öğenin 2width olmayan bir değeri olmalıdırauto

Tüm bu koşulların çalışması için ortalanan eleman için geçerli olması gerektiğini unutmayın .


1 Bunun tek istisnası vardır: senin sabit veya mutlak olarak konumlanmış eleman varsa left: 0; right: 0, o olacak oto marjlar ile merkezi .

2 Teknik olarak, margin: 0 autootomatik genişlikle çalışır, ancak otomatik genişlik otomatik kenar boşluklarına göre önceliklidir ve sonuç olarak otomatik kenar boşlukları sıfırlanır ve bu da "çalışmıyor" gibi görünmesini sağlar.


7
'Başımın tepesinden' iki cevap: o
Russell Dias

4
sabit genişliği ekleyin ve mükemmel cevabı aldınız
meo

1
Lanet olsun! Ben kodlama yaparken herkes cevap verdi! Başımın üstünden de ...: O
Kyle

ol startÖzniteliği özledim (ve Markdown'da çıkmak mümkün değil) :(
BoltClock

1
@Triynko: Ne soru ne de cevabım HTML sunum özellikleri hakkında hiçbir şey söylemedi (soru [html] bile etiketli değil!), Bu yüzden tam olarak boğa dediğin şeyden emin değilim. Her neyse, CSS ile hedeflenebilen her öğe CSS genişlik ve yükseklik özelliklerine sahip olsa da, tüm HTML öğeleri karşılık gelen sunum özelliklerine sahip olmayabilir ve bunun nedeni, belirli bir şekilde bunlara sahip olmanın mantıklı olmamasıdır HTML öğeleri.
BoltClock

19

Başımın üstünden, bir ihtiyacı var width. Merkezlediğiniz kabın genişliğini belirtmeniz gerekir (üst genişliği değil).


16
Her şey başımızın tepesinden geliyor!
BoltClock

8

CSS için tam kural:

  1. ( display: blockVE widthotomatik değil) VEYAdisplay: table
  2. float: none
  3. position: relative

3

Başımın üst kısmından, öğe bir blok öğesi değilse - bunu yapın.

ve sonra ona bir genişlik verin.


2

Ayrıca display: table ile de çalışacaktır - bu durumda, ayarlanması için bir genişlik gerektirmediği için kullanışlı bir display özelliği. (Bu yazının 5 yaşında olduğunu biliyorum, ancak yine de yoldan geçenlerle ilgili;)


2

Kedimin kafasının üstünde, ortalamaya divçalıştığınızdan emin olun width: 100%.

Eğer öyleyse, çocuk div'lerinde belirlenen kurallar önemli olacaktır.


1

Lütfen jsFiddle'ı oluşturduğum bu hızlı örneğe gidin . Umut etmek kolay. wrapperOrtaya hizalamak için sitenin genişliğine sahip bir div kullanabilirsiniz . Koymanız gerekmesinin nedeni width, tarayıcının sıvı bir düzen için gitmediğinizi bilmesidir.


1

İşte benim önerim:

First: 
      1. Add display: block or table
      2. Add position: relative
      3. Add width:(percentage also works fine)
Second: 
      if above trick not works then you have to add float:none;


-1

Şimdi bu soruyu isabet değil, düzeltme edememek herkes için margin: 0 auto, burada en şey sana yararlı olabilecek keşfetti: Bir tableelemanın hiçbir belirtilen genişlikte olmalıdır display: tableve değil display: block sırayla margin: autoçalışma yapmak. Bu kombinasyonu olarak, bazı bariz olabilir display: blockve varsayılan widthonun kabı dolduracak şekilde genişler bir tablo verecek değerde, ancak eğer istediğiniz tablo o genişliği "doğal" olduğunu almak ve ortalanmış, ihtiyacınızdisplay: table


Bu doğru değil. (Eğer sadece verirseniz, o display: blockzaman kabul edilen cevabın 4. koşulunu karşılamayacaktır)
Quentin

@Quentin dikkatleri için teşekkürler. Benim durumumda, ben vermedi yatay alan (yaklaşık bütün tartışma bertaraf gibi görünüyor hangi doldurmak için tabloyu istiyorum margin: 0 auto) ve ben de olamazdı içeriği farklı genişlikleri getirebileceğinden, tablonun genişliğini belirtin. Bu durumda, tek çözüm çalışır (yani o masayı, normal bir şekilde ama merkezlerini oluşturur) olduğu hiçbir genişlik kuralı display: tablevemargin: 0 auto
Samson
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.