Flexbox ve Grid
Bu dersin sonunda elemanları yan yana dizebilecek, aralarındaki boşlukları dağıtabilecek ve basit bir ızgara düzeni kurabileceksiniz.
Yan yana dizmek
Blok elemanlar alt alta dizilir. Onları yan yana getirmenin modern yolu Flexbox’tır. Kural basittir: display: flex değerini elemanların kendisine değil, onları saran kutuya yazarsınız. İçindeki elemanlar otomatik olarak yan yana gelir.
<div style="display: flex;">
<div style="background-color: lightblue; padding: 12px;">Bir</div>
<div style="background-color: lightgreen; padding: 12px;">İki</div>
<div style="background-color: khaki; padding: 12px;">Üç</div>
</div>Saran kutuya kapsayıcı, doğrudan içindeki elemanlara öğe denir.
gap: Öğelerin arası
Öğeler arasına boşluk koymanın en temiz yolu gap özelliğidir. Yalnızca öğelerin arasına boşluk koyar, kenarlara koymaz.
<div style="display: flex; gap: 16px;">
<div style="background-color: lightblue; padding: 12px;">Bir</div>
<div style="background-color: lightgreen; padding: 12px;">İki</div>
<div style="background-color: khaki; padding: 12px;">Üç</div>
</div>flex-direction: Yön
Öğelerin hangi yönde dizileceğini belirler:
rowVarsayılan. Soldan sağa.columnYukarıdan aşağıya.row-reversevecolumn-reverseTers yönde.
<div style="display: flex; flex-direction: column; gap: 8px; width: 160px;">
<div style="background-color: lightblue; padding: 8px;">Bir</div>
<div style="background-color: lightgreen; padding: 8px;">İki</div>
</div>justify-content: Ana eksende dağıtmak
row yönünde yatay dağılımı belirler. Değerleri önizlemede değiştirin:
flex-startBaşa toplar.centerOrtaya toplar.flex-endSona toplar.space-betweenİlk ve son öğeyi kenarlara yaslar, kalan boşluğu arasına dağıtır.space-aroundHer öğenin iki yanına eşit boşluk koyar.space-evenlyBütün boşlukları eşitler.
<div style="display: flex; justify-content: space-between; background-color: whitesmoke; padding: 8px;">
<div style="background-color: lightblue; padding: 12px;">Bir</div>
<div style="background-color: lightgreen; padding: 12px;">İki</div>
<div style="background-color: khaki; padding: 12px;">Üç</div>
</div>align-items: Çapraz eksende hizalamak
row yönünde dikey hizayı belirler. Etkisini görmek için kapsayıcının öğelerden yüksek olması gerekir.
stretchVarsayılan. Öğeler kapsayıcının yüksekliğine uzar.flex-startÜste toplar.centerOrtalar.flex-endAlta toplar.baselineYazıların taban çizgisini aynı hizaya getirir.
<div style="display: flex; align-items: center; gap: 8px; height: 120px; background-color: whitesmoke;">
<div style="background-color: lightblue; padding: 12px;">Kısa</div>
<div style="background-color: lightgreen; padding: 32px 12px;">Uzun</div>
</div>Yıllarca zor bir iş olarak bilinen “bir şeyi tam ortalamak” Flexbox ile iki satırdır:
<div style="display: flex; justify-content: center; align-items: center; height: 140px; background-color: midnightblue;">
<p style="color: white; margin: 0;">Tam ortadayım</p>
</div>flex-direction: column olursaYön değişince eksenler de değişir. column yönünde justify-content dikey, align-items yatay çalışır.
flex-wrap: Sığmayınca alt satıra geçmek
Öğeler varsayılan olarak tek satırda kalır ve sığmazlarsa küçülür. flex-wrap: wrap yazarsanız alt satıra geçerler.
<div style="display: flex; flex-wrap: wrap; gap: 8px;">
<div style="width: 160px; background-color: lightblue; padding: 8px;">Bir</div>
<div style="width: 160px; background-color: lightgreen; padding: 8px;">İki</div>
<div style="width: 160px; background-color: khaki; padding: 8px;">Üç</div>
<div style="width: 160px; background-color: lightpink; padding: 8px;">Dört</div>
</div>Öğelerin kendi ayarları
Şimdiye kadarkiler kapsayıcıya yazıldı. Şunlar ise öğelere yazılır:
flex: 1Öğe kalan boşluğu doldurur. İki öğe deflex: 1ise boşluğu eşit paylaşır.flex: 2olan, iki kat pay alır.align-selfYalnızca o öğenin dikey hizasını değiştirir.orderÖğenin görsel sırasını değiştirir. Küçük sayı önce gelir.
<div style="display: flex; gap: 8px;">
<div style="width: 120px; background-color: lightblue; padding: 12px;">Sabit 120px</div>
<div style="flex: 1; background-color: lightgreen; padding: 12px;">flex: 1 (kalanı doldurur)</div>
</div>order yalnızca görüntüyü değiştirirEkran okuyucular ve Tab tuşu, HTML’deki sırayı izler. Görsel sıra ile kaynak sıra çok farklıysa klavye kullananlar sayfada sıçrayarak gezer.
Grid: Satır ve sütunlar
Flexbox tek yönde dizmek için, Grid ise iki yönde, yani hem satır hem sütun içeren düzenler içindir. Yine kapsayıcıya yazılır. grid-template-columns sütunları tanımlar.
fr birimi kalan alanın bir payıdır. 1fr 2fr yazarsanız ikinci sütun birincinin iki katı genişlikte olur. Aynı değeri tekrar etmek için repeat kullanılır.
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px;">
<div style="background-color: lightblue; padding: 12px;">1</div>
<div style="background-color: lightgreen; padding: 12px;">2</div>
<div style="background-color: khaki; padding: 12px;">3</div>
<div style="background-color: lightpink; padding: 12px;">4</div>
<div style="background-color: lavender; padding: 12px;">5</div>
</div>Bir öğe birden çok sütun kaplayabilir. Sütunlar sabit ve esnek değerlerin karışımı da olabilir:
<div style="display: grid; grid-template-columns: 120px 1fr; gap: 8px;">
<header style="grid-column: span 2; background-color: lightblue; padding: 12px;">Üst bölüm, iki sütun kaplıyor</header>
<nav style="background-color: lightgreen; padding: 12px;">Menü</nav>
<main style="background-color: khaki; padding: 12px;">Ana içerik</main>
</div>Hangisini seçeceğiniz konusunda basit bir kural: Bir satır veya sütun dizecekseniz Flexbox, tablo benzeri bir yerleşim kuracaksanız Grid kullanın. Verinin kendisi tablo ise table etiketini kullanın.
display: flex değerini öğelere yazmak. Kapsayıcıya yazılır.
Yükseklik vermeden dikey ortalamaya çalışmak. Kapsayıcı öğe kadar yüksekse ortalanacak bir boşluk yoktur.
justify-content ile align-items değerlerini karıştırmak. row yönünde justify-content yatay, align-items dikey çalışır.
Boşluk için her öğeye margin yazmak. gap kapsayıcıya bir kez yazılır.
display: flex nereye yazılır?
- Yan yana dizilecek elemanları saran kutuya :: Doğru.
- Yan yana dizilecek her elemana :: Öğelere değil, kapsayıcıya yazılır.
- Yalnızca
bodyetiketine :: Herhangi bir kapsayıcıya yazılabilir.
flex-direction varsayılan değerdeyken öğeleri yatayda ortalayan hangisidir?
-
justify-content: center;:: Doğru. -
align-items: center;:: Bu değer varsayılan yönde dikey hizalar. -
text-align: flex;:: Böyle bir değer yoktur.
grid-template-columns: 1fr 1fr 1fr; ile aynı olan hangisidir?
-
repeat(1fr, 3)::repeatönce sayıyı alır. -
repeat(3, 1fr):: Doğru. -
3fr:: Bu tek bir sütundur.
Hedefteki kodu yazın. Bir nav içinde Logo ve Menü yazan iki span yazın. nav etiketinde bildirimleri bu sırayla yazın: display değeri flex, justify-content değeri space-between, padding değeri 12px olsun.
<nav style="display: flex; justify-content: space-between; padding: 12px;">
<span>Logo</span>
<span>Menü</span>
</nav>Hedefteki kodu yazın. Bir div içinde Sol ve Sağ yazan iki div yazın. Dıştaki div etiketinde bildirimleri bu sırayla yazın: display değeri grid, grid-template-columns değeri 1fr 2fr, gap değeri 8px olsun.
<div style="display: grid; grid-template-columns: 1fr 2fr; gap: 8px;">
<div>Sol</div>
<div>Sağ</div>
</div>Bu derste öğrendikleriniz
display: flexkapsayıcıya yazılır, içindeki öğeler yan yana gelir.justify-contentana eksende,align-itemsçapraz eksende hizalar.gaparalarına boşluk koyar.flex-wrap: wraptaşan öğeleri alt satıra alır,flex: 1kalan alanı doldurur.display: gridvegrid-template-columnssatır ve sütunlu düzenler kurar.
Dersi bitirdin mi?Bu dersi tamamladın.
İlerlemen bu tarayıcıda saklanır.