Uyumlu Flexbox ve Grid
Bu dersin sonunda kırılma noktası yazmadan kendini ekrana uyduran kart düzenleri ve ekrana göre değişen sayfa yerleşimleri kurabileceksiniz.
Her şey için @media gerekmez
Flexbox ve Grid, içeriğin kapladığı alana göre kendini düzenleyebilir. Doğru birkaç değerle hiç sorgu yazmadan duyarlı düzenler kurabilirsiniz. Bu dersin örneklerinde kod ile önizleme arasındaki ayracı sürükleyip elemanların nasıl yeniden dizildiğini izleyin.
flex-basis ve flex
HTML bölümünde flex: 1 görmüştünüz. Bu aslında üç değerin kısayoludur:
flex-growBoş alan varsa ne kadar büyüsün?flex-shrinkYer yoksa ne kadar küçülsün?flex-basisBaşlangıç boyutu ne olsun?
flex: 1 1 150px şunu der: “150 piksel civarında başla, gerekirse büyü, gerekirse küçül.” flex-wrap: wrap ile birleştiğinde bir sıraya kaç öğe sığacağına tarayıcı karar verir.
<div class="liste">
<div class="oge">Bir</div>
<div class="oge">İki</div>
<div class="oge">Üç</div>
<div class="oge">Dört</div>
</div>.liste {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.oge {
flex: 1 1 150px;
padding: 16px;
background-color: lightblue;
}Son satırda kalan öğeler, kalan alanı paylaşmak için genişler. Kartların hep aynı boyutta kalmasını istiyorsanız Grid daha uygundur.
Kendiliğinden sütunlar: auto-fit ve minmax
İnternetteki kart düzenlerinin çoğu tek satırlık şu kalıpla yazılabilir:
<div class="kartlar">
<div class="kart">1</div>
<div class="kart">2</div>
<div class="kart">3</div>
<div class="kart">4</div>
<div class="kart">5</div>
</div>.kartlar {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
gap: 8px;
}
.kart {
padding: 24px;
background-color: lightgreen;
text-align: center;
}Adım adım okuyalım:
minmax(120px, 1fr)Her sütun en az 120 piksel, boş alan varsa eşit pay.repeat(auto-fit, ...)Sığabildiği kadar sütun oluştur.
Burada auto-fit yerine auto-fill da yazabilirsiniz. Fark, öğe sayısı azken ortaya çıkar: auto-fit boş sütunları kapatıp öğeleri genişletir, auto-fill boş sütunları korur.
Dar ekranda 120 piksel bile fazlaysa taşmaması için minmax(min(120px, 100%), 1fr) yazabilirsiniz.
Sayfa düzeni: grid-template-areas
Bölgelere ad vererek yerleşimi metin gibi yazabilirsiniz. Sütun ve satırları hesaplamak yerine haritayı çizersiniz. Önizlemeyi genişletince yan bölüm sağa geçer:
<div class="sayfa">
<header class="ust">Üst bölüm</header>
<main class="ana">Ana içerik</main>
<aside class="yan">Yan bölüm</aside>
<footer class="alt">Alt bölüm</footer>
</div>.sayfa {
display: grid;
gap: 8px;
grid-template-areas:
"ust"
"ana"
"yan"
"alt";
}
.ust { grid-area: ust; background-color: lightblue; }
.ana { grid-area: ana; background-color: khaki; }
.yan { grid-area: yan; background-color: lightgreen; }
.alt { grid-area: alt; background-color: lightpink; }
.sayfa > * {
padding: 16px;
}
@media (min-width: 500px) {
.sayfa {
grid-template-columns: 1fr 140px;
grid-template-areas:
"ust ust"
"ana yan"
"alt alt";
}
}Mobilde bölgeler alt alta durur. Büyük ekranda yalnızca harita değişir, HTML’e dokunulmaz.
Menüyü uyarlamak
Sık görülen bir başka durum üst menüdür. Yer yeterse yan yana, değilse alt alta dizilir. flex-wrap ve justify-content çoğu zaman yeterlidir:
<nav class="menu">
<a class="logo" href="#">Kulüp</a>
<ul class="baglantilar">
<li><a href="#">Ana Sayfa</a></li>
<li><a href="#">Etkinlikler</a></li>
<li><a href="#">Katıl</a></li>
</ul>
</nav>.menu {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
gap: 8px 24px;
padding: 12px;
background-color: whitesmoke;
}
.logo {
font-weight: bold;
}
.baglantilar {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin: 0;
padding: 0;
list-style-type: none;
}gap: 8px 24px iki değer alır: satırlar arası ve sütunlar arası.
Taşma tuzağı: min-width: 0
Flexbox ve Grid öğeleri varsayılan olarak içeriklerinden daha dar olamaz. İçlerinde uzun bir sözcük veya kod bloğu varsa düzen yana taşar. Öğeye min-width: 0 yazmak bu engeli kaldırır.
<div class="satir">
<div class="sol">Sol</div>
<div class="sag">cokuzunbirsozcukcokuzunbirsozcukcokuzunbirsozcukcokuzunbirsozcuk</div>
</div>.satir {
display: flex;
gap: 8px;
}
.sol {
flex: 0 0 60px;
background-color: khaki;
}
.sag {
flex: 1;
min-width: 0;
overflow-wrap: anywhere;
background-color: lightblue;
}min-width: 0 satırını silip önizlemeyi daraltırsanız sayfanın yana taştığını görürsünüz.
Her düzen için @media yazmak. Önce flex-wrap ve auto-fit ile çözmeyi deneyin.
auto-fit kullanırken yalnızca 1fr yazmak. repeat(auto-fit, 1fr) geçersizdir, minmax ile bir en küçük boyut gerekir.
grid-template-areas haritasında sütun sayısını eşitlememek. Bütün satırlarda aynı sayıda ad olmalıdır, yoksa kural geçersiz olur.
HTML sırasını görsel düzen için değiştirmek. Kaynak sıra anlamlı kalmalıdır. Görsel yerleşimi CSS ile yapın.
Kaç sütun sığarsa o kadar sütun oluşturan hangisidir?
-
repeat(auto-fit, minmax(150px, 1fr)):: Doğru. -
repeat(3, 1fr):: Bu her zaman üç sütundur. -
repeat(auto-fit, 1fr)::auto-fitkesin bir en küçük boyut gerektirir.
flex: 1 1 200px içindeki 200px neyi belirtir?
- En büyük genişliği :: Öğe 200 pikselden büyüyebilir.
- Öğenin başlangıç boyutunu :: Doğru. Bu değer
flex-basisdeğeridir. - Öğeler arasındaki boşluğu :: Boşluk için
gapkullanılır.
Uzun içerikli bir Flexbox öğesi sayfayı yana taşırıyor. Öğeye ne yazarsınız?
-
flex-wrap: wrap;:: Bu özellik kapsayıcıya yazılır ve içerik taşmasını çözmez. -
min-width: 0;:: Doğru. -
order: 1;:: Bu yalnızca görsel sırayı değiştirir.
Hedefteki kodu yazın. .kartlar için bildirimleri bu sırayla yazın: display değeri grid, grid-template-columns değeri repeat(auto-fit, minmax(120px, 1fr)), gap değeri 8px olsun. Altına bu sınıfa sahip bir div yazın. İçinde A ve B yazan iki div olsun.
<style>
.kartlar {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
gap: 8px;
}
</style>
<div class="kartlar">
<div>A</div>
<div>B</div>
</div>Hedefteki kodu yazın. .liste için display değeri flex, flex-wrap değeri wrap olsun. .oge için flex değeri 1 1 150px olsun. Altına liste sınıfına sahip bir div yazın. İçinde oge sınıfına sahip, Bir ve İki yazan iki div olsun.
<style>
.liste {
display: flex;
flex-wrap: wrap;
}
.oge {
flex: 1 1 150px;
}
</style>
<div class="liste">
<div class="oge">Bir</div>
<div class="oge">İki</div>
</div>Bu derste öğrendikleriniz
flex-wrapveflex-basisöğelerin sığdığı kadar yan yana dizilmesini sağlar.repeat(auto-fit, minmax(...))sorgusuz kart düzenleri kurar.grid-template-areasyerleşimi bir harita gibi yazar ve@mediaile değiştirilebilir.- Flexbox ve Grid öğelerinde taşma için
min-width: 0gerekir.
Dersi bitirdin mi?Bu dersi tamamladın.
İlerlemen bu tarayıcıda saklanır.