- WebKit, CSS’te uzun süredir zorlayıcı olan masonry/waterfall düzeninin CSS Grid Level 3 kapsamında standartlaştırılması sürecinde tasarımcılardan ve geliştiricilerden geri bildirim istiyor
- Önerilen model,
display: grid üzerinde grid-template-rows: masonry ile satır oluşturmayı kapatıp içeriği tuğla gibi boş alanlara doldurma yaklaşımına dayanıyor
- Apple, bu özelliğin Grid içinde olması gerektiğini; böylece
fr, minmax(), max-content, spanning, açık yerleştirme, subgrid gibi mevcut Grid yetenekleriyle birleşebileceğini düşünüyor
- Ayrı bir
display: masonry yaklaşımı düzen tipini basitçe ayırabilir; ancak tartışmalara göre bunun eşit genişlikte sütunlar odağında sınırlanma olasılığı var ve Grid’in track boyutlandırma yeteneklerini kullanmak zorlaşabilir
- Ekim 2024 güncellemesinden sonra CSS Working Group, değişken genişlikli track’lerin, açık yerleştirmenin, spanning’in ve subgrid’in masonry’ye dahil edilmeye değer olduğu ve performanslı şekilde uygulanabileceği sonucuna vardı; ancak söz dizimi tartışmaları sürüyor
CSS Grid Level 3’ün mevcut konumu
- Ekim 2024 güncellemesinden sonra CSS Grid Layout Module Level 3 için resmi W3C Working Draft oluşturuldu ve masonry düzeninin davranış biçimi belgelendi
- CSS Working Group üyeleri, aşağıdaki özelliklerin masonry düzenine dahil edilmeye değer olduğu ve performanslı biçimde uygulanabileceği sonucuna vardı
- Değişken genişlikli track’ler
- Açık yerleştirme
- Spanning
subgrid
- Ancak söz dizimine dair tartışma hâlâ açık; WebKit bunu ayrı bir yazı olan Help us choose the syntax for Masonry in CSS üzerinden sürdürüyor
Masonry düzeni neden gerekli
- CSS Grid Level 1, 2017’de tanıtılarak float tabanlı düzenlerdeki boyutlandırma ve yerleştirme yükünü azalttı; Grid Level 2 ise Subgrid sundu
- Ancak CSS Grid çıktıktan sonra bile “masonry düzeni CSS ile nasıl yazılır?” sorusuna 7 yıl boyunca net bir yanıt yoktu
- Masonry düzeni, içeriğin tuğla ya da taş duvar gibi birbirine geçerek yerleştiği bir kalıptır; waterfall layout olarak da adlandırılır
- Farklı en-boy oranlarına sahip içerikleri yönetebilir; böylece tüm öğeleri aynı dikdörtgene dönüştürmek için kırpma veya küçültme ihtiyacı azalır
- İçerik sayfa geneline dağıldığı için kaydırma sırasında okuma sırası doğal biçimde korunur ve alta lazy-load ile içerik eklendiğinde mevcut içeriği oynatmak gerekmez
Önerinin geçmişi ve standartlaştırma tartışması
- CSS’te masonry düzeni oluşturma mekanizması ilk olarak Mozilla tarafından Ocak 2020’de CSS Grid genişletmesi olarak önerildi ve Firefox Nightly’de bir bayrağın arkasında deneysel özellik olarak uygulandı
- Apple, 2022’de Safari Technology Preview’da CSS Grid Level 3 önerisini uygulamaya başladı; şu anda varsayılan olarak açık
- CSS Working Group içinde temel yön konusunda görüş ayrılıkları vardı
- Bazıları masonry’nin CSS Grid’in parçası değil, ayrı bir
display tipi olması gerektiğini düşündü
- Bazıları bu düzenin web için gerekli olup olmadığından, ünlü web sitelerinin kullanıp kullanmayacağından emin değildi
- WebKit, tarayıcıların bu özelliği yayımlayabilmesi için önce CSS Working Group uzlaşısının gerekli olduğunu düşünüyor
Temel kullanım: satırları kapatıp yalnızca sütunları kullanan Grid
- Klasik masonry/waterfall düzeni,
main öğesine display: grid uygulayıp sütunları tanımladıktan sonra satır yönüne masonry değeri verilerek yazılır
main {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));
gap: 1rem;
grid-template-rows: masonry;
}
grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)), en az 14rem genişlikte esnek sütunları tekrarlı olarak oluşturur
gap: 1rem, sütunlar ve öğeler arasında 1rem boşluk oluşturur
grid-template-rows: masonry, tarayıcıya satır oluşturma ve içeriği masonry/waterfall kalıbıyla doldur talimatı verir
- Bu örnek, medya sorgusu veya container query olmadan dört satır CSS ile farklı ekran boyutlarına uyum sağlayan esnek bir düzen oluşturur
- Şu anki
masonry değer adının tarayıcılar yayımlanmadan önce değişme olasılığı var
Grid’in sütun tanımlama yeteneklerini koruma nedeni
- WebKit, masonry’nin CSS Grid’in parçası olması gerektiğine dayanak göstermek için dört demo hazırladı; bunlar webkit.org/demos/grid3 adresinden doğrudan denenebilir
- Demolar, Grid Level 3’ü destekleyen tarayıcılarda görülebilir
- CSS Grid, sütun tanımlarken çeşitli seçenekler sunar
px, em, rem, cqi, lh, ch, ic, cap, vw, svh gibi çeşitli birimlerde sabit boyutlar
max-content, min-content
fr birimi
minmax()
% boyutları
auto
- Örneğin ilk ve son sütun 14ch sabit genişlikte bırakılıp orta sütunlar en az 28ch olan esnek sütunlar yapılabilir
main {
display: grid;
grid-template-columns: 14ch repeat(auto-fill, minmax(28ch, 1fr)) 14ch;
grid-template-rows: masonry;
gap: 1rem;
}
fr birimi ve minmax() birleşimiyle sütunların farklı aşamalarda genişleyip daraldığı iki aşamalı esneklik oluşturulabilir
max-content ve min-content, sütun boyutlarını içerik boyutuna uydurarak içeriği sütuna uydurma yaklaşımından farklı yerleşimleri mümkün kılar
grid-template-columns: 1fr 1fr 2fr 3fr 5fr 8fr; gibi Fibonacci dizisi kullanılarak farklı genişliklerde sütunlar da oluşturulabilir
- Mega menu örneği,
grid-template-columns: repeat(auto-fill, minmax(max-content, 30ch)); kullanarak her sütunun bağlantı metnini satır kırmadan barındırabilecek kadar büyümesini sağlar
- WebKit, ayrı
display: masonry tartışmasının bugünkü multicolumn layout gibi yalnızca eşit boyutlu sütunlara izin verme yönünde olduğunu düşünüyor
Spanning, View Transitions, columnar grid
- CSS Grid, öğelerin birden fazla sütuna yayılmasını sağlayabildiği için masonry yerleşiminde de çeşitli görsel kompozisyonlar mümkün olur
- Örnekte her 5. görselin iki sütuna yayılması, diğer görsellerin ise tek sütun kaplaması sağlanabilir
- Daha geniş en-boy oranına sahip görsellere
wider sınıfı verilerek birden fazla sütun kaplamaları, köşelerin dikdörtgen yapılması veya boşluğun 0’a düşürülmesi gibi varyasyonlar da mümkündür
- Photos demosu, View Transitions ile birleşerek kullanıcı bir fotoğrafa tıkladığında veya dokunduğunda fotoğrafın birden fazla sütuna yayılıp büyümesini ve tarayıcının geçişi otomatik olarak canlandırmasını sağlar
- Bu demo Safari Technology Preview 192 veya üzerini gerektirir
- WebKit, Grid Level 3’ün özünü “masonry” adlı belirli kalıptan çok satırları kapatma mekanizması olarak görüyor
- Bu yöntem yalnızca sütunlardan oluşan bir columnar grid oluşturur; CSS Grid Level 1’in iyi oluşturduğu, satır ve sütunların birlikte hizalandığı modular grid ile karşıtlık gösterir
Modular grid ile columnar grid arasındaki fark
- Modular grid, içeriğin hem sütunlara hem satırlara hizalandığı Grid’dir; CSS Grid Level 1 bu tür yerleşim için uygundur
- Float tabanlı düzenlerde de float’ın doğru şekilde toparlanması için içerik yüksekliklerinin eşitlenmesi gerektiğinden, web’de modular grid kullanımını teşvik etmiştir
- Gerçek web sitelerinde görsellerin en-boy oranını eşitlemek, metin uzunluklarını dengelemek veya CMS politikaları ya da CSS kırpma ve üç noktayla kısaltma yoluyla içeriği aynı kutuya uydurmak sık görülür
- Columnar grid, içeriğin istediği boyutu korumasına izin verip düzenin içeriğe göre çalışmasını sağlayabilir
- WebKit, en yeni makaleyi dört sütuna yayma, daha yeni bazı makaleleri iki sütuna, eski içerikleri ise tek sütuna yerleştirme örneğiyle metin ağırlıklı içeriğin de daha canlı biçimde düzenlenebileceğini düşünüyor
Subgrid ve açık yerleştirmenin birleşimi
- CSS Grid Level 2’deki subgrid, çoğu tarayıcı tarafından destekleniyor
- Müze sayfası örneği, resim kartlarının meta verilerini sol hizalı tek bir sütunda listelemek yerine
subgrid ile yılı ve katalog numarasını her kartın sağına yerleştiriyor ve diğer kartlardaki aynı verilerle aynı hizaya getiriyor
- Masonry CSS Grid Level 3’e girerse mevcut geliştirici araçları da aynen kullanılabilir
- Safari Technology Preview’daki Grid Inspector ile
grid-template-rows: masonry denenebilir
- Ayrı bir display tipi olursa subgrid’in avantajları elde edilemez
- CSS Grid Level 1’in açık yerleştirmesi de birlikte kullanılabilir; örnekte
grid-column: -3 / -1 ile başlık son iki sütunda sayfanın sağ üstüne yerleştirilir
- WebKit, birkaç satır düzen koduyla Grid Level 1, 2 ve 3 özelliklerini birleştirerek medya sorgusu veya container query olmadan kullanılabilir boyuta göre sütun sayısı değişen düzenler oluşturulabileceğini düşünüyor
display: masonry ile ilgili tartışmalı noktalar
- WebKit ve Apple, Masonry’yi CSS Grid’i genişleterek yalnızca modular grid değil columnar grid de oluşturulmasını sağlayan bir özellik olarak görüyor
- Bu yönde sütun tanımlama, track spanning, açık yerleştirme,
subgrid gibi Grid özellikleri birlikte kullanılabilir
- Ayrı display tipini tercih edenler, düzen tiplerinin temiz biçimde ayrılabileceğini düşünüyor
display: block;
display: inline;
display: flexbox;
display: grid;
display: masonry;
- CSS Working Group ayrı Masonry display type söz dizimini henüz tartışmadı; ancak WebKit, Multicolumn layout’a benzer söz dizimini veya sınırlı Grid benzeri söz dizimini örnek veriyor
main {
display: masonry;
columns: 28ch;
}
main {
display: masonry;
masonry-columns: repeat(5, minmax(28ch, 1fr));
/* where only one repeating width is allowed */
}
- Ayrı düzen tipi, Grid ile Masonry’yi sürekli birlikte çalıştırmak için gereken işlerden kaçınabilir
- Düzen modeli basitleşir
- Tarayıcı uygulaması kolaylaşır
- Performans tuzakları olasılığı azalır
- Grid ve Masonry özellik setleri birbirinden farklılaşabilir
- Buna karşılık WebKit, iki Grid düzeni türü bağlı kalırsa CSS Working Group’un gelecekteki özellikleri hem modular grid hem columnar grid için tanımlayacağını düşünüyor
- Örneğin CSS Grid Level 4’te grid area ve grid line stillendirme, track arka plan renkleri, gap için rule line gibi özellikler eklenirse bunların baştan iki Grid türünde de çalışması daha iyi görülüyor
“Grid”e nasıl bakılmalı
- Ayrı
display: masonry yaklaşımını destekleyenler, CSS Grid’in özünde iki boyutlu hizalama olduğunu ve masonry’nin yalnızca tek yönde hizalandığı için Grid olmadığını düşünebiliyor
- WebKit, grafik tasarım tarihinde grid’in metin, görsel ve içeriği düzenli kalıplarla hizalayarak okunabilirliği ve kullanılabilirliği artıran bir araç olduğunu düşünüyor
-
- yüzyıl Avrupa ve Amerikan modernistleri, hem sütun hem satır hizalamasını “proper” graphic design grid olarak vurgulamadan önce de çeşitli grid’ler kullanılıyordu
- Mark Boulton, simetrik columnar grid’in resmi ve sıkıcı olduğunu düşünüp web tasarımında asimetrik compound grid kullanımını teşvik etmişti
- CSS Grid Level 1, asimetrik grid ve compound grid oluşturmayı kolaylaştırdı; ancak şu anda bu yalnızca söz konusu Grid modular grid olduğunda geçerli
- WebKit, modular grid ve columnar grid’in ikisinin de grid olduğunu ve CSS Grid’in de columnar grid oluşturma yeteneğine sahip olması gerektiğini düşünüyor
Geliştiricilerden ve tasarımcılardan istenen geri bildirim
- WebKit, geliştiricilerin ve tasarımcıların demoları bizzat oluşturmasını, bloglarda veya sosyal medyada görüş yazmasını ve CSS Working Group issue’larına yorum bırakmasını istiyor
- Geri bildirim soruları şunlar
- “masonry”/“waterfall” CSS Grid’in parçası olmalı mı
subgrid, spanning, açık yerleştirme ve çeşitli track sizing seçeneklerini içeren columnar grid yetenekleri gerekli mi
- Eşit boyutlu sütunlardan oluşan klasik masonry düzeni yeterli mi
- Bu özelliği gerçekten kullanır mısınız, neler oluşturabilirsiniz
- Oluşturduğunuz demo bağlantısı var mı
- Bu modelle yapılamayan bir şey var mı
- WebKit ekibi Masonry üzerinde bir buçuk yıldır çalışıyor ve özellik Şubat 2023’te Safari Technology Preview 163 ile varsayılan olarak etkinleştirildi
- Özelliği yakında yayımlamak istiyorlar; ancak ad dahil ayrıntıların ve temel soruların önce çözülmesi gerekiyor
Ad tartışması: masonry, waterfall, off
- WebKit,
masonry’nin yeni değer için en iyi ad olmama ihtimalinin yüksek olduğunu düşünüyor
- CSS adları genellikle
center, contain, clip, wrap, smooth gibi sonucu doğrudan açıklayan basit kelimelerden oluşur
masonry, arka plan açıklaması gerektiren bir metafor olduğundan İngilizce konuşmayan geliştiriciler için hatırlaması zor olabilir
- Bazı bölgelerde bu düzen daha çok
waterfall olarak adlandırıldığı için grid-template-rows: waterfall da olası bir aday olabilir
- WebKit, bu özelliği Pinterest türü düzenin kendisinden çok “Grid oluştur ama satır oluşturma” mekanizmasına yakın görüyor
grid-template-rows: none; anlam açısından uygun olabilir; ancak none zaten grid-template-* için varsayılan değer olarak “açık satır olmadan yalnızca örtük satırlar ver” anlamına geldiğinden kullanılamaz
- Alternatif olarak
grid-template-rows: off; öneriliyor
main {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr));
grid-template-rows: off;
}
- CSSWG ad konusunu bu issue’da tartışıyor
- Şu anda Safari Technology Preview ve demolarda Editor’s Draft’a uygun olarak
masonry değeri kullanılıyor; ancak gelecekte ad değişebilir
1 yorum
Hacker News yorumları
Arka plan, tarayıcı üreticilerinin CSSWG geliştirici ilişkileri sorumlularının Masonry düzenini CSS'e resmen dahil etmenin yolunu tartışıyor olması. Bu tartışma en azından Firefox'un ilk önerdiği 2020'den beri sürüyor
Bu haberdeki yenilik, WebKit tarafının bu tartışmayı kamuya açması ve tasarımcılar ile geliştiricilerden “sosyal medyada paylaşın, blog yazısı yazın” gibi eylemler istemesi
Dışarıdan biçimsel bir prosedür gibi görünebilir ama önemli bir emsal olabilir. Temel tartışma noktası, tüm düzen seçeneklerinin CSS Grid'in bir parçası olarak mı ele alınacağı, yoksa ihtiyaç oldukça yeni CSS Display özellikleri eklemeye devam mı edileceği
İlki zaten karmaşık olan CSS Grid spesifikasyonunu daha da karmaşıklaştırır; ikincisi ise CSS spesifikasyonunu yeni özellikler ve alt özelliklerle şişirebilir. Hangisi olursa olsun, göründüğü kadar kolay değil
Grid önce tüm öğeleri ızgaraya yerleştirir; örneğin
col:2,row:3gibi konumlandırdıktan sonra ızgara boyutunu belirler. Masonry ise ideal olarak önce iz boyutlarını belirleyip sonra öğeleri bu izlere yerleştirmek isterFirefox'un ilk uygulaması ve o zamanki spesifikasyon, temel olarak ilk satır ve bazı karmaşık kurallar dışında Masonry öğelerinin iz boyutu hesaplamasında dikkate alınmadığını söylüyordu; bu yüzden öğelerin izlerin dışına taşmasına yol açmak çok kolaydı
Mevcut spesifikasyon, tüm öğelerin mümkün olan tüm izlere yerleştirilip denenmesini gerektiriyor. En kötü ve oldukça yaygın durumda O(N_tracks * N_items) düzeyinde ikinci dereceden performans ortaya çıkıyor; ikinci dereceden performans kötüdür[1] ve diğer düzen algoritmalarında fiilen böyle bir şey yoktur
İç içe geçme de eklenince performans yarı üstel biçimde kötüleşir; CPU hızlı olsa bile bu iyi değildir. Bu tür durumların yaygın olmadığı söylenebilir ama CSS düzen modlarında insanlar her zaman sınırları zorladığından, varsayılan olarak hızlı olması gerekir
Grid'de bir öğe hangi ize yerleştirildiğine bağlı olarak kendi boyutunu farklı belirlediği için, mümkün olan tüm konumlarda denenmesi gerekir. Masonry'nin bu sorunu hafifletmek için iz boyutu hesaplamasında farklı bir algoritmaya ihtiyaç duyması gerekebilir; blog yazısı bu meseleyi yeterince ele almıyor. Grid boyut hesaplamasının öğe konumu bağımlılığı olmayan bir sürümü olabilirdi ama o gemi artık kalktı
[1] https://randomascii.wordpress.com/2019/12/08/on2-again-now-i...
Genel olarak yalnızca
grid-row-template: masonrykullanınca geri kalanı olduğu gibi iyi çalışıyor. Bu iyi bir nokta ve Grid düzenini bugünkünden daha zor kullanılır hale getirmediğini düşünüyorumDezavantaj esas olarak tarayıcı motoru yazarları için. Çünkü “CSS Grid'i tam destekleme” çıtası yükseliyor. Ayrıca Grid'in tüm özelliklerini desteklemesi gereken bir uygulamanın, spesifikasyon daha basitken olduğuna kıyasla bazı Grid düzenlerinde yavaşlayabileceği performans tuzaklarından da kaçınabileceği söyleniyor
Ayrı bir display modu olsaydı, Masonry düzeni için
grid-columnspesifikasyonunu tekrarlamak gerekirdi; bu da yazık olurduCSS Masonry ile doğrudan ilgili değil ama yakın zamanda benzer bir gerilime sahip bir arayüzün ikinci yinelemesinin prototipini çıkardım. Sorun, veri modelinde benzer ama farklı tipleri çoğaltmak mı, yoksa mevcut tipin içinde daha fazla nüans ekleyerek inceltmeyi desteklemek mi olduğuydu
Başta ikincisini güçlü biçimde tercih ediyordum ama seçenekleri gerçekten keşfedince, “şişkin” arayüzü tüketmenin ve bunun sonucunda uygulama kodu hakkında akıl yürütmenin çok daha basit olduğu ortaya çıktı
CSS Masonry konusunda güçlü bir tutumum yok ama insanların sezgisel olarak düşündüğü gerilim ile gerçek kullanım hissi arasında benzer bir sürpriz olabilir. CSS'te özellikle “şişme”, yani kullanım senaryosuna özgü anlamların artması, gerekçelendirmesi zor bir şey olacaktır; ancak kullanıcılar Grid gibi yoğun API'leri daha zor bulma eğiliminde de olabilir
Geçen yıldan beri Firefox ve Safari'de test ettim; uygulamadan şikâyetim yok. Özelliğin konumu ve adı hakkında homurdananlar da var ama muhtemelen kusursuz bir çözüm olmadığını kabul edip pratik biçimde uygulamak gerekiyor
Alternatif uygulamada JavaScript kullanmayı reddediyorum. Bu yüzden yedek yöntem, sıralamayı düzgün tutturamayan çokça çirkin CSS içeriyor ama üzerinde çalıştığım proje için büyük bir sorun değil. Şimdilik çoğu kişi JavaScript ile yedekleyecektir ama düzenin çözümü JavaScript ise zaten oyuna yenik başlıyorsunuz
Mega menü demosu <https://webkit.org/demos/grid3/megamenu/> gerçekten hoşuma gitmiyor; orada Masonry kullanmak tamamen uygunsuz görünüyor. Akış yönünü altüst edip beklentiyi ciddi biçimde bozuyor
Beklenen okuma sırası: https://temp.chrismorgan.info/2024-04-23-masonry-megamenu-2....
Gerçek demonun verdiği sıra: https://temp.chrismorgan.info/2024-04-23-masonry-megamenu-1..... Doğru okuma sırasını ve tab indeksini etkiliyor. Görsel kullanıcılar fiilen neredeyse her zaman “yanlış” sırada okuyacak
Sonuçta bunun yapısı olmayan, bağlantılarla dolu düzensiz bir torbadan ibaret olduğunu gösteriyor. Ama numara sırasını izleyince oldukça mantıklı bir sıra varmış gibi görünüyor; uygunsuz biçimde Masonry’ye dönüştürüldüğü için tamamen bozulmuş
Ekran görüntüsünde “öğe numaralarını göster” seçeneğini açtım. Normalde arka plansız sıradan sütunlar gibi görünüyor
Uygulama sütunları kullanmalı, fakat her bölüme
break-inside: avoideklemeliydi. Demoda bu atlanmışGazete demosu da benzer nedenlerle biraz şüpheli, ama çok daha küçük bir sorun
Görseller gibi daha bağımsız bloklar olan ve okuma sırasının o kadar derine işlemediği medya türlerinde Masonry yerleşimi daha iyi uyuyor. Yine de tab indeksi etrafında biraz muğlaklık var; ama artık açıkça yanlış değil
Masonry yerleşiminde görsel kullanıcının beklentisi, sütunlar arasında süreklilik olması değil, görsel satırları takip etmesidir. “Beklenmedik” diye sunulan sıra da bunu izliyor
Sorun, tab sırasının özgün içerik sırasını yok sayıp görsel olanı taklit etmeye çalışmasında gibi görünüyor; bu da neredeyse kesinlikle mevcut uygulama biçiminden kalma bir izdir
Bu özelliğin iyi yanı şu: Desteklemeyen tarayıcılarda, yani özel bayrak açılmamış mevcut tüm kararlı tarayıcılarda demoya baksanız bile, Grid yerleşiminin üzerine doğrudan kurulduğu için oldukça makul bir sabit satır biçiminde gösteriliyor: https://webkit.org/demos/grid3/
Her durumda düzgün bir Masonry yerleşimi olsaydı çok daha güzel görünürdü, ama olmasa da yeterince kullanılabilir. Hoşunuza gitmezse özellik algılama yapıp daha iyi bir yedek görünüm de sunabilirsiniz
Masonry/şelale tipi yerleşimin genel görünümünü ve hissini gerçekten seviyorum. Basılı gazete okuyarak büyüdüğüm ve hâlâ okuduğum için olsa gerek, sütun tabanlı yerleşim sayfayı bölmenin sezgisel bir yolu gibi geliyor
Ancak varsayılan Masonry hizalamasına bir alternatif olmasını isterdim. Bildiğim kadarıyla temel kural “sonraki öğeyi en yukarıya sığabileceği sütuna yerleştir” şeklinde; bu yüzden ikinci satırdan itibaren soldan sağa sıra ciddi biçimde karışıyor
Hayal ettiğim daha iyi yöntem, soldan sağa ya da tercih edilen yön sağdan sola ise o okuma akışını daha fazla koruyan bir yerleşim. Örneğin “sonraki öğeyi önceki öğenin sağındaki sütuna koy; zaten en sağdaysa en sola koy; yeni alt kenar sol sütunun alt sınırından çok aşağı inmiyorsa aynı sütuna ikinci bir öğe koyabilirsin” gibi bir yöntem
Katı soldan sağa düzenden daha esnek olduğu için hizalamayı da daha az bozar ve soldan sağa okuma yönünün anlamını bir ölçüde koruyabilir
Masonry’de tercih edilebilecek tüm formülleri kapsamak mümkün olmayabilir; ama sıranın az da olsa önemli olduğu içeriklerde, Pinterest olmasa bile dergi gibi örneklerde, bunun klasik Masonry kuralından daha makul bir varsayılan olduğunu düşünüyorum
Dergi tarzı bir yerleşimde önce sütunu yukarıdan aşağı, sonra soldan sağa okumaz mıyız? CSS’te bu zaten
columnsveya dikey yönlü Flexbox ile mümkünBu Masonry yerleşiminin bir başka sorunu da alt tarafının girintili çıkıntılı olması. Bir dergide muhtemelen eşitlenirdi; bu da sütunlar veya Flexbox ile yapılabilir
Web’de sonsuz kaydırılan içerik gibi gizli bir varsayım var; bu yüzden sayfanın alt tarafının görünümü önemli değilmiş gibi görülüyor. Öyleyse bu, mutlaka teşvik edilecek bir varsayım değil
{ /* Güncelleme sırasında öğeleri sola veya sağa en fazla 2 sütun taşı */ grid-template-max-horizontal-shift: 2 col; }CSS'nin yerini alacak geriye dönük uyumlu olmayan bir sistem yapabileceğimizi varsayarsak, nasıl yapmalıydık?
Tutarlı bir layout sistemi oluşturmanın yolları üzerine kitaplar ya da makaleler var mı?
Qt, Tk, SwiftUI gibi alternatifler nasıl? CSS dışında hiç kullanmadım. Gerçekten yaygın biçimde uygulanmış sistemler arasında daha iyisi varsa, onu daha iyi yapan şey ne?
Geliştiriciye daha iyi bir arayüz sunan bir sistem istiyorum ama nasıl yapılacağını bilmiyorum. Sıfırdan başlayabilseydik tasarım ilkeleri ne olmalıydı?
Özellikler daha açık ve ayrık olmalı. Negatif margin gibi saçmalıklar kaldırılmalı; tüm mesafeler çok aşamalı hale getirilmeli. Örneğin
padding = max(el.paddings[])gibiSınır kutusu açıkça oluşturulmalı, border'lar da düzgün öğeler haline getirilmeli. Box model'in kendisi kötü değil; CSS onun uygulamasını berbat yapmış. Dokunduğunuzda %99 kırılan kırılgan büyüler ve tuhaf sınırlamalarla dolu; bu sınırlamalar da daha fazla sorun ve “çözüm” doğuruyor
Ekran boyutu ve biçimindeki değişimleri çözmek için tasarlanmış bir yaklaşım. Apple SwiftUI'ye geçti ve bu yaklaşımdan uzaklaşmış olabilir
Flutter ve XAML de incelenmeye değer görünüyor
Daha iyi görünmesi için üst düzey yorum olarak tekrar gönderiyorum
Bir fotoğraf web sitem var ve layout için JavaScript kullanmıyor. Yaparken JavaScript Masonry kütüphanelerini değerlendirdim ama sonuç tatmin edici değildi
Gerçekte kullanılabilir tüm alanı dolduran düzgün bir Masonry layout, bazı görüntüleri kırpar. Kırpmadan en-boy oranını korumak istiyorsanız fotoğrafların etrafında boşluk bırakmanız gerekir. Bunu yapmamanın tek yolu sonsuz kaydırmadır; kurumsal bağımlılık makinelerinin istediği bu olabilir ama kendi web sitemde istediğim şey bu değil
Şöyle yaptım:
https://yakubin.com/photography/albumless/
https://yakubin.com/photography/album/kenya-2023/
Bu sonucu elde etmek için
display:inline-blockkullandım; fotoğrafları yeni satıra reflow edilmesi gereken metin gibi ele almış oldum. Sonuçtan çok memnunum ve Masonry kütüphanelerinin yaptığı yönteme tercih ediyorumSorun sıra. Sıra önemli değilse mevcut yalnızca CSS kullanan çözüm de iyi çalışıyor. Yalnız hatırladığım kadarıyla sütunların altında tuhaf bir şekil kalabiliyor
Bununla bağlantılı olarak Grid ilkelerini ele alan etkileşimli bir demo hazırladım:
https://cssprinciples.com/3/grid/
Eski
floatvar, modern Flexbox ve Grid düzenleri de var; CSS’e sürekli “layout” seçeneği eklemeye devam etmek doğru mu, merak ediyorum.Hâlâ kapsanmayan durumlar varsa, karmaşıklaşsa bile tüm layout senaryolarını kapsayan son bir kısıt tabanlı sistem bulundurmak daha iyi bir çözüm olabilir. Böylece CSS framework’leri ve utility kütüphaneleri bunun üzerinde yeni nesil Masonry Grid vb. oluşturabilir.
Yine de Houdini layout önerisi bu fikre en yakın olanı. Layout’u yalıtılmış bir JavaScript bağlamına devretme yaklaşımı: https://github.com/w3c/css-houdini-drafts/blob/main/css-layo...
Ama açıkçası Flexbox ve Grid, ayrıca containment gibi şeyler zaten birçok sorunu çözdüğü için Flexbox öncesi döneme kıyasla iyileştirme talebi çok daha azaldı.
floathack’lerini ya da yakında eskiyecek CSS Grid/Flexbox hack’lerini kullanmayı bırakmak. Firefox’un Masonry layout’u gerçekten Grid satırlarını katlayan yeni bir özellik ekleme yöntemiyle çalışıyor; yani fiilen tüm layout senaryolarını kapsayacak şekilde uygulanmış durumda.display: grid;grid-template-rows: masonry;Ancak WebKit ile sınırlı. Kişisel haber akışımın galeri modunda uygulamıştım, ama daha Ekim 2023’te kaldırdım.
Kısıt tabanlı sistem Grid ile JavaScript arasında bir yerde garip biçimde konumlanacak gibi; bu yüzden ne kadar yardımcı olur emin değilim.
Bunu zaten kullanıyorum. Firefox’ta seçeneklerden açıp yer imlerinde kullanıyorum. Mobilde zaten sadece alt alta yığıldığı için sorun olmuyor. Mobilde
about:configyok.Son görsel kapalı hâli.
https://imgur.com/a/o7OyZEW
Bu yüzden pencere boyutunu değiştirirseniz yer imi sırası değişecektir.
Daha fazla arka plan ve karşı taraftaki argüman, yani
display:grid+grid-template-rows: masonryyerinedisplay: masonry’nin daha iyi olduğu tartışması burada ayrıntılı olarak görülebilir: https://github.com/w3c/csswg-drafts/issues/9041