1. CSS Grid’e (Izgara) Giriş
  2. CSS Grid Özellikleri
  3. fr birimi
  4. CSS Izgara çizgi isimlendirmesi ve kullanımı
  5. Sayfa planlama sihirbazı grid-template-areas
  6. Explicit(belirlenmiş) ve implicit(belirlenmemiş) grid ögeleri
  7. CSS minmax işlevsel değeri
  8. repeat() işlevi, auto-fill ve auto-fit değerleri
  9. CSS Grid öge özellikleri

CSS grid yazılarımızın 10. sundayız. Yazımızın konusu hizalama ve sıralama hakkında olacaktır.

CSS grid ögesi ve kapsayıcısına atanan toplam 9 adet hizalama tanımları vardır.

  • justify-items
  • align-items
  • place-items
  • justify-content
  • align-content
  • place-content
  • justify-self
  • align-self
  • place-self

Yukarıdaki tanımlar W3C’nin kutu modeli hizalama modülü olarak belirlediği modülün özellikleridir. Hem grid hem de flex hizalamaları için kullanılır.

justify-items, align-items, tanımlarıyla justify-content, align-content, tanımları arasındaki fark -items ile bitenlere atanan değerler, kapsayıcı içindeki her bir ögeye ayrı ayrı uygulanırken, -content ile bitenlere atananlar kapsayıcı içindeki ögelerin hepsi bir içerik olarak kabul edilip topluca uygulanırlar.

Eğer flex hizalama özelliklerini ve etkilerini biliyorsanız benzer şeyler grid için de geçerlidir. Grid ögelerinin hizalamasında flex’e göre şöyle bir fark vardır: grid iki eksen üzerine (X,Y) etki ederken flex tek eksene etki eder.

iki eksenli planlama

Bu yazıda flex’te anlattığımız bilgileri tazeleyeceğiz. Bu özellikler kapsayıcıya yaptığı etki ile grid ögesine yaptığı etkileri ayrı ayrı inceleyelim.

Kapsayıcı grid hizalama özellikleri

6’sı grid kapsayıcısına

  • justify-items
  • align-items
  • place-items kısaltması
  • justify-content
  • align-content
  • place-content kısaltması

3’ü grid ögesine atanır.

  • justify-self
  • align-self
  • place-self kısaltması

Grid kapsayıcı ve grid öge hizalama tanımları aşağıdaki değerleri alır.

  • auto
  • normal
  • start
  • end
  • center
  • stretch
  • baseline
  • first baseline
  • last baseline

Aşağıda verdiğimiz grid hizalama örneklerini sadece bir değer için vereceğiz. Siz yukarıdaki değerlerin her birini tek tek deneyerek sonuçlarını görebilirsiniz.

justify-items

Kapsayıcı grid içindeki ögelerinin tamamının yatayda hizalanması için kullanılır.

.kapsayici {
   display: grid;
   grid-gap: 1rem;
   grid-template-columns:  repeat(5, 150px);
   grid-template-rows: repeat(5, 100px);
   justify-items: center;
}

justify-items

Yatayda tüm grid ögelerini ortalamış olduk. Grid ögesinin içeriği grid hücresinin alanından daha büyükse bu özellik işlevsel olur.

justify-items atanmış kapsayıcı içindeki her bir grid ögesinin justify-self değerine atanmış gibi davranır.

align-items

Kapsayıcı grid içindeki ögelerinin tamamının dikeyde hizalanması için kullanılır.

.kapsayici {
   display: grid;
   grid-gap: 1rem;
   grid-template-columns:  repeat(5, 150px);
   grid-template-rows: repeat(5, 100px);
   align-items: center;
}

align-items

Dikeyde tüm grid ögelerini ortalamış olduk.

align-items atanmış kapsayıcı içindeki her bir grid ögesinin align-self değerine atanmış gibi davranır.

place-items kısaltması

place-items tanımı yukarıda tanımladığımız align-items ve justify-items tanımlarının kısaltmasıdır. Yatay ve dikey tanımları ortak bir yerden yapılmış oluruz.

.kapsayici {
   display: grid;
   grid-gap: 1rem;
   grid-template-columns:  repeat(2, 100px);
   grid-template-rows: repeat(3, 50px);
   justify-content: center end;
}

