CSS düzeni ve kaynak sırası bağlantısını çözme

Öğelerin, dokümanın kaynağıyla bağlantısı olmayan bir sıraya göre düzenlenmesi sorunuyla ilgili olarak önerilen bir çözüm için geri bildiriminiz isteniyor.

CSS Çalışma Grubu, bir düzen yönteminin öğeleri kaynaktan ve dolayısıyla da dokümanın okuma ve odaklanma sırasından ayrı bir sırada düzenleyebileceği duruma bir çözüm üzerinde çalışıyor. Bu makalede, sorun ve önerilen çözüm açıklanmaktadır. Geri bildiriminizi öğrenmekten memnuniyet duyarız.

Sorun

HTML dokümanlarının okuma sırası, kaynak sırasını takip eder. Yani ekran okuyucu, dokümanı kaynakta verildiği şekilde okuyacaktır. Klavyeyi kullanarak dokümanı çevreleyen bir kişi de bu kaynak sırasını takip edecektir. Bu genellikle mantıklıdır. Ayrıca, içerikte, ekran okuyucularda ve sınırlı CSS'ye sahip tüm cihazlarda okuma moduyla ilgili sunumlar için doküman için makul bir kaynak sırası büyük önem taşır. Ancak CSS ve özellikle flexbox ve ızgara, düzenin temel kaynaktan farklı bir görsel okuma sırası tanımladığı düzenler oluşturabilir.

Örneğin, esnek öğelerde order özelliğinin kullanılması, düzen sırasını değiştirir ancak kaynaktaki sırayı değiştirmez.

"order" özelliği kullanılarak sekme sırasının düzen düzeninden nasıl ayrıldığını görmek için örneği tıklayın ve ilgili sekmeyi tıklayın.

Izgara düzeni kullanıldığında, seçilen düzen yönteminin sekme sırasını karıştırması mümkündür. Örneğin, grid-auto-flow: dense kullanıldığında öğeler için rastgele bir düzen düzeni oluşturulur.

Örneği tıklayın ve sekme sırasının düzen sırasından nasıl ayrıldığını görmek için bu sefer öğeleri sıralı şekilde düzenleyen ızgaraya göre sıralayın.

Geliştiriciler, öğeleri kaynakta belirtilenden farklı bir sırada olacak şekilde tabloya yerleştirerek bu soruna yol açabilir.

Izgara yerleşim özellikleri kullanılarak sekme sırasının düzen düzeninden nasıl ayrıldığını görmek için örneği tıklayın ve ilgili sekmeyi tıklayın.

Önerilen çözüm

CSS Çalışma Grubu bu sorun için bir çözüm öneriyor ve geliştiricilerden ve erişilebilirlik topluluğunun bu yaklaşımla ilgili geri bildirimlerini almaktan memnuniyet duyuyor.

reading-order: auto ile rastgele düzenler takip ediliyor

Izgara düzeninde yoğun paketleme kullanma gibi rastgele düzen sırası oluşturan durumlarda, muhtemelen tarayıcının kaynak sırası yerine düzeni izlemesini istersiniz. Bunun gerçekleşmesi için esnek veya ızgara öğelerinin, auto değerine sahip bir reading-order özelliğinin olması gerekir.

Aşağıdaki CSS, okuma sırasının grid-auto-flow: dense nedeniyle yoğun şekilde paketlenmiş öğelerin yerleşimini takip etmesine neden olur.

.cards {
  display: grid;
  grid-auto-flow: dense;
}

.cards li {
  grid-column: auto / span 2;
  reading-order: auto;
}

reading-order-items ile rastgele olmayan düzenler takip ediliyor

Bazı ızgara ve esnek düzenlerde düzenin anlaşılması kolay olur. Örneğin, öğeleri yeniden sıralamak için order özelliğini kullanan esnek bir düzende, order özelliği tarafından dikte edilen bariz bir düzen sırası vardır. Diğer düzenlerde ideal düzen sırasının ne olduğu o kadar net değildir ve birden fazla olası seçenek olabilir. Bu nedenle, rastgele olmayan düzenleri izlerken, düzen siparişi amacınızı açıklayan anahtar kelime değerleriyle birlikte grid-order-items özelliğini kapsayıcıya eklemeniz gerekir.

