CSS Grid Layout'ta eşit yükseklikteki satırlar


113

Bunu Flexbox kullanarak elde etmenin imkansız olduğunu anlıyorum, çünkü her satır yalnızca öğelerine uyması için gereken minimum yükseklik olabilir, ancak bu daha yeni CSS Izgarası kullanılarak elde edilebilir mi?

Açık olmak gerekirse, sadece her satır için değil, tüm satırlarda bir ızgaradaki tüm öğeler için eşit yükseklik istiyorum. Temel olarak, en yüksek "hücre" yalnızca sırasındaki hücrelerin değil, tüm hücrelerin yüksekliğini belirlemelidir.

Yanıtlar:


210

Kısa cevap

Hedef, ızgaradaki en yüksek hücrenin tüm satırların yüksekliğini ayarladığı eşit yükseklikteki satırlara sahip bir ızgara oluşturmaksa, işte hızlı ve basit bir çözüm:

  • Konteyneri şuna ayarlayın: grid-auto-rows: 1fr

Nasıl çalışır

Izgara Düzeni, bir ızgara kabında esnek uzunluklar oluşturmak için bir birim sağlar. Bu frbirimdir. Konteynırdaki boş alanı dağıtmak için tasarlanmıştır ve flex-growflexbox'taki özelliğe biraz benzer .

Bir ızgara kabındaki tüm satırları olarak ayarlarsanız 1fr, şöyle diyelim:

grid-auto-rows: 1fr;

... o zaman tüm satırlar eşit yükseklikte olacaktır.

Yarasa dışında pek bir anlam ifade etmiyor çünkü frboş alanı dağıtması gerekiyor. Ve birkaç sıra farklı yüksekliklere sahip içeriğe sahipse, alan dağıtıldığında, bazı sıralar orantılı olarak daha küçük ve daha uzun olacaktır.

Şebekenin derinliklerine gömülü olan bu küçük külçe dışında:

7.2.3. Esnek Uzunluklar: fr birim

...

Kullanılabilir alan sonsuz olduğunda (bu, ızgara kabının genişliği veya yüksekliği belirsiz olduğunda gerçekleşir), esnek boyutlu ( fr) ızgara izleri, ilgili oranlarını korurken içeriklerine göre boyutlandırılır.

Her esnek boyutlu ızgara yolunun kullanılan boyutu, her esnek boyutlu ızgara yolunun max-contentboyutu belirlenerek ve bu boyut, "varsayımsal bir 1fr boyut" belirlemek için ilgili esnek faktörüne bölünerek hesaplanır .

Bunların maksimumu, çözümlenmiş 1fruzunluk (esnek kesir) olarak kullanılır ve bu daha sonra nihai boyutunu belirlemek için her bir ızgara yolunun esnek faktörü ile çarpılır.

Bu yüzden, eğer bunu doğru okursam, dinamik olarak boyutlandırılmış bir ızgara ile uğraşırken (örneğin, yükseklik belirsizdir), ızgara izleri (bu durumda satırlar) içeriklerine göre boyutlandırılır.

Her satırın yüksekliği en uzun ( max-content) ızgara öğesi tarafından belirlenir .

Bu satırların maksimum yüksekliği, uzunluğu olur 1fr.

Bu nasıl 1frbir ızgara kapta eşit yükseklik satırları oluşturur.


Flexbox neden bir seçenek değil

Soruda belirtildiği gibi, flexbox ile eşit yükseklikteki satırlar mümkün değildir.

Flex öğeleri aynı satırda eşit yükseklikte olabilir, ancak birden çok satırda olamaz.

Bu davranış flexbox spesifikasyonunda tanımlanmıştır:

6. Esnek Hatlar

Çok satırlı esnek bir kapta, her satırın çapraz boyutu, satırdaki esnek öğeleri içermek için gereken minimum boyuttur.

Diğer bir deyişle, satır tabanlı esnek bir konteynerde birden fazla satır olduğunda, her satırın yüksekliği ("çapraz boyut"), satırdaki esnek öğeleri içermek için gereken minimum yüksekliktir.


Bahsedilen paragrafta, bu kısım tam olarak ne anlama geliyor: "ve" varsayımsal 1fr boyutunu belirlemek için bu boyutu ilgili esnek faktörüne bölmek ". Örneğin, bir ızgara kabının ilk satırındaki en yüksek boyut 100 grid-auto-rowpiksel ise ve bu satır için 2 ise, bu ilk satır için 1fr boyutunun 50 piksele eşit olduğu anlamına mı gelir?
Od Chan

20

Kısa cevap, grid-auto-rows: 1fr;ızgara konteynırını ayarlamanın sorulan şeyi çözmesidir.

https://codepen.io/Hlsg/pen/EXKJba


Codepen için teşekkürler, Michael'ın cevabındaki açıklama harika ama codepen bana tam olarak ne yapmam gerektiğini gösteriyor.
Sam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.