place- tanımları grid ile birlikte geldiği için diğer tanımlara göre tarayıcı desteği daha düşüktür. Şu an baktığımda %87 (Aralık 2019)

justify-content

Grid ögelerinin genişliği, kapsayıcıdan az olduğu durumlar için etkindir. Grid kapsayıcı, içindeki ögeleri tek bir içerik gibi kabul edip ona göre atanan değerleri uygular. justify-content yatayda hizalama yapar.

Yukarıdaki değerlere ek olarak

  • space-around
  • space-between
  • space-evenly

değerlerini de alır.

.kapsayici {
   display: grid;
   grid-gap: 1rem;
   grid-template-columns:  repeat(2, 100px);
   grid-template-rows: repeat(3, 50px);
   justify-content: center;
   width: 315px;
   height: 250px;
}

justify-content

Grid kapsayıcı, içindeki tüm ögeler bir içerik gibi kabul edip tümü birden yatayda ortalandı.

align-content

Grid ögelerinin yüksekliği kapsayıcıdan az olduğu durumlar için etkindir. Grid kapsayıcı içindeki ögeleri tek bir içerik gibi kabul edip ona göre atanan değerleri uygular. align-content tanımı içeriği dikeyde hizalar.

Yukarıdaki değerler ek olarak

  • space-around
  • space-between
  • space-evenly

değerlerini de alır.

.kapsayici {
   display: grid;
   grid-gap: 1rem;
   grid-template-columns:  repeat(2, 100px);
   grid-template-rows: repeat(3, 50px);
   align-content: center;
   width: 315px;
   height: 250px;
}

align-content

Grid kapsayıcı, içindeki tüm ögeler bir içerik gibi kabul edilip tümü birden dikeyde ortalandı.

place-content kısaltması

place-content tanımı align-content ve justify-content tanımlarının kısaltmasıdır.

.kapsayici {
   display: grid;
   grid-gap: 1rem;
   grid-template-columns:  repeat(2, 100px);
   grid-template-rows: repeat(3, 50px);
   place-content: start center;
}

place- tanımları grid ile birlikte geldiği için diğer tanımlara göre tarayıcı desteği daha düşüktür. Şu an baktığımda %87 (Aralık 2019)

Grid ögesi tanımları

CSS grid ögesi hizalama tanımları 3 tanedir.

  • align-self
  • justify-self
  • place-self kısaltması

Aldığı değerler kapsayıcı değerleriyle aynıdır.

justify-self

Tanımlandığı CCC grid ögesinin yatayda hizalanmasını sağlar.

.oge1 {
    justify-self: start
}

justify-self

oge1 sınıfı tanımlı ilk eleman belirlenen hücrenin başlangıç çizgisine hizalanmıştır.

align-self

CSS grid ögesine atanan bu tanımlama ile sadece tanımlı ögenin dikeydeki hizasını ayarlarız.

.item1 {
    align-self: end;
}

align-self

oge1 sınıfı tanımlı ilk eleman belirlenen hücrenin alt çizgisine hizalanmıştır.

place-self kısaltması

CSS ögesine atanan align-self ve justify-self tanımları kısaltıp tek tanımda birleştirebilriz.

.item1 {
    place-self: center right
}

place- tanımları grid ile birlikte geldiği için diğer tanımlara göre tarayıcı desteği daha düşüktür. Şu an baktığımda %87 (Aralık 2019)

Sıralama order özelliği

order özelliği flex’ten bildiğimiz bir özellik. CSS grid ögeleri de tanımlanan order değerine göre sırasını ayarlar. order tanımı grid tarafından otomatik olarak sıralanmış ögelere etki eder, grid-column, grid-rows ve grid-areaile sıralaması özel olarak etikilenmiş ögelere etki etmez.

İçeriği dinamik olarak eklenen ögelerin olduğu bir yapıda order özelliği kullanılabilir. Dinamik birçok öge eklediğimiz bir yapıda, bir ögenin her zaman en son sırada olmasını order ile sağlayabiliriz.

Flex’tekinin aksine grid ögelerinin sıralaması için sadece order özelliği yoktur. Yukarıda gördüğümüz ve diğer yazılarda bahsettiğimiz özellikler ile sıralama işini yapabiliyoruz. Grid yapısı içinde order çok aranacak bir özellik değil gibi.

