Flexbox mı Grid mi — Telefonda Sayfa Neden Yana Kayıyor?
Önce şunu oku: Tarayıcı Nasıl Çizer — Animasyon Neden Takılıyor?
30 saniyede özet
Flexbox öğeleri tek yönde dizer, grid satır ve sütunu birlikte kurar. Flex öğeleri varsayılan olarak içeriklerinden küçük olamaz; tek satıra sığmayınca sayfa yana kayar. Doğru seçim, hangi yönde düzen istediğine bağlı.
Masaüstünde beş hesap kartı yan yana, tertemiz duruyor. Aynı sayfayı telefonda açınca parmağın sayfayı yana itiyor ve kartların yarısı ekranın dışında kalıyor. Bunu düzeltmek için önce kartları kimin dizdiğini anlamak gerekiyor.
-
Bayt: Kartları flex ile yan yana dizdim. Masaüstünde harika.
-
Sen: Telefonda nasıl?
-
Bayt: Sayfa yana kayıyor! flex: 1 demiştim, küçülmeleri gerekmiyor muydu?
-
Bayt: Küçülürler, ama bir sınıra kadar. O sınırı birlikte bulalım.
Bir yön mü, iki yön mü?
flexboxÖğeleri tek yönde (satır ya da sütun) dizen CSS düzeni. Öğeler büyüyüp küçülebilir; ama varsayılan olarak içeriklerinden küçük olamazlar.Sözlükte gör → öğeleri tek bir yönde dizer: ya yan yana ya da alt alta. Bir düğme satırı, bir menü, bir kartın içindeki ikon ve yazı flexbox’ın işidir.
CSS gridSatır ve sütunu birlikte kuran iki boyutlu CSS düzeni. Sütunlar bir kez tanımlanır, bütün öğeler aynı ızgaraya oturur.Sözlükte gör → satırları ve sütunları birlikte kurar. Bir kart galerisi ya da sayfanın ana iskeleti gibi iki boyutlu düzenlerde parlar.
Kafam karıştı, daha basit anlat
Bir sıra diziyorsan flex, satır ve sütundan oluşan bir ızgara kuruyorsan grid.
Bir ikonla yazıyı yan yana dizmek için hangisi daha uygundur?
Bir kart galerisinde hem satırların hem sütunların hizalı olmasını istiyorsun. Hangisi?
Flex öğesi neden küçülmüyor?
Beş kart display: flex ile tek satırda, her biri flex: 1. Her kartın içeriği en az 200px istiyor. 320px'lik bir telefonda ne olur? Cevabı göster
Sayfa yana kayar. flex: 1 kartlara küçülme izni verir, ama flex öğelerinin varsayılan min-width değeri auto’dur: içeriklerinden küçük olamazlar. Beş kart ve aradaki boşluklar 1064px eder.
Adım adım oku
- flex tek satırda: kartlar içeriklerinden küçülmez, sığmayan ekranın dışına taşar.
- flex-wrap: sığmayan alt satıra geçer; kısa son satırdaki kartlar boşluğu doldurmak için genişler.
- grid: sütunlar bir kez belirlenir, bütün kartlar aynı genişlikte; artan hücre boş kalır.
- Tek yönde dizmek flex'in, satır ve sütun birlikte grid'in işi.
min-width: 0 yazarsan taşma durur ama kartlar içeriklerinden dar kalır ve yazılar ezilir. Çoğu zaman asıl çözüm, kartları alt satıra geçirmektir.
Kafam karıştı, daha basit anlat
Flex öğesi içeriğinden küçülmez. Sığmıyorsa ya alt satıra geçir ya da küçülmesine bilerek izin ver.
Flex öğelerinin varsayılan min-width değeri nedir ve ne anlama gelir?
Tek satırlık bir flex kapsayıcıda kartlar telefonda ekrandan taşıyor. Hangisi taşmayı durdurur ama kartları içeriklerinden dar bırakır?
Sarmak mı, ızgara mı?
flex-wrap: wrap sığmayan kartı alt satıra geçirir. Ama her satırı ayrı ayrı doldurur: tablette üst satırda üç, alt satırda iki kart varsa alttakiler daha geniş olur.
Grid’de repeat(auto-fit, minmax(200px, 1fr)) sütun sayısını ekrana bırakır ve bütün kartları aynı genişlikte tutar. Kısa son satırda yalnızca boş bir hücre kalır.
Kafam karıştı, daha basit anlat
flex-wrap her satırı kendi başına doldurur. Grid bütün satırlara aynı sütunları verir.
flex-wrap: wrap ile tablette üstte üç, altta iki kart var; kartlar flex: 1 1 200px. Alttaki kartlar neden daha geniş?
Kendin gör
Beş kart, bir kutu
Tohum 552205.list { display: flex; gap: 16px } .card { flex: 1 }Oynat ya da adımla.
Şu an ne oldu?
flex, tek satır
.list { display: flex; gap: 16px } .card { flex: 1 }
Görevler0/3
Telefon ekranında sayfayı yana kaydıraçık
İpucu
Varsayılan ayarlar yeter.
Son satırdaki kartı ötekilerden geniş yapaçık
İpucu
Satırlar oluşsun, ama her satır kendi başına dolsun.
Tablette kartları satırlara böl ama hepsi aynı genişlikte kalsınaçık
İpucu
Sütunları bir kez belirleyen düzen hangisi?
Olay günlüğü (0)
Henüz olay yok. Oynat veya adımla.
- Varsayılanla oynat. Telefonda tek satır: 1064px’lik içerik 320px’lik ekrana sığmadı.
- “min-width: 0” seç. Taşma bitti ama kartlar ezildi.
- flex-wrap’e geç, ekranı tablet yap. Alt satırdaki iki kart daha geniş.
- grid’e geç. Bütün kartlar aynı genişlikte, bir hücre boş.
- Masaüstünü dene. Dört düzen de tek satıra sığdı.
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)) ne yapar?
Tuzaklar
İç içe flex. Bir flex öğesinin içinde uzun, bölünmeyen bir yazı varsa (bir ayar adı, bir link) o öğe de küçülmez. Kapsayan öğeye min-width: 0, yazıya overflow-wrap: anywhere gerekir.
Her şeyi grid yapmak. Bir ikon ve bir yazıyı yan yana koymak için grid kurmak gereksizdir. Tek sıra flex’in işidir.
Sabit genişlik. Kartlara width: 300px yazmak, 320px’lik ekranda kenar boşluklarıyla birlikte taşar. Sabit yerine en az ve en çok sınır ver.
Kafam karıştı, daha basit anlat
Uzun yazılara bölünme izni ver, tek sıra için grid kurma, sabit genişlik yerine sınır kullan.
Bir flex satırında kısa bir başlık ve uzun, boşluksuz bir IBAN var. Telefonda satır taşıyor. En doğru düzeltme hangisi?
Aşağıdaki örnek bir bankacılık uygulamasının hesaplar ekranından: kart galerisi grid, kartın içi flex.
Derinleş · Hesap kartları: dışı grid, içi flex 3 dosya · ~45 satır · ilk okumada atlayabilirsin
Kendini sına
flex: 1 verilen bir öğe, içeriğinden de küçük olacak kadar daralabilir.
Kartlara width: 300px yazıldı, sayfa kenarlarında 16px iç boşluk var. 320px'lik telefonda ne olur?
Aklında kalacak üç şey
- 1 Flexbox tek yönde dizer: bir satır ya da bir sütun. Grid satırı ve sütunu birlikte kurar; bütün hücreler aynı ızgaraya oturur.
- 2 Flex öğelerinin varsayılan min-width değeri auto'dur: içeriklerinden küçülmezler. Tek satıra sığmayan kartlar sayfayı yana kaydırır.
- 3 Sığmayan kartlar için iki yol var: flex-wrap ile alt satıra geçirmek ya da grid'de repeat(auto-fit, minmax(…)) ile sütun sayısını ekrana bırakmak.
4 kart sonraki derste seni bekliyor