CSS Izgarasını Anlama: Izgara Şablonu Alanları

Yayınlanan: 2022-03-10
Kısa özet ↬ Rachel Andrew, yeni bir dizide CSS Izgara Düzeni spesifikasyonunu bozuyor. Bu sefer, öğeleri yerleştirmek için grid-template-areas nasıl kullanılacağına bir göz atacağız.

CSS Izgara Düzenini kullanırken, öğeleri her zaman bir ızgara çizgisinden diğerine yerleştirebilirsiniz. Ancak, düzeninizi tanımlamanın, doğası gereği görsel olan alternatif bir yolu vardır. Bu makalede, grid üzerinde yerleşimi tanımlamak için grid-template-areas özelliğinin nasıl kullanılacağını öğreneceğiz ve özelliğin gerçekte nasıl çalıştığını öğreneceğiz.

Bu serideki önceki makaleleri kaçırdıysanız, onları burada bulabilirsiniz:

  • Bölüm 1: Bir Izgara Kapsayıcısı Oluşturma
  • Bölüm 2: Izgara Çizgileri
  • Bölüm 3: Izgara Şablonu Alanları

grid-template-areas Düzeni Tanımlama

grid-template-areas özelliği, bir veya daha fazla dizeyi değer olarak kabul eder. Her dize (tırnak içine alınmış) ızgaranızın bir satırını temsil eder. Bu özelliği grid-template-rows ve grid-template-columns kullanarak tanımladığınız bir grid üzerinde kullanabilir veya tüm satırların otomatik olarak boyutlandırılacağı bir layout oluşturabilirsiniz.

Aşağıdaki özellik ve değer, her biri iki sütun izini ve iki satır izini kapsayan dört alanlı bir ızgarayı tanımlar. Bir alanın, kapsamasını istediğiniz tüm hücrelerde adı tekrarlayarak birden çok parçaya yayılması sağlanır:

 grid-template-areas: "one one two two" "one one two two" "three three four four" "three three four four";

Öğeler, grid-area özelliği kullanılarak bir kimlikle adlandırılarak mizanpaja yerleştirilir. Bu nedenle, ızgaranın one adlı alanına test sınıfına sahip bir öğe yerleştirmek istersem, aşağıdaki CSS'yi kullanırım:

 .test { grid-area: one; }