Grid ögelerinin sıralama özellikleri sadece görsel olarak etki eder. Kaynak kodunun sıralamasına etki etmediği için erişebilirlik açısından sorunlar çıkarabilir. Bu konuya dikkat etmek gerekir.

Kalın sağlıcakla.

Kaynaklar

  1. CSS Grid’e (Izgara) Giriş
  2. CSS Grid Özellikleri
  3. fr birimi
  4. CSS Izgara çizgi isimlendirmesi ve kullanımı
  5. Sayfa planlama sihirbazı grid-template-areas
  6. Explicit(belirlenmiş) ve implicit(belirlenmemiş) grid ögeleri
  7. CSS minmax işlevsel değeri
  8. repeat() işlevi, auto-fill ve auto-fit değerleri

Grid yazılarımızın 9. sındayız. Bu yazıda grid öge özelliklerine değineceğiz.

Şimdiye kadar ki yazılarda hep kapsayıcı elemana yapılan tanımlarla CSS grid ögelerini konumlandırdık. Bu yazıdaysa grid ögesine yapılan atamalarla grid ögesini konumlandırmayı göreceğiz. Şimdiye kadar yapılan tanımlar genel tanımlarken bu yazımızda bahsedeceğimiz tanımlar özel tanımlar olacak.

CSS Grid Modülü terimleri

Bu tanımlar genelde grid izi sayıları üzerinden yapılıyor. Bu sayılar soldan sağa doğru yazılan diller için soldan sağa iken sağdan sola yazılan diller için sağdan sola numaralandırılır. Bir de grid-template-area ile kullandığımız ve grid ögelerine tanımladığımız grid isimleriyle de aynı şeyleri yapabiliriz.

grid-column-start, grid-column-end, grid-row-start ve grid-row-end tanımları ve bu tanımların kısayolları olan grid-column, grid-row ve grid-area tanımlarını anlatmaya çalışacağız. Son olarak da span anahtar kelime değerinden bahsedeceğiz.

Bu tanımlar css grid ögesinin sol/sağ ve üst/alt sınırlarını belirler. Sırasıyla grid-columm-start/grid-column-end ve grid-row-start/grid-row-end tanımlarıyla bu işi yapıyoruz.

.icerik {
    grid-column-start: 2;
    grid-column-end: 4;
    grid-row-start: 2;
    grid-row-end: 4;
}

Tanımıyla icerik elemanı kolon olarak 2. ve 4. ızgara satır çizgisi arasında ve satır olarak 2. ve 4. satır çizgisi arasında konumlanacaktır. Benzer şekilde diğer elemanları da yerleştirebiliriz.

Sadece tek grid kapsamı olan kolon ve satır tanımlarında -start tanımları yeterli olur. Örneğin

.tanitim {
    grid-column-start: 1;
    grid-column-end: 2;
    grid-row-start: 3;
    grid-row-end: 5;
}

Kolon tanımı tek bir hücreyi kapsadığı için tanımını aşağıdaki gibi yazabiliriz.

.tanitim {
    grid-column-start: 1;
    grid-row-start: 3;
    grid-row-end: 5;
}

Negatif değerler

Grid öge tanımlarında sadece artı değerler değil eksi değerle de kullanılabilir. Negatif değerler tanımlı ızgara çizgilerinin sondan başa doğru tanımlamamızı sağlar. Bu tanımlar kapsayıcı elemanın alt/sağ çizgilerine göre yerleştirme yapar.

.ust-alan {
    grid-column-start: 1;
    grid-column-end: 4;
}

Tüm satırı kaplayan bir grid ögesi yapmak için

.ust-alan {
    grid-column-start: 1;
    grid-column-end: -1;
}

Her zaman ızgara izinin sonuna dayanacaktır.

Yukarıdaki tanımın hepsini de eksi değer ile de yapabiliriz.

.ust-alan {
    grid-column-start: -4;
    grid-column-end: -1;
}

kodu aynı sonucu verecektir.

grid-column ve grid-row

Grid ögelerine yapılan grid-column-start, grid-column-end, grid-row-start ve grid-row-end daha kısa yazmamızı sağlayan özelliklerdir.

.icerik {
    grid-column-start: 2;
    grid-column-end: 4;
    grid-row-start: 2;
    grid-row-end: 4;
}

Yukarıdaki örneği tekrar yazalım.

.icerik {
    grid-column: 2 / 4;
    grid-row: 2 / 4;
}

