Ders 02 / 22
Yakınlık ve Gruplama
İlişkinin boşlukla ilan edilmesi; gruplamanın mutlak boşlukla değil boşluk oranıyla kurulması ve iç içe gruplama düzeylerinin sayısal denetimi.
İçindekiler
Önceki ders ögeleri birbirinden ayırmayı ele aldı: hangi öge önce okunur, bu sıra hangi kanallarda ifade edilir. Arayüzün ikinci işi bunun tersidir. Katalog kaydında başlık, yazar adı ve raf kodu ayrı ayrı çizilir ama aynı kitaba aittir. Bir sonraki kaydın başlığı yalnızca birkaç piksel aşağıdadır ve başka bir kitaba aittir. Bu iki durumun farkı ekranda neyle anlaşılır?
Yanıt çizgi ya da çerçeve değil, boşluktur. Bu ders boşluğun ilişkiyi nasıl kurduğunu, kurulan ilişkinin neden mutlak piksel değerine değil boşluklar arası orana bağlı olduğunu ve bu oranın nasıl denetleneceğini gösterir.
Yakınlık İlişkiyi İlan Eder
Yakınlık (proximity), birbirine yakın duran ögelerin tek bir birim olarak algılanması eğilimidir. Bu eğilim, algı psikolojisinde Gestalt ilkeleri (Gestalt principles) adıyla toplanan bir grubun üyesidir; aynı grupta benzer görünen ögelerin birlikte algılanması (benzerlik, similarity) ve ortak bir zemin ya da çerçeve paylaşan ögelerin birlikte algılanması (ortak bölge, common region) da bulunur.
Bu ilkelerin arayüz tasarımı için önemi kuramsal değil pratiktir: ilkeler bir seçenek sunmaz, bir kısıt getirir. Ögeler bir düzleme yerleştirildiği anda gruplanmış olurlar. Tasarımcının kararı “gruplayayım mı” değil, “algılanan gruplama amaçlanan gruplamayla örtüşüyor mu” sorusudur. Boşluk verilmediğinde gruplama ortadan kalkmaz; rastgele bir gruplama yerleşir.
Yakınlık ilkeleri arasında bir güç sırası vardır. İki öge birbirine yakın ama farklı renkteyse, yakınlık benzerliği yener: ögeler tek grup olarak okunur. Katalog kaydında başlık koyu ve kalın, yazar adı soluk ve normal ağırlıktaysa, aralarında 4 piksel varken bu ikisi hâlâ tek kayıt olarak algılanır. Bu, hiyerarşi ile gruplamanın çakışmadığı anlamına gelir: bir grubun içindeki ögeler birbirinden farklı ağırlıkta olabilir, grup kimliğini taşıyan şey boşluktur.
Gruplama Mutlak Boşlukla Değil Oranla Kurulur
Yakınlık göreli bir ölçüdür. “24 piksel boşluk kayıtları ayırır” cümlesi kendi başına doğru ya da yanlış değildir; kaydın içindeki boşluğun kaç piksel olduğu bilinmeden değerlendirilemez. İç boşluk 4 pikselse 24 piksel açık bir sınırdır; iç boşluk 20 pikselse aynı 24 piksel hiçbir şey ayırmaz.
Bunu denetlenebilir kılmak için bir ölçüt gerekir. Bu kurs şu ölçütü benimser: bir boşluk, aynı yığındaki en küçük boşluğun en az iki katıysa grup sınırı sayılır. Aşağıdaki program katalog sonuç listesinin iki farklı aralık kararını bu ölçütle sınar.
// 02-gruplama.mjs — dikey yiginda bosluk oranina gore gruplama denetimi // Katalog sonuc listesinin iki satiri: her kayit baslik + yazar + ustveri tasir. // Her oge (ad, yukseklik, ustBosluk) verilir; ustBosluk bir onceki ogeden uzakligidir. const tasarimA = [ { ad: "kayit-1 baslik", yukseklik: 24, ustBosluk: 0, grup: 1 }, { ad: "kayit-1 yazar", yukseklik: 20, ustBosluk: 4, grup: 1 }, { ad: "kayit-1 ustveri", yukseklik: 18, ustBosluk: 4, grup: 1 }, { ad: "kayit-2 baslik", yukseklik: 24, ustBosluk: 24, grup: 2 }, { ad: "kayit-2 yazar", yukseklik: 20, ustBosluk: 4, grup: 2 }, { ad: "kayit-2 ustveri", yukseklik: 18, ustBosluk: 4, grup: 2 }, ]; const tasarimB = [ { ad: "kayit-1 baslik", yukseklik: 24, ustBosluk: 0, grup: 1 }, { ad: "kayit-1 yazar", yukseklik: 20, ustBosluk: 12, grup: 1 }, { ad: "kayit-1 ustveri", yukseklik: 18, ustBosluk: 12, grup: 1 }, { ad: "kayit-2 baslik", yukseklik: 24, ustBosluk: 16, grup: 2 }, { ad: "kayit-2 yazar", yukseklik: 20, ustBosluk: 12, grup: 2 }, { ad: "kayit-2 ustveri", yukseklik: 18, ustBosluk: 12, grup: 2 }, ]; // Kurs olcutu: bir bosluk, yigindaki en kucuk boslugun AYRIM_ORANI katiysa // grup siniri sayilir. Oran 2'nin altindaysa sinir belirsizdir. const AYRIM_ORANI = 2; function gruplandir(oge_listesi) { const bosluklar = oge_listesi.slice(1).map((o) => o.ustBosluk); const enKucuk = Math.min(...bosluklar); const gruplar = [[oge_listesi[0].ad]]; const oranlar = []; for (let i = 1; i < oge_listesi.length; i++) { const oran = oge_listesi[i].ustBosluk / enKucuk; oranlar.push({ ad: oge_listesi[i].ad, bosluk: oge_listesi[i].ustBosluk, oran }); if (oran >= AYRIM_ORANI) gruplar.push([oge_listesi[i].ad]); else gruplar[gruplar.length - 1].push(oge_listesi[i].ad); } return { enKucuk, oranlar, gruplar }; } function rapor(baslik, oge_listesi) { const { enKucuk, oranlar, gruplar } = gruplandir(oge_listesi); const amac = new Set(oge_listesi.map((o) => o.grup)).size; console.log(`${baslik} (en kucuk bosluk: ${enKucuk}px, esik orani: ${AYRIM_ORANI})`); for (const o of oranlar) { const sinir = o.oran >= AYRIM_ORANI ? "SINIR" : "grup ici"; console.log( ` ${o.ad.padEnd(18)} ustunde ${String(o.bosluk).padStart(2)}px oran ${o.oran .toFixed(2) .padStart(5)} ${sinir}` ); } console.log(` amaclanan grup sayisi: ${amac} algilanan grup sayisi: ${gruplar.length}`); gruplar.forEach((g, i) => console.log(` grup ${i + 1}: ${g.join(", ")}`)); console.log(""); } rapor("tasarim A grup ici 4px / ayirici 24px", tasarimA); rapor("tasarim B grup ici 12px / ayirici 16px", tasarimB);
tasarim A grup ici 4px / ayirici 24px (en kucuk bosluk: 4px, esik orani: 2)
kayit-1 yazar ustunde 4px oran 1.00 grup ici
kayit-1 ustveri ustunde 4px oran 1.00 grup ici
kayit-2 baslik ustunde 24px oran 6.00 SINIR
kayit-2 yazar ustunde 4px oran 1.00 grup ici
kayit-2 ustveri ustunde 4px oran 1.00 grup ici
amaclanan grup sayisi: 2 algilanan grup sayisi: 2
grup 1: kayit-1 baslik, kayit-1 yazar, kayit-1 ustveri
grup 2: kayit-2 baslik, kayit-2 yazar, kayit-2 ustveri
tasarim B grup ici 12px / ayirici 16px (en kucuk bosluk: 12px, esik orani: 2)
kayit-1 yazar ustunde 12px oran 1.00 grup ici
kayit-1 ustveri ustunde 12px oran 1.00 grup ici
kayit-2 baslik ustunde 16px oran 1.33 grup ici
kayit-2 yazar ustunde 12px oran 1.00 grup ici
kayit-2 ustveri ustunde 12px oran 1.00 grup ici
amaclanan grup sayisi: 2 algilanan grup sayisi: 1
grup 1: kayit-1 baslik, kayit-1 yazar, kayit-1 ustveri, kayit-2 baslik, kayit-2 yazar, kayit-2 ustveri
İki tasarımın da amacı aynı: iki kayıt, iki grup. Tasarım A bunu üretir, tasarım B üretmez. Dikkat çekici olan, tasarım B’nin daha ferah olmasıdır. Toplam boşluğu daha fazladır, kayıtlar arasında 16 piksel bırakır, buna rağmen kayıt sınırını yok eder. Boşluk eklemek gruplamayı iyileştirmez; boşluğu farklılaştırmak iyileştirir.
Bu, aralık kararlarının neden tek tek verilemeyeceğini de açıklar. “Kayıtlar arasına 16 piksel koyalım” kararı yalnız başına değerlendirilemez, çünkü anlamı komşu kararlara bağlıdır. Aralık kararları bir küme olarak alınır.
İç İçe Gruplama Düzeyleri
Katalog ekranında tek bir gruplama düzeyi yoktur. Başlık ile yazar adı bir düzeyde, kayıt blokları bir üst düzeyde, kayıtlar bir üstte, ekranın bölümleri en üstte gruplanır. Her düzeyin bir alt düzeyden ayrılabilmesi gerekir; aksi hâlde hiyerarşinin bir basamağı görünmez olur.
// 02-ic-ice.mjs — ic ice gecmis gruplama duzeylerinin bosluk oranini denetler // Katalog ekranindaki dort gruplama duzeyi, en icten en disa. const duzeyler = [ { ad: "satir ici (baslik-yazar)", bosluk: 4 }, { ad: "kayit ici bloklar", bosluk: 8 }, { ad: "kayitlar arasi", bosluk: 24 }, { ad: "bolumler arasi", bosluk: 48 }, ]; const AYRIM_ORANI = 2; console.log("duzey bosluk bir alt duzeye orani durum"); for (let i = 0; i < duzeyler.length; i++) { const d = duzeyler[i]; if (i === 0) { console.log(`${d.ad.padEnd(26)} ${String(d.bosluk).padStart(4)}px ${"-".padStart(20)} taban`); continue; } const oran = d.bosluk / duzeyler[i - 1].bosluk; const durum = oran >= AYRIM_ORANI ? "ayirir" : "BELIRSIZ"; console.log( `${d.ad.padEnd(26)} ${String(d.bosluk).padStart(4)}px ${oran.toFixed(2).padStart(20)} ${durum}` ); }
duzey bosluk bir alt duzeye orani durum satir ici (baslik-yazar) 4px - taban kayit ici bloklar 8px 2.00 ayirir kayitlar arasi 24px 3.00 ayirir bolumler arasi 48px 2.00 ayirir
Dört düzey, taban boşluk 4 piksel, en dış boşluk 48 piksel. Aradaki oranların hepsi ikinin üstünde olduğu için her düzey bir alttakinden ayrılır. Buradaki asıl bulgu sayıların kendisi değil, sayıların çarpımsal ilerlemesidir: 4, 8, 24, 48. Toplamalı bir dizi (4, 8, 12, 16) aynı işi göremez, çünkü üst düzeylere doğru oranlar hızla bire yaklaşır.
Bu gözlem, gruplama düzeyi sayısına bir sınır da koyar. Taban boşluk 4 piksel ve her düzey en az iki katı olacaksa, altı düzey en dışta piksel gerektirir. Bir ekranda dikey olarak 128 pikselin ne kadar pahalı olduğu düşünülürse, uygulanabilir gruplama düzeyi sayısının dört civarında kaldığı görülür. Hiyerarşi düzeylerinde olduğu gibi burada da çözüm düzey eklemek değil, gerekmeyen düzeyi kaldırmaktır.
Boşluk mu, Çerçeve mi
Ortak bölge ilkesi gruplamanın ikinci yoludur: ögeleri bir çerçeve içine almak ya da ortak bir zemin rengi vermek de onları tek birim yapar. Bu yol yakınlıktan güçlüdür — çerçeve, yakınlığı yener: kutu içindeki iki uzak öge, kutu dışındaki yakın ögeden daha ilişkili algılanır.
Güçlü olması onu varsayılan seçenek yapmaz. Çerçevenin bedeli görsel gürültüdür. Yirmi kayıtlık bir sonuç listesinde her kayıt çerçevelenirse ekrana 20 dikdörtgen, yani 80 çizgi eklenir. Bu çizgilerin hiçbiri bilgi taşımaz; hepsi kayıt sınırını ilan eder. Aynı sınır boşlukla ilan edilseydi ekrana hiçbir çizgi eklenmezdi. Boşluk, sıfır mürekkeple çalışan tek gruplama aracıdır.
Ölçüt şu biçimde yazılabilir: ortak bölge, yakınlığın kuramadığı ilişkiyi kurmak için saklanır. Yakınlığın yetmediği üç durum vardır. Birincisi, ögeler yatay ve dikey olarak ayrışmıyorsa; bir tablonun satırlarında boşluk vermek satır yüksekliğini şişireceği için zemin rengiyle ayırmak daha ucuz olabilir. İkincisi, grup ekranın geri kalanından farklı bir işlev taşıyorsa; ödünç alma eyleminin bulunduğu bölüm bir eylem alanıdır ve okuma alanından yalnız boşlukla ayrılması bilgi kaybettirir. Üçüncüsü, grup kaydırılabilir bir alansa; sınırı görünmeyen bir kaydırma alanı içeriğin nerede bittiğini gizler.
Yanlış Bağlanan Etiket
Yakınlık hatasının en pahalı biçimi arama alanının bulunduğu bölümde ortaya çıkar. Katalog arayüzünde üç süzgeç alanı vardır: yayın yılı, dil ve materyal türü. Her alanın üstünde bir etiket, altında bir açıklama satırı bulunur.
Etiket ile alan arasındaki boşluk 8 piksel, alan ile açıklama arasındaki boşluk 8 piksel, açıklama ile sonraki etiket arasındaki boşluk 12 piksel yapılırsa, en küçük boşluğa oran 12 / 8 = 1.5 olur ve eşiğin altında kalır. Sonuç, üç ayrı süzgecin tek bir bloğa dönüşmesidir; okur hangi açıklamanın hangi alana ait olduğunu boşluktan okuyamaz, deneyerek bulur.
Doğru düzenleme, etiketi alana bağlayıp grubu dışarıdan ayırmaktır: etiket–alan 4 piksel, alan–açıklama 4 piksel, gruplar arası 24 piksel. Oran 24 / 4 = 6 olur. Bu düzenleme kâğıt üzerinde daha “sıkışık” görünür, ekranda ise daha okunur olur; çünkü sıkışıklık grubun içinde, ferahlık grupların arasındadır.
Aynı kural etiketin konumuna da uygulanır. Etiket alanın soluna yerleştirildiğinde, etiket ile kendi alanı arasındaki yatay boşluk, etiket ile bir sonraki satırın dikey boşluğundan küçük olmalıdır. İki eksende çalışan bir gruplamada oran ölçütü her iki eksende ayrı ayrı sınanır.
Özet
- Yakınlık, birbirine yakın ögelerin tek birim olarak algılanmasıdır; ögeler bir düzleme konduğu anda gruplanır, dolayısıyla soru gruplamanın var olup olmadığı değil amaçlanan gruplamayla örtüşüp örtüşmediğidir.
- Gruplama mutlak boşluk değeriyle değil, komşu boşluklar arasındaki oranla kurulur; bu kursun ölçütü, grup sınırının en küçük boşluğun en az iki katı olmasıdır.
- Boşluk eklemek gruplamayı iyileştirmez; boşluğu farklılaştırmak iyileştirir. Toplam boşluğu daha fazla olan bir tasarım daha zayıf gruplayabilir.
- İç içe gruplama düzeyleri çarpımsal ilerler; toplamalı bir dizi üst düzeylerde oranı bire yaklaştırdığı için sınırları siler.
- Ortak bölge yakınlıktan güçlüdür ama mürekkep maliyeti taşır; yakınlığın kuramadığı ilişkiler için saklanır.
- Boşluk kararları tek tek değil küme olarak alınır, çünkü bir boşluğun anlamı komşu boşluklara bağlıdır.
Sonraki Adım
Bu ders ilişkiyi kurmayı ele aldı. Geriye ayrımı ölçülü kurmak kalıyor. Önceki iki derste ayrım hep tek yönlü ele alındı: bir ögeyi öne çıkarmak. Oysa vurgu bir bütçedir; ekrandaki her vurgulanmış öge, diğer vurgulanmış ögelerin payını azaltır. Sonraki ders görsel ağırlığı alan ve parlaklık farkı üzerinden hesaplar, katalog ekranındaki vurgu paylarını çıkarır ve üç birincil eylemin neden hiçbirini birincil bırakmadığını sayıyla gösterir.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.