- Konu sahibi
- #1
Eşit genişlikte sütunlar oluşturmanın en pratik yolu CSS Grid kullanmaktır. Sütun sayısını
Önce sütunları taşıyacak kapsayıcıya
Bu örnekte
Sütun sayısını değiştirmek için yalnızca
Masaüstünde üç sütun kullanıp dar ekranlarda sütunları alt alta göstermek için medya sorgusu ekleyebilirsiniz. Böylece içerik ekran genişliğine sığmadığında yatay taşma oluşmaz.
Bu ayarda geniş ekranlarda üç, orta genişlikteki ekranlarda iki, 480 pikselden dar ekranlarda ise tek sütun görünür. Medya sorgusunun çalışması için HTML belgesinde mobil görünüm ayarının bulunması da gerekir:
Bir sütunun içeriği diğerlerinden çok daha uzun olsa bile Grid sütunların genişliğini eşit tutar; ancak satır yüksekliği içerik miktarına göre değişebilir. Eşit genişlik, sütunların aynı yükseklikte olacağı anlamına gelmez.
Her iki yöntemle de eşit genişlikte sütunlar oluşturulabilir, fakat kullanım amaçları farklıdır.
Flexbox ile üç eşit sütun oluşturmak isterseniz kapsayıcıya
Burada her
Sütunların genişlikleri eşit görünmüyorsa önce
Grid kullanırken
Uzun bir kelime, URL veya kod satırı sütunu taşırıyorsa şu kural yardımcı olabilir:
Bu kural sütunun küçülebilmesini ve bölünemeyen uzun metinlerin gerektiğinde satıra bölünmesini sağlar. Buna rağmen görsel genişlikleri farklı görünüyorsa geliştirici araçlarında kapsayıcının gerçek genişliğini, sütunlar arasındaki
grid-template-columns: repeat(3, 1fr); ile belirlediğinizde kullanılabilir alan üç eşit parçaya bölünür; gap ise sütunlar arasındaki boşluğu ayırır. Flexbox da aynı işi yapabilir, ancak düzenin iki boyutlu olduğu durumlarda Grid daha açık ve kontrol edilebilir bir çözümdür.CSS Grid ile eşit sütun oluşturma
Önce sütunları taşıyacak kapsayıcıya
display: grid verin. Ardından repeat() ile kaç sütun istediğinizi, 1fr ile de her sütunun eşit pay alacağını belirtin.
HTML:
<div class="sutunlar">
<div class="kart">Birinci sütun</div>
<div class="kart">İkinci sütun</div>
<div class="kart">Üçüncü sütun</div>
</div>
<style>
.sutunlar {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
.kart {
padding: 20px;
background: #f1f1f1;
border: 1px solid #d5d5d5;
}
</style>
Bu örnekte
repeat(3, 1fr) üç eşit sütun oluşturur. Kapsayıcının kullanılabilir genişliği 900 piksel ve sütunlar arasındaki toplam boşluk 40 piksel ise her sütun yaklaşık 286,67 piksel genişliğinde olur. Yani boşluklar çıkarıldıktan sonra kalan alan üç eşit parçaya bölünür.Sütun sayısını değiştirmek için yalnızca
3 değerini değiştirmeniz yeterlidir. Örneğin dört eşit sütun için repeat(4, 1fr), iki sütun için repeat(2, 1fr) kullanılır.Responsive tasarımda sütun sayısını değiştirme
Masaüstünde üç sütun kullanıp dar ekranlarda sütunları alt alta göstermek için medya sorgusu ekleyebilirsiniz. Böylece içerik ekran genişliğine sığmadığında yatay taşma oluşmaz.
CSS:
.sutunlar {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
@media (max-width: 768px) {
.sutunlar {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 480px) {
.sutunlar {
grid-template-columns: 1fr;
}
}
Bu ayarda geniş ekranlarda üç, orta genişlikteki ekranlarda iki, 480 pikselden dar ekranlarda ise tek sütun görünür. Medya sorgusunun çalışması için HTML belgesinde mobil görünüm ayarının bulunması da gerekir:
HTML:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Bir sütunun içeriği diğerlerinden çok daha uzun olsa bile Grid sütunların genişliğini eşit tutar; ancak satır yüksekliği içerik miktarına göre değişebilir. Eşit genişlik, sütunların aynı yükseklikte olacağı anlamına gelmez.
Grid ve Flexbox arasında seçim
Her iki yöntemle de eşit genişlikte sütunlar oluşturulabilir, fakat kullanım amaçları farklıdır.
| Yöntem | Eşit genişlik için kullanım | Daha uygun olduğu durum |
|---|---|---|
| CSS Grid | grid-template-columns ile doğrudan sütun tanımlanır | Satır ve sütunlardan oluşan kart, galeri veya panel düzenleri |
| Flexbox | Çocuklara flex: 1 verilir | Tek satır veya tek sütun boyunca hizalama gereken düzenler |
| Sabit genişlik | px, rem veya benzeri bir değer kullanılır | Sütunların her ekranda belirli genişlikte kalması gereken özel tasarımlar |
display: flex, çocuk öğelere de flex: 1 verebilirsiniz:
CSS:
.sutunlar {
display: flex;
gap: 20px;
}
.kart {
flex: 1;
}
@media (max-width: 600px) {
.sutunlar {
flex-direction: column;
}
}
Burada her
.kart aynı büyüme payına sahip olduğu için kullanılabilir alanı eşit paylaşır. Ancak içerik uzunluğu, min-width değeri veya uzun ve bölünemeyen bir metin genişliği düzeni bozabilir. Böyle bir durumda min-width: 0 eklemek, esnek öğenin kapsayıcı içinde küçülebilmesini sağlar.Eşit görünmeyen sütunlarda ne kontrol edilmeli?
Sütunların genişlikleri eşit görünmüyorsa önce
grid-template-columns veya flex: 1 kuralının gerçekten doğru kapsayıcıya uygulandığını kontrol edin. Çocuk öğelerden birinde ayrıca verilmiş width, min-width ya da flex-basis değeri varsa bu değer eşit dağılımı etkileyebilir.Grid kullanırken
1fr 2fr 1fr gibi farklı oranlar yazmadığınızdan emin olun. Bu tanımda ortadaki sütun diğerlerinin iki katı genişliğinde olur. Eşit dağılım için her sütun parçası 1fr olmalıdır.Uzun bir kelime, URL veya kod satırı sütunu taşırıyorsa şu kural yardımcı olabilir:
CSS:
.kart {
min-width: 0;
overflow-wrap: anywhere;
}
Bu kural sütunun küçülebilmesini ve bölünemeyen uzun metinlerin gerektiğinde satıra bölünmesini sağlar. Buna rağmen görsel genişlikleri farklı görünüyorsa geliştirici araçlarında kapsayıcının gerçek genişliğini, sütunlar arasındaki
gap değerini ve çocuk öğelerin ek genişlik kurallarını inceleyin. Eşit genişlik yalnızca aynı genişlikteki Grid izleri veya eşit esneme payları için geçerlidir; içeriklerin aynı yükseklikte olmasını garanti etmez.