Tüm sayfayı bu şekilde kısaltırsak

İlk baştaki kod 52 satır iken son yaptığımız 45 satıra düştü.

Izgara çizgi isimleri kullanıyorsak kısayollarda bu isimleri de yazabiliriz.

grid-area kısaltması

Yukarıda yaptığımız kısaltmayı daha da kısaltabiliriz. Kolon ve satırları tek tanımda toplamak için grid-area kısayolu kullanırız.

grid-area: row-start / col-start / row-end / col-end;

Sıralamayı unutursanız, hatırlamak için şöyle düşünebilirsiniz: ilk üst/sol (row-start / column-start) sonra alt/sağ (row-end / column-end) tanımlarının geldiğini düşünün.

.tanitim {
    grid-column: 1 / 2;
    grid-row: 3 / 5;
}

Yukarıdaki tanımı tek satırda

.tanitim {
    grid-area: 3 / 1 / 5 / 2;
}

span tanımı

CSS grid ögesini genişletmek için kullanılır. Izgara hücrelerini bileştirmek için span anahtar değerini de kullanabiliriz. Örneğin

.tanitim {
    grid-column: 1 / 2;
    grid-row: 3 / 5;
}

Kodunu aşağıdaki gibi de yazabiliriz.

.tanitim {
    grid-column: 1;
    grid-row: 3 / span 2;
}

Kalın sağlıcakla.

Kaynaklar

  1. CSS Grid’e (Izgara) Giriş
  2. CSS Grid Özellikleri
  3. fr birimi
  4. CSS Izgara çizgi isimlendirmesi ve kullanımı
  5. Sayfa planlama sihirbazı grid-template-areas
  6. Explicit(belirlenmiş) ve implicit(belirlenmemiş) grid ögeleri
  7. CSS minmax işlevsel değeri

CSS grid yazılarımızın 8. sinde sizlere repeat işlevi ve beraberinde kullanılan auto-fit, auto-fill ve minmax değerlerini anlatacağım. minmax işlevinden bir önceki yazımızda bahsetmiştim. Burada sadece minmax‘ın repeat içindeki kullanımına değineceğim.

CSS grid’in göz alıcı özelliklerinden birisi ögeleri otomatik olarak yerleştirmesidir. Medya sorguları olmadan sayfa planlarımızı uyumlu hale getirmek benim hayal ettiğim bir özellikti. Tabi bunun sadece tekrarlanan grid ögeleri için olması üzücü, umarım ilerde tüm grid ögeleri için benzer bir özellik olur.

repeat işlevi

repeat işlevi uyguladığımız grid-template-columns ve grid-template-rows tanımlarının içindeki tekrarlayan yapıları teke indiren bir kısayoldur.

Örneğin 12 kolonlu ve kolonları eşit olarak yayılan esnek bir sayfa yapısını kodlamak isteyelim.

display:grid;
grid-template-area: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;

Uğraşı isteyen ve kötü gözüken bir kod, işte tam burada CSS grid repeat işlevi devreye giriyor.

display: grid;
grid-template-columns: repeat(12, 1fr);

Bu kadar. Nasıl, çok basit değil mi?

repeat(12, 1fr)

İlk parametre tekrarın adedi, ikinci parametre tekrarlanacak grid ögesinin boyutunu gösteriyor. Değer olarak ızgara izi değerlerinin tümünü (ölçü değerleri, fr, min-content, max-content ve auto) alır.

Başka bir örnek yapalım. Bu sefer farklı boyutlardaki tekrarlayan kolonlarımız olsun.

display: grid;
grid-template-columns:40px 1fr 2fr 40px 1fr 2fr 40px 1fr 2fr 40px 1fr 2fr;

gibi bir kodu tekrar eden blokları birleştirerek aşağıdaki gibi yazabiliriz.

display: grid;
grid-template-columns: repeat(4, 40px 1fr 2fr);

şeklinde yazabiliriz.

Tekrarlayan ve tekrarlamayan ögelerin birlikte kullanımı

Izgara izi tanımlarında repeat işlevini tekrar etmeyen değerlerle birlikte de kullanabiliyoruz. Yukarıdaki örnekte en sağa 40px’lik bir kolon daha ekleyelim mesela.

display: grid;
grid-template-columns:repeat(3, 40px 1fr 2fr) 40px;