Bunu, aşağıda gösterilen CodePen örneğinde çalışırken görebilirsiniz. Dört öğem var (1'den dörde kadar olan sınıflarda); bunlar ızgara grid-area özelliği kullanılarak ilgili ızgara alanına atanır ve bu nedenle ızgarada doğru kutularda görüntülenir.

CodePen'de Rachel Andrew (@rachelandrew) tarafından kaleme alınan Basit ızgara şablon alanları örneğine bakın.

CodePen'de Rachel Andrew (@rachelandrew) tarafından kaleme alınan Basit ızgara şablon alanları örneğine bakın.

Firefox Grid Inspector kullanıyorsanız, her bir öğenin gerçekten iki satır ve iki sütun izini kapsadığını gösteren alan adlarını ve ızgara çizgilerini görebilirsiniz - bunların tümü öğenin kendisinde herhangi bir satır tabanlı konumlandırma yapmadan.

Firefox Grid Inspector'ın satırları vurguladığı dört öğeden oluşan bir ızgara
Her öğe iki satır ve iki sütuna yayılır

grid-template-areas Kullanma Kuralları

Bu şekilde layout oluştururken bazı kurallar vardır. Kuralları çiğnemek değeri geçersiz kılar ve bu nedenle düzeniniz gerçekleşmez. İlk kural, tam bir ızgara tanımlamanız gerektiğidir , yani ızgaranızdaki her hücre doldurulmalıdır.

Bir hücreyi (veya hücreleri) boş alan olarak bırakmak istiyorsanız, bunu bir . veya aralarında boşluk olmayan ... gibi seriler.

Bu nedenle, grid-template-areas değerini aşağıdaki gibi değiştirirsem:

 grid-template-areas: "one one two two" "one one two two" ". . four four" "three three four four";

Artık içinde içerik olmayan iki hücrem var. Üçüncü öğe, yalnızca kılavuzun son satırında görüntülenir.

Bir öğe artık yalnızca bir satıra yayılıyor ve Firefox Grid Inspector satırları vurguluyor
Artık ızgarada boşluk var

Her alanı yalnızca bir kez tanımlayabilirsiniz , yani bu özelliği, içeriği ızgara üzerinde iki yere kopyalamak için kullanamazsınız! Bu nedenle, aşağıdaki değer geçersiz olur ve three alanı çoğalttığımız için tüm özelliğin yok sayılmasına neden olur:

 grid-template-areas: "one one three three" "one one two two" "three three four four" "three three four four";

Dikdörtgen olmayan bir alan oluşturamazsınız, bu nedenle özellik 'L' veya 'T' şeklinde bir alan oluşturmak için kullanılamaz - bu da aşağıdaki değeri geçersiz kılar:

 grid-template-areas: "one one two two" "one one one one" "three three four four" "three three four four";

Dizeleri Biçimlendirmek

Yukarıda olduğu gibi grid-template-areas değerini görüntülemeyi seviyorum (her dize bir önceki satırın altındaki satırı temsil ediyor). Bu bana düzenin ne olacağına dair görsel bir temsil veriyor.

Buna yardımcı olmak için, her hücre arasına ek boşluk karakterleri eklemek ve ayrıca birden çok . boş hücreleri ifade eden karakterler.

Aşağıdaki değerde, daha küçük kelimeler arasında birden çok boşluk karakteri ve ayrıca çoklu . karakterler, böylece boş hücreler sıraya girer:

 grid-template-areas: "one one two two" "one one two two" "..... ..... four four" "three three four four";

Bununla birlikte, tüm dizelerin bir satırda olması da tamamen geçerlidir, bu nedenle örneğimizi aşağıdaki gibi yazabiliriz:

 grid-template-areas: "one one two two" "one one two two" "three three four four" "three three four four";
Atlamadan sonra daha fazlası! Aşağıdan okumaya devam edin ↓

grid-template-areas ve grid-area açıklama

Her alanın tam bir dikdörtgen olmasının nedeni, çizgi tabanlı yerleştirme kullanarak oluşturabileceğiniz şeklin aynısı olması gerektiğidir. Yukarıdaki örneğimize sadık kalırsak, bu düzeni bir sonraki CodePen'deki gibi ızgara çizgileriyle yapabiliriz. Burada ızgaramı daha önce olduğu gibi oluşturdum. Ancak bu sefer, uzun el grid-column-start , grid-column-end , grid-row-start ve grid-row-end özelliklerini kullanarak konumlandırma oluşturmak için ızgara çizgileri kullandım.

CodePen'de Rachel Andrew (@rachelandrew) tarafından kalem ızgara çizgisi yerleşimine bakın.

CodePen'de Rachel Andrew (@rachelandrew) tarafından kalem ızgara çizgisi yerleşimine bakın.

Not : Bir önceki makalem olan “CSS Izgarasını Anlamak: Izgara Çizgileri”ni okuduysanız, grid-area dört satırı aynı anda bildirmek için bir kısayol olarak kullanmanın mümkün olduğunu bileceksiniz.

Bu, düzenimizi aşağıdaki satır sırasına göre de oluşturabileceğimiz anlamına gelir:

  • grid-row-start
  • grid-column-start
  • grid-row-end
  • grid-column-end
 .one { grid-area: 1 / 1 / 3 / 3; } .two { grid-area: 1 / 3 / 3 / 5; } .three { grid-area: 3 / 1 / 5 / 3; } .four { grid-area: 3 / 3 / 5 / 5; }

grid-area özelliği, satır numaralarını ve satır adlarını alabildiğinden ilginçtir. Her moddayken farklı davrandığını anlamak da önemlidir.

Çizgi Numaraları ile grid-area kullanma

grid-area özelliğini satır numaralarıyla kullanırsanız, satırlar yukarıda açıklanan sırayla atanır.

Herhangi bir değeri kaçırırsanız - bu nedenle 1, 2 veya 3 satır numarası sağlarsanız - eksik değerler auto olarak ayarlanır; bu, alanın 1 parçaya yayılacağı anlamına gelir (bu varsayılandır). Bu nedenle, aşağıdaki CSS, diğer tüm değerler auto olarak ayarlanmış olarak bir öğeyi grid-row-start: 3 yerleştirir, bu nedenle öğe, mevcut ilk sütun izine otomatik olarak yerleştirilir ve bir satır izini ve bir sütun izini kapsar.

 grid-area: 3;

Kimliklerle grid-area kullanma

Bir kimlik kullanırsanız (Grid Düzeninde adlandırılmış alan buna denir), grid-area özelliği de dört satır alır. “CSS Gridini Anlamak: Bir Grid Konteyneri Oluşturmak” bölümünde anlatıldığı gibi gridinizde çizgileri isimlendirdiyseniz, bu isimlendirilmiş çizgileri numaralandırılmış çizgiler gibi kullanabilirsiniz.

Ancak, bazı satırları kaçırdığınızda olan şey, sayıları değil kimlikleri kullandığınızda olandan farklıdır.

Aşağıda, adlandırılmış çizgiler içeren bir ızgara oluşturdum ve bir öğe yerleştirmek için grid-area kullandım (son değer eksik):

 .grid { display: grid; grid-template-columns: [one-start three-start] 1fr 1fr [one-end three-end two-start four-start] 1fr 1fr [two-end four-end]; grid-template-rows: [one-start two-start] 100px 100px [one-end two-end three-start four-start] 100px 100px [three-end four-end];; } .two { grid-area: two-start / two-start / two-end; }

Bu, grid-column-end için satır adının eksik olduğu anlamına gelir. Spesifikasyon, bu durumda grid-column-end grid-column-start bir kopyasını kullanması gerektiğini söylüyor. Eğer grid-column-end ve grid-column-start aynıysa, o zaman bitiş çizgisi atılır ve esasen değer otomatik olarak ayarlanır, böylece numaralandırılmış versiyonda olduğu gibi bir parçaya yayılırız.

grid-row-end üçüncü değerini kaçırırsak da aynı şey olur; grid-row-start ile aynı olur ve bu nedenle auto olur.

Her bir grid-area nasıl kullanıldığına ve bunun daha sonra öğenin düzenini nasıl değiştirdiğine ilişkin sonraki CodePen örneğine bir göz atın:

CodePen'de Rachel Andrew (@rachelandrew) tarafından hazırlanan ızgara alanındaki Kalem Eksik kimliklerine bakın.

CodePen'de Rachel Andrew (@rachelandrew) tarafından hazırlanan ızgara alanındaki Kalem Eksik kimliklerine bakın.

Bu daha sonra grid-area neden bir alan adını temsil eden tek bir değer kimliğiyle çalıştığını açıklar.

grid-template-areas özelliği ile adlandırılmış bir alan oluşturduğumuzda, her alanın kenarına, kullandığınız alan adıyla aynı olan bir çizgi adıyla başvurulabilir. Bizim durumumuzda, one adlı alanımızı alabilir ve öğemizi aşağıdaki gibi adlandırılmış satırları kullanarak yerleştirebiliriz:

 .one { grid-row-start: one; grid-row-end: one; grid-column-start: one; grid-row-end: one; }

Satır one -start , sütun veya satırın başlangıç ​​ucuna çözümlenir. one -end , sütun veya satırın bitiş satırına çözümlenir.

Bu, grid-area: one dediğimizde, grid-area kısayolu için son üç değeri atladığımız anlamına gelir; hepsi ilk değerin kopyaları haline gelir - bizim durumumuzda hepsi one olur ve öğe tıpkı bizim uzun el kullanımımızda olduğu gibi yerleştirilir.

Grid Layout'ta isimlendirmenin çalışma şekli zekicedir ve daha önceki makalelerimde "CSS Grid Layout'ta Nesneleri Adlandırma" ve "CSS Izgarası ve Adlandırılmış Sütunlarla Editoryal Tasarım Desenleri" hakkında yazdığım bazı ilginç şeyleri mümkün kılar.

grid-template-areas Kullanırken Öğeleri Katmanlama

grid-template-areas kullanırken her hücreyi yalnızca bir ad kaplayabilir, ancak ana düzeninizi bu şekilde yaptıktan sonra yine de ızgaraya ek öğeler ekleyebilirsiniz. Satır numaralarını her zamanki gibi kullanabilirsiniz.

Aşağıdaki CodePen örneğinde, ek bir öğe ekledim ve zaten konumlandırılmış öğeler üzerinde satır tabanlı konumlandırma kullanarak konumlandırdım:

CodePen'de Rachel Andrew (@rachelandrew) tarafından yazılan Kalem Yerleştirme satır numaralarına sahip bir öğeye bakın.

CodePen'de Rachel Andrew (@rachelandrew) tarafından yazılan Kalem Yerleştirme satır numaralarına sahip bir öğeye bakın.

Her zamanki sütunlarınızı veya satırlarınızı oluştururken tanımlanan satır adlarını da kullanabilirsiniz. Daha da iyisi, alanların oluşumuyla oluşturulan bazı satır adlarına sahip olacaksınız. Alan adıyla dört satır adını nasıl alabileceğinizi zaten gördük. Ayrıca, her alanın başlangıç ​​kenarında, alanın adının -start eklenmiş bir çizgi ve her alanın sonunda -end eklenmiş bir çizgi alırsınız.

Bu nedenle, bir olarak adlandırılan alan, one one-start ​​olarak adlandırılan başlangıç ​​kenar çizgilerine ve one-end olarak adlandırılan bitiş kenar çizgilerine sahiptir.

Daha sonra ızgaraya bir öğe yerleştirmek için bu örtük satır adlarını kullanabilirsiniz. Yerleştirilen öğenin her zaman belirli bir satır adından sonra gelmesini istediğiniz sürece, ızgarayı farklı kesme noktalarında yeniden tanımlıyorsanız bu yararlı olabilir.

CodePen'de Rachel Andrew (@rachelandrew) tarafından yazılan Kalem Yerleştirme örtülü satır adlarına sahip bir öğeye bakın.

CodePen'de Rachel Andrew (@rachelandrew) tarafından yazılan Kalem Yerleştirme örtülü satır adlarına sahip bir öğeye bakın.

Duyarlı Tasarımda Izgara Şablon Alanlarını Kullanma

Genellikle bir bileşen kitaplığında bileşenler oluşturmakla çalışırım ve grid-template-areas kullanmanın, bir bileşenin CSS'den tam olarak nasıl görüneceğini görebilmek açısından yararlı olabileceğini düşünüyorum. Mevcut sütun izlerinin sayısını değiştirmeye ek olarak bazen grid-template-areas değerini yeniden tanımlayarak bileşeni farklı kesme noktalarında yeniden tanımlamak da çok basittir.

Aşağıdaki CSS'de bileşenim için tek bir sütun düzeni tanımladım. Ardından, minimum 600 piksel genişliğinde, iki sütunlu bir düzen oluşturmak için sütun sayısını ve grid-template-areas değerini yeniden tanımlıyorum. Bu yaklaşımın güzel yanı, bu CSS'ye bakan herkesin mizanpajın nasıl çalıştığını görebilmesidir!

 .wrapper { background-color: #fff; padding: 1em; display: grid; gap: 20px; grid-template-areas: "hd" "bd" "sd" "ft"; } @media (min-width: 600px) { .wrapper { grid-template-columns: 3fr 1fr; grid-template-areas: "hd hd" "bd sd" "ft ft"; } } header { grid-area: hd; } article {grid-area: bd; } aside { grid-area: sd; } footer { grid-area: ft; }

Ulaşılabilirlik

Bu yöntemi kullanırken, nesneleri hareket ettirmenin çok kolay olduğunun ve görsel gösterimin temel kaynak düzeninden ayrılması sorununa neden olduğunun farkında olmalısınız. Sitede dolaşan veya içeriği konuşurken ekranı izleyen herkes, şeylerin kaynağında olduğu sırayı kullanacaktır. Ekranı bu sırayla hareket ettirerek çok kafa karıştırıcı, bağlantısız bir deneyim yaratabilirsiniz. Bu yöntemi, kaynağın mantıklı bir sırada olduğundan ve görsel deneyimle eşleştiğinden emin olmadan bir şeyleri hareket ettirmek için kullanmayın.

Özet

Bu, mizanpajlar oluşturmak için grid-template-area ve grid-area özelliklerini kullanmanın aşağı noktasıdır. Bu düzen yöntemini daha önce kullanmadıysanız, bir deneyin. Düzenleri denemenin ve bir düzeni prototiplerken sıklıkla kullanmanın güzel bir yolu olduğunu düşünüyorum - bir nedenden dolayı nihayetinde üretim versiyonu için farklı bir yöntem kullanacak olsak bile.

CSS'de Taşma ve Veri Kaybı

CSS, içeriğinizi okunabilir kılmak için tasarlanmıştır. Web tasarımlarınızda taşma ile karşılaşabileceğiniz durumları ve CSS'nin bilinmeyen miktarlardaki içeriği yönetmek ve etrafında tasarlamak için daha iyi yollar yaratmak için nasıl geliştiğini keşfedelim. İlgili bir makaleyi okuyun →