Aşağıdaki örnekte, row-reverse kullanan esnek düzen gösterilmektedir. Esnek öğelerde reading-order: auto ve esnek kapsayıcı reading-order-items: flex flow bulunur. Bu kapsayıcı, okuma sırasının görsel bir sıra izlemek yerine (flex visual ile belirtebiliriz) flex-flow yönünü de izlemesini istediğimizi belirtir.

.cards {
  display: flex;
  flex-flow: row-reverse;
  reading-order-items: flex flow;
}

.cards li {
  reading-order: auto;
}

Sıradaki örnekte, grid-template-areas kullanılarak bir ızgara düzeni oluşturulur ve öğeler kaynak sıradan farklı bir düzene yerleştirilir. reading-order-items özelliği, bir sonrakine geçmeden önce her satırdan geçerek düzen sırasını izlememiz gerektiğini belirtmek için kullanılır. (grid column, ters yönü belirtir).

.wrapper {
  display: grid;
  grid-template-columns: repeat(6, minmax(0, 1fr));
  grid-template-areas:
    "a a b b b b"
    "c c d d e e"
    "f f g g h h";
  reading-order-items: grid rows;
}

.a {
  grid-area: a;
  reading-order: auto;
}

Bu, kaynak sırasının önemli olmadığı anlamına mı geliyor?

Hayır, kaynak sırası önemli olmaya devam eder. Bu işlev yalnızca okuma sırasının kaynaktan farklı olabileceği belirli durumlarda kullanılmalıdır. Bu soruna yol açabilecek düzen yöntemleri (ör. yoğun ızgara paketleme) veya belirli bir ayrılma noktasında farklı bir düzen sırası anlamlı olduğunda bu durumlara örnek olarak verilebilir.

Bu özellikleri kullanırken sayfanın CSS olmadan oluşturulması mantıklı olacak bir sipariş kullanarak kaynak doküman oluşturun. Bu özellikleri yalnızca bunları gerektiren yerlere ve ayrılma noktalarına ekleyin.

Yazma araçları bu özellikleri uygulamalı mıdır?

Kullanıcıların öğeleri sürükleyip bırakarak ızgara düzeni oluşturmasına olanak tanıyan yazma araçları, kullanıcıları yine de mantıklı bir kaynak doküman oluşturmaya teşvik etmelidir. Bu nedenle, çoğu durumda bu özellikleri bağlantı kesintisi sorununu çözmenin geç bir yolu olarak kullanmak yerine, kaynağı düzen sırasına göre yeniden sıralamak daha uygun olur.

Lütfen bu teklifle ilgili geri bildiriminizi paylaşın

Bu konuda geri bildirim toplamaya çok önem veriyoruz. Özellikle, bunun çözülmeyeceğini düşündüğünüz bir kullanım alanınız varsa veya yaklaşımla ilgili erişilebilirlikle ilgili bir endişeniz varsa lütfen CSS Çalışma Grubu'na bildirin.

Devam eden bir ileti dizisi mevcuttur. Bu iletide, birçok kullanım alanı ve yaklaşımla ilgili görüşler yer alır. Bu ileti dizisi, yorum eklemek ve bu teklifle ilgili olası sorunları vurgulamak için mükemmel bir yerdir. Geçerli teklifin, ileti dizisini başlatan ilk teklifimden çok farklı olduğunu unutmayın. İlgilenen kişiler, bugünkü konumumuza giden tüm konuşmalardan keyif alabilir. Bu, önerilerin tarayıcılarda uygulanabilecek bir şey haline gelmesi için CSS Çalışma Grubu'nda nasıl çalıştığına iyi bir örnektir.

Patrick Tomasso'ya ait küçük resim. Geri bildirim ve yorumlar için Chris Harrelson, Tab Atkins ve Ian Kilpatrick'e teşekkür ederiz.