şeklinde bir tanım ile istediğimiz sonucu alırız. Bu şekilde sayfa planımızda tekrarlayan alanlar ve tekrarlamayan alanları birlikte kullanarak bir çok çözüm üretebiliriz. Aynı şekilde birden fazla repeat işlevini de kullanabiliriz.

Örnekleri genelde kolonlar üzerinden versek te satırlar içinde aynı durum geçerlidir.

repeat ve minmax işlevini birlikte kullanalım

Yukarıdaki örnekler de gördüğümüz gibi geniş alanlarda esnek değerler iyi sonuç verirken daha küçük alanlarda ögeler büzüşüp işlevsiz görünmektedir. Bu durumu engellemek için bir önceki yazımda anlattığım minmax işlevini kullanacağız.

display: grid;
grid-template-columns: repeat(12, minmax(200px, 1fr));

Bu kodlama sonucunda da sayfada yatay kaydırma çubuğu çıkacaktır. Bu kaydırmayı engellemek için auto-fit ve auto-fill değerlerini kullanabiliriz.

auto-fit ve auto-fill değerleri

Bu değerler sayfa yapısını ve kolonları/satırları görüntüleyen aracın boyutuna göre bir alt satıra/yan kolona geçişini otomatik bir şekilde ayarlar. Bunu medya sorgusu kullanmadan yapmaları müthiş. Bu değerler özetle CSS grid ögelerinin satır içinde alt satıra kayıp kaymayacağını ayarlar.

Farklı bir örnekle bu değerleri anlamaya çalışalım.

.container {
   display: grid;
   grid-template-columns: repeat(4, 200px);
   grid-gap: 1.5rem;
}

Genişliği 200px olan grid ögelerini 4’lü kolonlara ayırır. Gösterilen aracın durumuna göre sağ tarafta boşluk oluşabilir. Masaüstü ekranlarda 5. öge ilk satıra sığardı ancak biz 4 kolon tanımı yaptığımız için 4 kolondan sonrasını bir alt satıra atacaktır. Uyumlu bir sayfa planını düşündüğümüzde eğer sığıyorsa bir üst satırda göstermek daha güzel olurdu. Bunun için görüntülenen aracın boyutuna göre medya sorgularıyla grid-template-columns değeri tanımlamak gerekirdi. İşte burada yardımımıza tekrarlanan ögeler için auto-fill ve auto-fit değerleri yetişiyor.

Yukarıdaki tanımı aşağıdaki şekilde değiştirerek

grid-template-columns: repeat(auto-fill, 200px);

200px’lik kolonlar dizilecektir. Yukarıdaki gibi 4 adet kolon olarak sınırlanmayacak dizilen kolonların sağında 200px’lik veya daha fazla boşluk olduğunda bir ögeyi ilk satıra çıkaracaktır. Bir de auto-fittanımı var.

grid-template-columns: repeat(auto-fit, 200px);

auto-fill ile auto-fit tanımlarının arasındaki fark ancak satır genişliğinin, grid ögelerinin toplam genişliğinden daha fazla olduğu durumlarda ortaya çıkar. auto-fill ile auto-fit tanımları sayesinde grid ögelerinin fazladan kalan boşluğu nasıl değerlendirmesi gerektiğine biz karar veririz. Aşağıdaki hareketli giflerde durum daha iyi anlaşılır.

auto-fill auto-fit karşılaştırma

Hareketli gif’te görüldüğü gibi kapsayıcı genişliği içerik toplam genişliğini geçince fark anlaşılıyor. auto-filltanımında boş kolonlar eklerken, auto-fittanımında boş alanları mevcut öge genişliğine ekliyor.

Farkı görmek için bir diğer örnek ise Wes Bos’un videosunda anlattığı örnek.

En son elemana -1 tanımı yapalım. Daha sonraki bir yazımızda grid ögesi tanımlarını öğreneceğiz.

.grid-ogesi-7 {
  grid-column-end: -1;
}

Kodu 7 numaralı elemanı grid kapsayıcısının en sağına yaslamış olduk. Tabi bunu auto-fill tanımlı kapsayıcıda görebiliyoruz. auto-fittanımlı kapsayıcı içindeki ögeler boş alanı doldurduğu için böyle bir durum söz konusu bile olamıyor.

Kalın sağlıcakla.

Kaynaklar