Box Model (Kutu Modeli) İnteraktif Canvas Görselleştirme
CSS Box Model
CSS Box Model, her HTML öğesinin dört ana bölümden oluşan dikdörtgen bir kutu olarak temsil
edildiği
bir
kavramdır.
Bu model, web tasarımının temel yapı taşlarından biridir ve sayfa düzenini anlamak için
kritik
öneme sahiptir.
Box Model (Kutu Modeli) Web'in Görünmez Geometrisi
Web tasarımına başlarken kabul etmemiz gereken ilk gerçek şudur: "Web sayfasındaki her şey bir dikdörtgendir."
Gördüğünüz yuvarlak bir buton, karmaşık bir logo veya tek bir harf bile aslında tarayıcı tarafından görünmez bir dikdörtgen kutu içine çizilir.
Tarayıcı, bu kutuları milimetrik bir hassasiyetle hesaplar, konumlandırır ve katman katman üst üste yerleştirerek gördüğümüz arayüzü oluşturur.
İşte bu kutunun nasıl davranacağını, ne kadar yer kaplayacağını ve komşularıyla nasıl geçineceğini belirleyen kurallar bütününe CSS Box Model denir.
Görünmez Geometri ve Hesaplama MantığıBu model, sadece bir genişlik ve yükseklik ayarı değil, web sayfasının "Fiziğidir".
Bir elementin ekranda kapladığı alan, sadece yazdığınız width veya height değerlerinden ibaret değildir.
Arka planda tarayıcı; içerik alanını, iç boşlukları, kenarlıkları ve dış boşlukları bir araya getirerek toplam boyutu hesaplar ve bu hesaplama sonucu sayfanın düzenini belirler.
Bu nedenle Box Model'i anlamak, sadece görsel düzeni değil; layout stabilitesini, taşma problemlerini
ve duyarlı tasarım davranışlarını anlamanın da temelidir.
En Yaygın Yanılgı: Boyut AlgısıBir elementin toplam boyutunu hesaplarken yapılan en büyük hatalar, bu modelin katmanlarının ( Padding, Border, Margin ) yanlış anlaşılmasından kaynaklanır.
Özellikle yeni başlayanlar için en yaygın yanılgı, verilen bir genişlik değerinin kutunun dış sınırını temsil ettiğini düşünmektir; oysa bu çoğu zaman sadece içerik alanını ifade eder.
Katmanlı Yapı: 4 Temel BileşenKutu Modeli, merkezden dışarıya doğru 4 ana katmandan oluşur. Bunu bir "Soğan" veya etrafı çitle çevrili bir "Ev" gibi düşünebilirsiniz.
En içte içerik bulunur, ardından onu koruyan iç boşluk, onun etrafını saran sınır çizgisi ve en dışta diğer elementlerle mesafeyi belirleyen dış boşluk yer alır.
Bu katmanların her biri tek başına basit görünse de, birlikte çalıştıklarında web sayfasının tüm geometrisini ve davranışını belirleyen güçlü bir sistem oluştururlar.
Zihinsel Model DeğişimiBu noktaya kadar Kutu Modeli'nin katmanlarını tek tek öğrendik.
Ancak CSS'te yapılan en büyük hata, bu sistemi gerçek dünyadaki fizik kurallarıyla birebir aynı sanmaktır.
Gerçek dünyada bir nesnenin genişliği, onun dış sınırını temsil eder.
Fakat CSS'te width varsayılan olarak bir kutunun dış boyutunu değil, yalnızca içerik alanını kontrol eder.
Yani siz bir kutuya width: 200px verdiğinizde, aslında tarayıcıya şunu söylersiniz:
"Bu kutunun içindeki metin ve görseller için tam 200px'lik bir alan ayır."
Padding ve Border gibi katmanlar bu alanın içine değil, dışına eklenir.
İşte bu nedenle CSS'te bir kutunun "görünen boyutu" ile yazdığınız değerler çoğu zaman birebir örtüşmez.
Bu farkı anlamak, Box Model konusunun en kritik kırılma noktasıdır.
Çünkü bu zihinsel modeli doğru kurmadan; layout, responsive tasarım ve hizalama sistemlerini doğru anlamak mümkün değildir.
Yaygın Yanlış BilinenlerCSS Box Model öğrenilirken yapılan hataların büyük bir kısmı, bazı temel kavramların yanlış anlaşılmasından kaynaklanır.
Bu yanlış kabuller düzeltilmediği sürece, layout problemleri kaçınılmaz hale gelir.
Yanlış: width değeri kutunun toplam genişliğini belirler.
Doğru: Varsayılan olarak sadece içerik alanını belirler.
Yanlış: margin ve padding aynı şeydir.
Doğru: Padding kutunun içindedir ve boyanır, margin ise tamamen şeffaf bir dış boşluktur.
Yanlış: Margin her zaman toplanır.
Doğru: Dikey eksende margin değerleri birleşebilir (Margin Collapse).
Yanlış: Border sadece görsel bir çizgidir, yer kaplamaz.
Doğru: Border fiziksel kalınlığa sahiptir ve toplam boyuta dahil edilir.
Bu yanlışları erken fark etmek, CSS'te yaşanan problemlerin büyük bir kısmını daha oluşmadan engeller.
Neden Bu Konu Kritik?CSS Box Model sadece teorik bir konu değil, modern web tasarımının temelini oluşturan en kritik yapı taşlarından biridir.
Çünkü bir elementin ekranda kapladığı gerçek alanı anlamadan, onu doğru konumlandırmak veya diğer elementlerle uyumlu hale getirmek mümkün değildir.
Günümüzde kullanılan Flexbox ve Grid sistemleri, tamamen bu kutuların boyutlarının doğru hesaplanmasına dayanır.
Eğer kutunun gerçek genişliği yanlış hesaplanırsa, en mükemmel layout sistemi bile beklenmeyen şekilde kırılır.
Responsive tasarımlarda da aynı durum geçerlidir.
Ekran boyutu değiştikçe kutuların nasıl davranacağını belirleyen şey, bu modelin doğru anlaşılmasıdır.
Aksi halde elementler taşar, hizalamalar bozulur ve tasarım kontrol edilemez hale gelir.
Bu nedenle Box Model'i anlamak, sadece bir CSS konusunu öğrenmek değil; tüm layout sistemlerinin temel mantığını çözmek anlamına gelir.
Content (İçerik) Kutunun Yaşayan Merkezi ve Kalbi
Kutu Modeli'nin ( Box Model ) en iç katmanı ve başlangıç noktası İçerik ( Content ) alanıdır.
Bir HTML elementini oluşturduğunuzda ( p etiketi, div veya img ), o elementin varoluş sebebi olan "bilgi" burada yaşar.
Ziyaretçinin okuduğu metinler, incelediği görseller, tıkladığı ikonlar veya izlediği videolar fiziksel olarak bu alanda barınır.
Diğer tüm katmanlar ( Padding, Border, Margin ); aslında bu değerli içeriği korumak, vurgulamak ve diğerlerinden ayırmak için var olan yardımcı unsurlardır , içerik yoksa, kutunun bir işlevi de yoktur.
Bu nedenle içerik alanı sadece görsel olarak değil, anlamsal olarak da kutunun merkezidir; SEO, erişilebilirlik ve kullanıcı deneyimi açısından asıl değer burada üretilir.
Tarayıcı için bir kutunun varlık sebebi, içinde taşıdığı veridir; diğer tüm katmanlar bu veriyi sunma biçimini düzenler.
Teknik Davranışı ve Boyutlandırma Mantığı:CSS'te bir elemente boyut verdiğimizde yaşanan kafa karışıklıklarının çoğu bu katmandan kaynaklanır.
Tarayıcıya width veya height değeri verdiğinizde, varsayılan davranış olarak sadece bu içerik alanını boyutlandırırsınız.
Yani siz aslında kutunun dış sınırlarını değil, sadece içerideki kullanılabilir alanı kontrol etmiş olursunuz.
Örneğin: Bir kutuya width: 300px komutu verdiğinizde genişlik verileceğini tarayıcı bilecektir ve siz tarayıcıya şu emri vermiş olursunuz: "Metinlerin ve resimlerin sığacağı 'yazılabilir alanı' net 300 piksel yap."
Ancak bu, kutunun ekranda kaplayacağı toplam alanın 300 piksel olacağı anlamına gelmez.
Eğer bu kutuya sonradan iç boşluk ( padding ) veya kenarlık ( border ) eklerseniz, bu eklemeler 300 piksellik içerik alanının dışına doğru eklenir ve kutu görsel olarak büyümeye (şişmeye) başlar.
Bu durum, özellikle hassas layout tasarımlarında (örneğin grid veya kolon sistemlerinde) beklenmeyen taşmalara ve hizalama problemlerine yol açabilir.
Dolayısıyla İçerik Alanı, kutu hesaplamalarının yapıldığı "sıfır noktası"dır.
Ayrıca içerik alanı dinamiktir; eğer boyut ( width/height ) belirtmezseniz, içerik alanı içindeki verinin yani salt metin veya resim verisinin
( yazının uzunluğu veya resmin büyüklüğü ) miktarına göre otomatik olarak büzülür veya genişler.
Bu davranış, HTML'in akışkan (flow-based) yapısının bir sonucudur; içerik arttıkça kutu genişler veya taşar, azaldıkça küçülür.
Eğer içerik kontrol altına alınmazsa, kutu sınırlarını aşabilir ve bu durumda overflow davranışları devreye girer.
Padding (İç Boşluk) Tasarımın Nefes Alanı ve İç Konforu
Kutu Modeli'nin ikinci katmanı olan Padding, İçerik ile dış sınır olan Kenarlık arasında yer alan stratejik "tampon bölge"dir.
Teknik olarak sadece bir mesafe gibi görünse de, tasarım dilinde Padding, sıkışıklığı önleyen bir "hava yastığı" işlevi görür.
Bir web sayfasında metinlerin veya görsellerin, bulundukları kutunun kenarlarına yapışık olması, okuyucuda daralmışlık ve düzensizlik hissi yaratır.
Padding, içeriği merkeze doğru iterek ona hak ettiği alanı açar.
Bu sayede tasarım, sıkışık bir depo görünümünden çıkıp, ferah bir sanat galerisi düzenine kavuşur.
Görevi:Okunabilirlik ve EtkileşimPadding'in en temel görevi görsel hiyerarşi ve okunabilirlik sağlamaktır.
Göz, kenarlara çok yakın duran metinleri takip etmekte zorlanır.
Padding, metne "nefes aldırarak" okuma deneyimini yumuşatır.
Ancak görevi sadece estetik değildir; aynı zamanda Kullanıcı Deneyimi için hayati önem taşır.
Örneğin: Bir butonu düşünün: İçindeki yazı küçük olsa bile, butona yüksek padding değerleri vererek tıklanabilir alanını (dokunma hedefini) genişletebilirsiniz.
Bu, özellikle parmakla kullanılan mobil cihazlarda butonları kullanmayı çok daha kolay hale getirir.
Kritik Özellik:Padding, arka planda kullanılan renk veya desen kabul eder ve görünür hale gelir, margin ise tamamen şeffaftır; arka planı göstermez, altındaki elementi gösterir
Elemente verdiğiniz arka plan rengi (background-color) veya arka plan resmi, içerik alanından başlayarak Padding alanının sonuna kadar yayılır.
Yani bir kutuyu kırmızıya boyadığınızda, içeriğin etrafındaki o boşluk da kırmızı olur.
Bu özellik, Padding'in "kutunun içine dahil" olduğunun en büyük kanıtıdır.
Analoji: Kışlık Mont ve "Dolgu" EtkisiPadding kavramını zihnimizde tam olarak oturtabilmek için, teknik terimleri bir kenara bırakıp günlük hayattan tanıdık bir nesneyi, "Kışlık Puf Montu" (Puffer Jacket) inceleyelim.
Bu montun katmanları, CSS Kutu Modeli'nin çalışma prensibiyle birebir örtüşür.
Vücudunuz (Content): Montun en içinde duran ve montun asıl var olma sebebi olan "Siz", yani vücudunuz; CSS'teki İçerik alanıdır.
Tıpkı montun sizin şeklinizi alması gibi, kutu da içeriğin boyutuna göre şekillenir.
Montun Dış Kumaşı (Border - Kenarlık): Montun rüzgarı kesen, su geçirmeyen en dış katmanı veya dikişleri; CSS'teki Border sınırıdır.
Montun (Kutunun) nerede bittiğini ve dış dünyanın nerede başladığını bu katman belirler.
Astar ve Elyaf Dolgu (Padding - İç Boşluk): İşte sihirli kısım burasıdır bu kısımda vücudunuz ile montun dış kumaşı arasında sizi sıcak tutan o yumuşak elyaf dolgu veya pamuklu astar, CSS'teki Padding'dir.
Analojinin Kritik Noktası:Dolgu, monta dahildir ve montunuza daha fazla elyaf doldurursanız ( Padding değerini artırırsanız ), vücudunuz ( İçerik ) büyümez; ancak montun kendisi dışarıdan bakıldığında daha şişkin ve hacimli görünür.
Sizi dış kumaşın sertliğinden uzaklaştırır, arada konforlu bir tampon bölge oluşturur.
Tıpkı kırmızı bir montun astarının da kırmızı olması gibi, bu dolgu malzemesi de montun rengini ve dokusunu paylaşır; ondan ayrı düşünülemez.
Padding, kutuyu içten dışa doğru şişiren ve hacim kazandıran bir dolgu malzemesidir.
Border (Kenarlık) Kutunun Sınırları ve Görsel Çerçevesi
Kutu Modeli'nin merkezden dışa doğru üçüncü katmanı olan Border, kutunun iç dünyası ( Content + Padding ) ile dış dünyası arasındaki resmi sınırdır.
Padding nasıl bir "tampon bölge" ise, Border da o bölgeyi çevreleyen "duvar" veya "kabuk"tur.
Bir öğenin nerede başladığını ve nerede bittiğini gözle görülür hale getiren katman genellikle budur.
Tasarımda bir butonu arka plandan ayırmak, bir uyarı kutusuna dikkat çekmek veya bir formu çerçevelemek istediğimizde Border devreye girer.
Görevi: Ayrıştırma ve Kimlik KazandırmaBorder'ın birincil görevi, içeriği kaostan kurtarıp ona bir çerçeve çizmektir.
Tıpkı bir tablonun etrafındaki ahşap çerçeve gibi; Border da içeriği odaklar ve onu sayfanın geri kalanından yalıtır.
Ayrıca CSS3 ile birlikte gelen border-radius özelliği sayesinde, bu sınır çizgileri sadece dik açılı köşeler olmak zorunda değildir; yuvarlatılarak modern ve yumuşak tasarımlar ( hap şeklindeki butonlar veya daire profil resimleri ) elde edilebilir.
Kritik Özellik: Matematiği Değiştiren KalınlıkBorder ile ilgili en çok yapılan hata, onun yer kaplamadığını düşünmektir.
Oysa Border, fiziksel bir kalınlığa sahiptir.
Kutu Modeli hesaplamasında Border, kutunun toplam genişliğine ve yüksekliğine dahil edilir.
Matematiksel Gerçek:Eğer 100 piksel genişliğinde ( width: 100px ) bir kutunuz varsa ve buna 5 piksel kalınlığında bir kenarlık ( border-width: 5px ) eklerseniz; kutunuzun ekranda kapladığı toplam alan artık 100 piksel değil, 110 pikseldir.
( 100px İçerik + 5px Sol Duvar + 5px Sağ Duvar ) ,bu küçük fark, yan yana dizilen kutuların alt satıra kaymasına neden olan en yaygın sebeptir.
Analoji: Evin Tuğla DuvarlarıBorder kavramını ve boyut hesaplamasına olan etkisini tam olarak kavrayabilmek için bir mimar gibi düşünelim ve bir evin planına yukarıdan bakalım.
İçerik (Evin Odaları): Evinizin içinde mobilyalarınızı koyduğunuz, içinde yürüdüğünüz ve yaşadığınız net kullanım alanı ( net metrekare ), CSS'teki İçerik alanıdır.
width dediğimizde aslında bu odanın genişliğini kastederiz.
Padding (Hareket Payı): Mobilyalarınızı ( İçeriği ) duvarlara sıfıra sıfır yapıştırmazsınız; arada rahat hareket etmek için boşluk bırakırsınız.
İşte eşyalar ile duvar arasındaki bu mesafe Padding'dir ve odanın içindedir ama eşya değildir.
Border (Tuğla Duvarlar): İşte kritik nokta burasıdır: Border, evin duvarlarının kendisidir.
Bir kağıda çizgi çizerken o çizginin kalınlığını önemsemeyiz ama gerçek bir inşaatta duvarlar tuğladan veya betondan örülür ve fiziksel bir kalınlığa sahiptir.
Eğer 100 metrekarelik bir odanız varsa ve bu odayı 50 cm kalınlığında taş duvarlarla örerseniz; evin arsa üzerinde kapladığı toplam alan ( brüt alan ) 100 metrekareden fazla olur.
Duvarları ne kadar kalın örerseniz ( border-width'i artırırsanız ), eviniz arsa üzerinde o kadar çok yer kaplar ve dışarıya doğru genişler.
Evin içindeki oda ( Content ) büyümez ama evin toplam dış çevresi ( Rendered Size ) büyür.
Margin (Dış Boşluk) Elementin Kişisel Alanı ve Sosyal Mesafesi
Kutu Modeli'nin dördüncü ve en dış katmanı olan Margin, elementin bittiği yerden ( Kenarlık/Border'dan ) sonra başlayan ve diğer komşu elementlerle arasına mesafe koyan görünmez bir kalkandır.
Eğer Padding elementin "iç huzuru" ise, Margin elementin "dış ilişkileri"dir.
Bir web sayfasında paragrafların birbirine yapışmamasını, kutuların alt alta nizami dizilmesini veya sayfanın ortasında duran bir bloğun kenarlardan uzak durmasını sağlayan güç Margin'dir.
Margin değeri olmayan elementler, kalabalık bir otobüsteki yolcular gibi birbirine omuz omuza yapışır; bu da okunabilirliği ve estetiği yok eder.
Görevi: İzolasyon ve KonumlandırmaMargin'in temel görevi itmektir ve bir elemente margin-top: 20px verdiğinizde, aslında o elemente "Üstündeki komşunu 20 piksel uzağa it" dersiniz.
Bu sayede sayfa üzerindeki "Negatif Alan" ( Beyaz Boşluk ) dediğimiz, gözü dinlendiren boşlukları yönetiriz.
Ayrıca Margin, özel bir güce daha sahiptir: bu güç "Ortalama" gücüdür, bir kutuya genişlik verip margin: auto (otomatik) dediğimizde, tarayıcı sol ve sağ boşlukları eşitler ve kutuyu sayfanın tam ortasına yerleştirir.
Kritik Özellik: Tam Şeffaflık ve "Boya" İlkesiWeb tasarımında boşluk bırakmak istediğinizde karşınıza iki seçenek çıkar: Padding ve Margin.
Her ikisi de öğeleri birbirinden uzaklaştırır ve teknik olarak "beyaz boşluk" yaratır.
Ancak tarayıcının bu iki alanı işleme ( render ) şekli arasında, tasarımın kaderini değiştiren temel bir "Madde ve Boşluk" farkı vardır.
Bu farkı anlamak, CSS ustalığının en önemli adımıdır.
Padding: Boyalı Alan (Tuvalin Genişlemesi)Padding, elementin "etine" dahildir , bu biraz bir ressama tuvalin yetmediğini ve tuvalin kenarlarına ek kumaş dikerek çizim alanını genişletmesi olarak düşününülebilir , işte Padding tam olarak budur.
Arka Planın Devamlılığı: Eğer bir kutuya arka plan rengi ( background-color ) veya arka plan resmi ( background-image ) verirseniz, tarayıcı boyamaya içerik alanından başlar ve Padding alanının sonuna kadar boyamaya devam eder.
Görsel Bütünlük: Padding şeffaf değildir (arkası görünmez), elementin kendi rengini taşır.
Bu yüzden, bir butonun içindeki yazının kenarlara çok yakın olduğunu düşünüp padding eklerseniz, butonun rengi de o boşlukla birlikte genişler ve buton daha büyük, daha hacimli görünür.
Padding, nesnenin fiziksel gövdesini büyütür.
Margin: Şeffaf Alan (Görünmez Kalkan)Margin ise elementin "etine" veya "gövdesine" asla dahil değildir.
O, elementin etrafındaki Negatif Alandır (Negative Space).
Mutlak Şeffaflık: Margin alanına asla renk veremezsiniz bu padding ile arasında ki önemli farklardan biridir, margin'e background: red; deseniz bile bu komut çalışmaz.
Margin, kelime anlamıyla "şeffaf"tır; yani cam gibidir.
Ne Görürüz? Margin boşluğundan baktığınızda gördüğünüz renk, o elementin kendi rengi değil; elementin üzerinde durduğu zeminin ( Parent Element veya Body ) rengidir.
İşlevi: Margin, nesneyi büyütmez; nesneyi uzayda hareket ettirir veya diğerlerini iter.
Bir ressamın tuvalini genişletmesi ( Padding ) değil, şövalesini alıp odanın başka bir köşesine taşıması ( Margin ) gibidir.
Analoji: Evin Bahçesi ve "Çit Mesafesi"Margin'i, evinizin etrafındaki "Bahçe Duvarı Dışındaki Boşluk" veya komşunuzla aranızdaki "Çit Mesafesi" olarak düşünebilirsiniz.
Eviniz (Content + Padding + Border): Sizin yaşam alanınızdır, boyalıdır, size aittir ve bu alanın boyutlarını kontrol edebilirsiniz.
Bahçe Mesafesi (Margin): Evin duvarı bittiğinde başlar ve burası hala sizin kontrolünüzdedir ( kimse buraya bina dikemez ) ama buraya oda yapamazsınız.
Eğer komşunuzla aranızda 5 metre margin (mesafe) bırakırsanız, ne sizin eviniz ne de komşunun evi büyür; sadece iki bina arasındaki hava alma boşluğu artar.
Margin, binaların birbirine yapışık gecekondu gibi değil, düzenli site blokları gibi durmasını sağlar.
İleri Seviye Not: Margin CollapseCSS'te margin değerleri çoğu zaman beklediğimiz gibi çalışır; yani iki element arasındaki mesafe, verilen margin değerlerinin toplamı gibi düşünülür.
Ancak belirli durumlarda tarayıcı, bu değerleri toplamak yerine birleştirir (collapse eder) ve ortaya beklenmedik bir sonuç çıkar.
Bu davranışa Margin Collapse denir ve CSS'in en kafa karıştırıcı, ancak aynı zamanda en önemli "görünmez kurallarından" biridir.
En basit senaryoda, alt alta duran iki blok elementi düşünelim.
Üstteki elemente margin-bottom: 30px ve alttaki elemente margin-top: 20px verdiğinizde, çoğu geliştirici bu iki boşluğun toplanarak 50px olmasını bekler.
Ancak gerçekte tarayıcı bu değerleri toplamaz; sadece en büyük olanı dikkate alır.
Yani sonuç 30px olur, 50px değil.
Bu durumun nedeni, tarayıcının dikey boşlukları optimize etmeye çalışmasıdır.
Tarayıcı, iki ayrı boşluk yerine tek bir boşluk bırakarak daha temiz ve tutarlı bir akış oluşturur.
Ancak bu optimizasyon, geliştirici açısından çoğu zaman beklenmeyen sonuçlar doğurur.
Margin Collapse yalnızca kardeş elementler arasında değil, ebeveyn (parent) ve çocuk (child) elementler arasında da gerçekleşebilir.
Eğer bir parent elementin üstünde padding, border veya içerik yoksa; içindeki ilk çocuğun margin-top değeri, parent'ın dışına taşar.
Bu durumda margin, çocuk elemente ait gibi görünse de aslında tüm kutuyu aşağı iter.
Aynı şekilde, son çocuk elementin margin-bottom değeri de parent dışına taşabilir.
Bu davranış, özellikle layout oluştururken "neden boşluk buradan geliyor?" sorusunun en yaygın cevabıdır.
Önemli bir kural şudur: Margin Collapse sadece dikey (vertical) yönde gerçekleşir.
Yani margin-left ve margin-right değerleri asla birleşmez.
Ayrıca her durumda collapse gerçekleşmez.
Eğer araya padding, border veya yeni bir bloklama bağlamı (örneğin overflow: hidden) girerse, bu davranış durur.
Yani margin'lerin birleşebilmesi için arada hiçbir fiziksel katman bulunmamalıdır.
Margin Collapse, ilk bakışta bir hata gibi görünse de aslında CSS'in akış modelinin bilinçli bir parçasıdır.
Bu davranışı anlamak, özellikle karmaşık layout yapılarında kontrol sahibi olmanın en kritik adımlarından biridir.
|
Değer Sayısı
|
CSS Kodu
|
Açıklama
|
|---|---|---|
Tek Değer
|
padding: 20px;
|
Tüm kenarlara 20px iç boşluk uygulanır. |
İki Değer
|
padding: 10px 30px;
|
Dikeyde (üst-alt) 10px, yatayda (sağ-sol) 30px iç boşluk uygulanır. |
Dört Değer
|
padding: 5px 10px 15px 20px;
|
Üst: 5px, Sağ: 10px, Alt: 15px, Sol: 20px iç boşluk uygulanır. |
|
Değer Sayısı
|
CSS Kodu
|
Açıklama
|
|---|---|---|
Tek Değer
|
margin: 20px;
|
Tüm kenarlardan 20px dış boşluk uygulanır. |
İki Değer
|
margin: 10px 30px;
|
Dikeyde (üst-alt) 10px, yatayda (sağ-sol) 30px dış boşluk uygulanır. |
Dört Değer
|
margin: 5px 10px 15px 20px;
|
Üst: 5px, Sağ: 10px, Alt: 15px, Sol: 20px dış boşluk uygulanır. |
Özel Değer
|
margin: auto;
|
Bir öğeyi yatayda otomatik olarak ortalamak için kullanılır (öğenin bir |
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Modern Box Model Örnekleri</title>
<link rel="stylesheet" href="style.css?v=1.0.150">
</head>
<body>
<h2>1. Modern Kart Tasarımı</h2>
<div class="card">
<h3>Ürün Başlığı</h3>
<p>
Bu kutu modern bir kart örneğidir.
<strong>Padding</strong> sayesinde yazılar kenara yapışmaz.
<strong>Border-radius</strong> sayesinde köşeler sivri değildir.
</p>
<button
style="padding: 10px 20px; background: #3498db; color: white; border: none; border-radius: 4px; cursor: pointer;">Satın
Al</button>
</div>
<h2>2. Sayfada Ortalanmış Kutu (Margin Auto)</h2>
<div class="container-box">
<h3>Ben Ortadayım!</h3>
<p>Ekranı genişletsen de daraltsan da ben hep ortada kalırım. <code>margin: 0 auto</code> büyüsü!</p>
</div>
<h2>3. Kare Kutu Nasıl Daire Olur?</h2>
<div class="avatar-box">
LOGO
</div>
</body>
</html>
*,
*::before,
*::after {
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #ecf0f1;
margin: 0;
padding: 40px;
}
h2 {
color: #2c3e50;
border-left: 5px solid #e74c3c;
padding-left: 10px;
margin-bottom: 20px;
}
.card {
background-color: #fff;
width: 300px;
padding: 25px;
border: 1px solid #ddd;
margin-bottom: 50px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
border-radius: 8px;
}
.container-box {
background-color: #34495e;
color: white;
width: 80%;
max-width: 600px;
margin: 0 auto;
padding: 20px;
text-align: center;
border-radius: 10px;
}
.avatar-box {
width: 100px;
height: 100px;
background-color: #e67e22;
color: white;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
border: 5px solid #fff;
border-radius: 50%;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
margin: 40px auto;
}
Matematiksel Tuzak ve Modern Çözüm Box-sizing Yapısı
Kutu Modeli'nin bileşenlerini ( İçerik, Padding, Border ) tek tek inceledik.
Ancak bu parçalar birleşip bir bütün oluşturduğunda, web tasarımının en kafa karıştırıcı ve en sık hata yapılan süreci olan "Boyut Hesaplama" başlar.
Bu aşamada geliştirici artık sadece görsel değil, aynı zamanda matematiksel bir problem çözmektedir.
Beklenen Mantık vs CSS GerçeğiBir mimar, "Bu odanın genişliği 5 metre olacak" dediğinde, duvarların kalınlığının bu 5 metrenin içinde kalmasını, yani arsanın toplamda 5 metreden fazla yer kaplamamasını bekler.
Bu insan mantığına en uygun yaklaşımdır, ancak CSS'in varsayılan dünyasında mantık biraz tersten işler.
Web tasarımında, yazdığınız kod ( width: 200px ) ile ekranda gözünüzle gördüğünüz sonuç her zaman birbirini tutmaz.
Bunun nedeni, CSS'in verdiğiniz ölçüyü kutunun dış sınırı olarak değil, yalnızca içerik alanı olarak yorumlamasıdır.
Dışa Doğru Büyüme ProblemiSiz kutuyu güzelleştirmek için ona dolgu ( padding ) veya çerçeve ( border ) ekledikçe, kutu verdiğiniz ölçülerin dışına taşarak şişmeye başlar.
Yani tarayıcı, bu eklemeleri mevcut genişliğin içine dahil etmek yerine, dışına ekler ve toplam boyutu büyütür.
Bu durum, özellikle birden fazla elementin yan yana hizalandığı düzenlerde ( grid sistemleri, kolon yapıları ) beklenmeyen kaymalara ve hizalama hatalarına neden olur.
Problemin Sonucu ve Kritik EtkisiTasarımcıların piksellerle boğuşmasına, yan yana gelmesi gereken kutuların sığmayıp alt satıra düşmesine neden olan bu durum, Box Sizing ( Kutu Boyutlandırma ) mimarisinin kalbinde yatar.
Bu problem sadece görsel bir hata değil, aynı zamanda layout stabilitesi ve öngörülebilirlik sorununu da beraberinde getirir.
İşte bu noktada, CSS'in varsayılan davranışını değiştiren ve geliştiriciye kontrol kazandıran box-sizing özelliği devreye girer.
Sorun Varsayılan Model (content-box) ve Ekleme Mantığı
Web tarayıcılarının doğuşundan gelen ve CSS'in standart kabul ettiği hesaplama yöntemi content-box modelidir.
Bu modelde mantık, "Dışa Doğru Büyüme" prensibine dayanır.
Tarayıcıya width: 200px ( Genişlik: 200 piksel ) komutunu verdiğinizde, tarayıcı bu emri çok spesifik bir şekilde yorumlar:
"Geliştirici, metnin veya resmin sığacağı içerik alanının net 200 piksel olmasını istiyor." Tarayıcı bu emri yerine getirir ve içeriğe 200 piksel ayırır.
Ancak sorun, tasarımı güzelleştirmek için yaptığınız eklemelerde başlar.
Eğer siz bu kutuya "İçerik kenarlara çok yakın, biraz boşluk olsun" diyerek padding eklerseniz veya "Etrafında çizgi olsun" diyerek border eklerseniz; tarayıcı bu yeni değerleri 200 pikselin içine sığdırmaya çalışmaz.
Aksine, bunları 200 pikselin üzerine ekler, yani kutunuz, verdiğiniz her yeni değerle birlikte dışa doğru şişmeye ve genişlemeye başlar.
Matematiksel Tuzak Hesabı: Somut Bir ÖrnekBu soyut "büyüme" sorununu, gerçek rakamlarla simüle edilmiş bir senaryo üzerinden inceleyelim.
Hedefimizin sayfada tam olarak 200 piksel genişliğinde yer kaplayan şık bir kutu oluşturmak olduğunu varsayalım , kodumuzu yazmaya başlıyoruz:
Başlangıç (Width): İlk olarak width: 200px kodunu yazarız. Varsayılan modelde tarayıcı bunu, "Sadece metnin sığacağı iç hazne 200 piksel olsun" şeklinde yorumlar, kutu şu an 200 pikseldir.
Dolgu Eklemes i (Padding): Metinler kenara yapışmasın diye padding: 20px ekleriz.
CSS'te aksi belirtilmedikçe bu değer 4 köşeye de uygulanır.
Genişlik hesabı yatay düzlemde yapıldığı için, kutunun Soluna 20px ve Sağına 20px olmak üzere toplamda 40px'lik bir "şişkinlik" eklenmiş olur.
Çerçeve Eklemesi (Border): Kutunun sınırları belli olsun diye border: 5px ekleriz.
Tıpkı padding gibi, bu duvarlar da fiziksel yer kaplar.
Soldan 5px ve Sağdan 5px olmak üzere toplamda 10px'lik bir kalınlık daha eklenir.
Sonuç ve Hayal Kırıklığı:Tarayıcı sayfayı oluştururken ( render ) basit bir toplama işlemi yapar:
200px ( İçerik ) + 40px ( Toplam Padding ) + 10px ( Toplam Border ).
Hesap makinesindeki sonuç 250 pikseldir.
Siz kod editörünüzde ısrarla "Bu kutu 200 piksel olsun" deseniz de, tarayıcı bu kutuya ekranda fiziksel olarak 250 piksel yer ayırır.
Bu 50 piksellik sapma, milimetrik hesaplanmış bir web tasarımında tüm düzenin bozulması için yeterli bir sebeptir.
Neden Tasarımı Bozar? (Layout Breakage)Tek başına duran bir kutuda 50 piksellik büyüme sorun olmayabilir.
Ancak modern web tasarımları, yan yana dizilen kutulardan ( sütunlardan ) oluşur.
Örneğin: Ekranı iki eşit parçaya bölmek için iki kutuya da %50 genişlik verdiğinizi düşünün ve bu genişlik değeri matematiksel olarak
%50 + %50 = %100 eder ve kutular yan yana mükemmel sığar.
Fakat varsayılan modelde, bu kutulara sadece 1 piksellik bir kenarlık bile eklerseniz, denklem bozulur:
%50 + %50 + 2px ( Kenarlıklar ) = %100 + 2px.
Toplam genişlik ekranı aştığı için, tarayıcının yapabileceği tek bir şey kalır: Sağdaki kutuyu alt satıra atmak.
İşte tasarımların "patlamasının" veya "kaymasının" temel nedeni bu hesaplama yöntemidir.
Modern ve Akılcı Çözüm: border-box Modeli Border-box Modeli
Profesyonel web geliştiricileri, her tasarımda ellerinde hesap makinesiyle "padding'i topla, border'ı çıkar" işlemi yapmak istemezler.
Bu sürekli hesaplama derdinden kurtulmak ve mizanpajın (layout) kararlılığını sağlamak için CSS'in hesaplama algoritmasını değiştirirler.
CSS3 ile hayatımıza giren ve günümüzde tüm modern projelerin vazgeçilmezi olan box-sizing: border-box; komutu, tarayıcıya şu kritik emri verir:
"Verdiğim genişlik (width) değeri, kutunun TOPLAM dış sınırıdır ve içine ne eklersem ekleyeyim, bu sınırı asla aşma."
Nasıl Çalışır? "Ekleme" Değil, "Kapsama" MantığıBu modelde, tarayıcıya width: 200px dediğinizde; kutu ekranda milimi milimine 200 piksel yer kaplar.
Peki, biz bu kutuya sonradan 20px padding eklersek ne olur? Varsayılan modelde kutu dışarı doğru şişerken, border-box modelinde tarayıcı akıllıca davranır ve İçerik alanını daraltır.
Yani padding ve border için gereken yeri, kutunun toplam genişliğini değiştirmeden, içerideki metin alanından "ödünç alarak" açar.
Örnek Senaryo: 200px Genişlik + 20px Padding + 5px Border.
Sonuç: Kutu toplamda yine 200px kalır ve tarayıcı, içerik alanını otomatik olarak 150 piksele düşürür ( 200 - 40 - 10 = 150 ).
Avantajı: Kusursuz MizanpajlarBu modelin en büyük avantajı "Tahmin Edilebilirlik"tir.
Örneğin: Ekranı ikiye bölmek için iki kutuya %50 genişlik verdiğinizi düşünün.
content-box (Eski): Kenarlık eklerseniz %50 + %50 + Kenarlıklar olur ve toplam %100'ü geçtiği için kutular yan yana sığmaz, tasarım patlar.
border-box (Modern): Ne kadar kenarlık veya dolgu eklerseniz ekleyin, kutular %50 sınırında sabit kalır ve yan yana mükemmel şekilde hizalanır.
Önemli İstisna: MarginBurada unutmamanız gereken tek istisna Margin ( Dış Boşluk ) kavramıdır.
Hangi modeli ( border-box veya content-box ) kullanırsanız kullanın, Margin daima hesaplamanın dışındadır.
Çünkü Margin kutunun kendisine değil, kutunun dışındaki boşluğa aittir ve toplam boyutu etkilemese de kutunun kapladığı alanı (etki alanını) genişletmeye devam eder.
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS Box Model ve Tuzak Örneği</title>
<link rel="stylesheet" href="style.css?v=1.0.150">
</head>
<body>
<div class="wrapper">
<h2>1. Tuzak Model (Content-Box)</h2>
<div class="kutu tuzak-model">
Genişlik: 300px verdik.<br>
Ama ekranda <strong>360px</strong> yer kaplıyorum.<br>
<small>(Padding ve Border dışarı taştı)</small>
</div>
</div>
<br><br>
<div class="wrapper">
<h2>2. Modern Model (Border-Box)</h2>
<div class="kutu modern-model">
Genişlik: 300px verdik.<br>
Ekranda tam <strong>300px</strong> yer kaplıyorum.<br>
<small>(Padding ve Border içeri gömüldü)</small>
</div>
</div>
</body>
</html>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
padding: 20px;
}
h2 {
color: #333;
border-bottom: 2px solid #333;
padding-bottom: 10px;
}
/* ORTAK KUTU STİLLERİ */
.kutu {
background-color: #3498db;
/* Mavi Arkaplan (Content) */
color: white;
font-size: 18px;
margin-bottom: 40px;
/* Dış boşluk (Margin) */
/* Matematiksel Değerler */
width: 300px;
/* Hedef Genişlik */
padding: 20px;
/* İç Boşluk */
border: 10px solid #2c3e50;
/* Kenarlık */
}
/* SENARYO 1: TUZAK (Varsayılan Davranış) */
.tuzak-model {
box-sizing: content-box;
/* Varsayılan budur, yazmasanız da bu çalışır */
/* HESAP:
Width (300) + Padding (20+20) + Border (10+10)
TOPLAM GENİŞLİK = 360px (İstediğimizden büyük!)
*/
}
/* SENARYO 2: ÇÖZÜM (Modern Yöntem) */
.modern-model {
box-sizing: border-box;
/* Sihirli Kod */
background-color: #27ae60;
/* Yeşil (Ayırt etmek için) */
/* HESAP:
Width (300) -> Toplam genişliktir.
Tarayıcı padding ve border'ı bu 300'ün İÇİNE gömer.
TOPLAM GENİŞLİK = 300px (Tam istediğimiz gibi)
*/
}
/* GÖRSEL YARDIMCI (Margin'i göstermek için hayali bir çizgi) */
.wrapper {
border: 1px dashed red;
/* Margin'in nereye kadar ittiğini görmek için */
display: inline-block;
}