Menu

CSS Margin: Kısa Yazım, margin auto ve Margin Çökmesi

Margin, bir elementin kenarlığının dışındaki, diğer elementleri iten saydam boşluktur. Margin kısa yazımını, margin: 0 auto ile ortalamayı, negatif margin'leri, flexbox'ta margin auto'yu ve dikey margin'lerin neden çöktüğünü öğren.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

Margin nedir

Margin, bir elementin kenarlığının dışındaki boşluktur. Her zaman saydamdır ve görevi diğer elementleri itmektir. Örnekte gri kapsayıcı, mavi kutunun çevresindeki margin'den görünüyor:

Gri şerit kutunun parçası değildir: kutunun kendi arka planı kenarlığında biter. Elementin arka planını alan boşluk için padding kullan.

Margin kısa yazımı

margin, padding ile aynı saat yönü sırasında bir ila dört değer alır:

BildirimÜstSağAltSol
margin: 10px;10101010
margin: 10px 20px;10201020
margin: 10px 20px 30px;10203020
margin: 10px 20px 30px 40px;10203040

Her kenarın ayrıca kendi özelliği (margin-top, margin-right, margin-bottom, margin-left) ve yazı yönünü takip eden mantıksal sürümleri (margin-inline-start, margin-inline-end, margin-block, margin-inline) vardır.

Padding'den farklı olarak margin auto ve negatif değerler kabul eder:

DeğerÖrnekNotlar
Uzunluk16px, 1.5remEn yaygını
Yüzde5%Dört kenarın hepsi için kapsayıcı bloğun genişliğinin
automargin: 0 autoTarayıcı kalan boşluğu doldurur
Negatifmargin-top: -10pxElementi ya da komşusunu yaklaştırır, çakışabilir

margin: 0 auto ile ortalamak

margin: 0 auto, bir bloğu yatayda ortalamanın klasik yoludur. İki taraftaki auto, tarayıcıya kalan boşluğu eşit paylaştırmasını söyler. Kapsayıcıdan daha küçük bir genişlik gerekir, yoksa paylaştırılacak bir şey kalmaz:

Auto margin'ler normal akışta dikeyde ortalamaz (dikey auto margin'ler 0 olur) ve satır içi elementlerde hiçbir şey yapmaz. Ortalamaya genel bir bakış için div ortalama sayfasına bak.

Margin çökmesi

İki dikey margin birbirine değdiğinde toplanmazlar. Tarayıcı yalnızca büyük olanı tutar. Burada ilk kutuda margin-bottom: 30px, ikincisinde margin-top: 20px var ve aralarındaki boşluk 50px değil 30px:

Çökme kasıtlıdır: paragrafların ve başlıkların her birinin kendi boşluğunu taşımasına ve karşılaştıkları yerde bunu ikiye katlamamasına izin verir. İnsanları ikinci bir durumda şaşırtır: bir çocuğun üst margin'i ebeveyninin dışına kaçtığında:

İlk ebeveynde çocuğun 30px margin'i ebeveynin üst kenarından dışarı çöktü, bu yüzden içinde gri boşluk oluşturmak yerine bütün ebeveyni aşağı itiyor. Şunlardan herhangi biri bunu durdurur:

  • Ebeveyne display: flow-root (overflow: hidden'dan farklı olarak hiçbir şeyi kırpmaz).
  • Ebeveynin üst kenarında padding ya da bir kenarlık.
  • Flex ya da grid bir ebeveyn: flex ve grid öğelerinin margin'leri asla çökmez.

Yatay margin'ler asla çökmez; float edilmiş ya da absolute konumlandırılmış elementlerin margin'leri de çökmez.

Negatif margin'ler

Negatif bir margin ters yönde çeker. Üst ya da başlangıç tarafında elementin kendisini hareket ettirir; alt ya da bitiş tarafında bir sonraki elementi yaklaştırır. Kutular çakışabilir:

Flexbox'ta margin auto

Bir flex kapsayıcının içinde auto margin kendi tarafındaki bütün boş alanı alır. Bir öğeyi satırın en sonuna itmenin en basit yoludur ve flexbox'ta auto dikeyde de çalışır:

margin-inline-start: auto boş alanı "Log in"den önceye koyar; hem soldan sağa hem sağdan sola sayfalarda satırın sonuna.

Sık yapılan hatalar

  • Genişliği olmayan bir elemente margin: 0 auto. Bir blok zaten kapsayıcısını doldurur; bir width ya da max-width ver.
  • Satır içi bir elemente margin: auto. Satır içi bırakılan span, a ya da img üzerinde auto margin'ler 0'dır. Onu display: block yap.
  • İki dikey margin'i toplayıp toplamı beklemek. Büyük olana çökerler; flex ya da grid'de gap kullan ya da tutarlı olarak tek bir margin yönü kullan.
  • Bir çocuğun margin'inin ebeveynini itmesi. Bu ebeveyn çocuk çökmesidir; ebeveyne display: flow-root ekle.
  • Arka planı olması gereken boşluk için margin kullanmak. Margin saydamdır; padding kullan.

Sıkça Sorulan Sorular

CSS'te margin nedir?

Margin, bir elementin kenarlığının dışındaki boşluktur. Saydamdır ve komşu elementleri iter. margin ya da tek kenar özellikleri margin-top, margin-right, margin-bottom ve margin-left ile ayarlanır.

margin: 0 auto ne işe yarar?

Üst ve alt margin'leri 0 yapar ve kalan yatay boşluğu sol ile sağ margin'ler arasında eşit olarak paylaştırır; bu da bir blok elementi yatayda ortalar. Elementin kapsayıcısından daha küçük bir genişliğe ihtiyacı vardır, örneğin max-width: 600px.

margin auto elementimi neden ortalamıyor?

Genellikle elementin genişliği olmadığı için (bir blok kapsayıcısını doldurur, bu yüzden paylaştırılacak bir şey kalmaz) ya da element satır içi olduğu için (span, a, img varsayılan olarak öyledir); satır içi elementlerde auto margin'ler 0'dır. Ona bir genişlik ve display: block ver ya da flexbox veya grid ile ebeveynden ortala.

Margin çökmesi (margin collapsing) nedir?

İki dikey margin karşılaştığında, örneğin bir paragrafın alt margin'i ile sonrakinin üst margin'i, tarayıcı onları toplamak yerine yalnızca büyük olanı kullanır. Bu yalnızca normal akıştaki blok kutuların dikey margin'lerinde olur, flex ya da grid düzenlerinde olmaz.

Margin negatif olabilir mi?

Evet. Negatif bir margin elementi o tarafa doğru çeker ya da bir sonraki elementi onun üzerine çeker, böylece kutular çakışabilir. Küçük hizalama düzeltmeleri ve bir elementin kapsayıcısının padding'inin dışına taşmasını sağlamak için kullanışlıdır.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA