İnterneti Şekillendiren HTML Hack Teknikleri
(tedium.co)- İlk web geliştiricileri, tarayıcıdan tarayıcıya standart uygulamaları ve kusurları farklı olduğu için, yalnızca geçerli HTML/CSS ile istenen düzeni ve davranışı güvenilir biçimde garanti etmekte zorlanıyordu
- Netscape 4, Internet Explorer 5/6/7, Safari/WebKit, Outlook gibi ortamlar; CSS, PNG şeffaflığı, yorumlar, seçiciler ve e-posta önizlemelerinde tarayıcıya özel geçici çözümler doğurdu
- HTML tablo düzenleri, sIFR, Chrome Frame ve duyarlı tasarım; asıl amaçlarından farklı kombinasyonlarla tasarım kısıtlarını ve eski tarayıcı sorunlarını aşmaya çalışan örneklerdi
- Bu hack’ler erişilebilirliğin azalması, standart dışı kod, Flash ve eklenti bağımlılığı gibi sınırlara sahipti; ancak o dönemde uyumluluğu ve görsel ifadeyi sağlamak için gerçekçi araçlardı
- Web standartlarının ideali ile gerçek kullanım biçimleri sürekli çatıştı; geliştiriciler ve tasarımcıların tekrarlayan geçici çözümleri web tasarımında, e-posta HTML’inde ve mobil uyum yaklaşımlarında uzun süre iz bıraktı
Tarayıcı kusurlarını aşan CSS hack’leri
- Netscape Navigator 4.0’ın
@importhack’i, Netscape’in destekleyemediği CSS’i bilerek@importile yükleyip, bu tarayıcının gelişmiş stilleri uygulamasını engelleme yöntemiydi- Temel CSS
<link>ile yükleniyor, daha gelişmiş CSS ise@importile ayrılarak çağrılıyordu - CSS Cookbook, bu yöntemin Netscape’te çalışmayan CSS dosyalarını birlikte yükleme etkisi yarattığını özetler
- Netscape, CSS yerine JSSS’i öne çıkardı; W3C CSS’i seçtikten sonra 1997 yazında Netscape 4’e CSS’i aceleyle uyguladı
- Netscape 4’te JavaScript kapatıldığında CSS’in de kapanması gibi bir yan etki vardı
- Temel CSS
- Internet Explorer 6’ya yönelik CSS hack’i,
_widthörneğinde olduğu gibi özelliğin önüne alt çizgi ekleyerek yalnızca IE6’nın ilgili bildirimi yorumlamasını sağlıyordu- W3C’nin kutu modeli
widthdeğerinin border ve padding’i hariç tuttuğunu kabul ediyordu; Internet Explorer ise padding ve border’ı farklı işleyerek tarayıcılar arasında düzen farkları yaratıyordu - Örnek,
width: 300px; _width: 320px; padding: 10px;biçiminde, standart CSS açısından geçerli olmayan bir bildirimi IE6 için düzeltme değeri olarak kullanmaktı !importantsonuna bir ünlem işareti daha ekleyip yalnızca IE7 ve altı sürümlerde farklı davranmasını sağlamak gibi IE’ye özel hack’ler de vardı
- W3C’nin kutu modeli
Düzen için anlamsal yapıyı bükmek
- HTML tablo düzeni, aslında tablo biçimindeki verileri ifade etmek için tasarlanan
<table>öğesini görsel sayfa yerleşimi aracı olarak kullanan tipik bir hack’ti- David Siegel, web’e geleneksel bir tasarımcının bakış açısıyla yaklaştı ve HTML’in görsel sonucuna tarayıcının karar vermesi geleneğine karşı çıkarak daha iyi görünen web siteleri yapmak istedi
- Creating Killer Web Sites kitabında yapısal işaretlemeyi aşmayı, görsellerle iki boyutlu yerleşimler oluşturmayı ve tablolar ortaya çıkınca sütunlara metin yerleştirmeyi ele aldı
- The History of the Web yazarı Jay Hoffman, HTML/XML safçılarının tasarım ile kod yapısının karışmasını büyük bir tabu olarak gördüğünü özetler
- Tablo düzenleri erişilebilirliği bozdu ve bunu düzeltmek zaman aldı; ancak geliştiricilerin web portallarını görsel olarak düzenleyebileceği değerini gösterdi
- Duyarlı tasarım, tablo düzenleri gibi mevcut teknolojileri yeni bir şekilde birleştirdi; ancak web standartlarının sınırları içinde ekran boyutuna göre düzeni değiştirme yöntemiydi
- 2000’lerin web tasarımında üç sütunun sayfa altına kadar uzandığı “Holy Grail layout”u CSS ile uygulamak büyük bir tartışma konusuydu
- Arka plan görselleriyle sahte sütunlar oluşturmak gibi birçok geçici çözüm vardı; daha sonra CSS grid tabanlı düzenleri desteklemeye başladı
- Akıllı telefonlar yaygınlaştıkça mevcut üç sütunlu düzenin anlamı zayıfladı ve ayrı mobil web sitesine para harcanması gereken durumlar ortaya çıktı
- Ethan Marcotte, A List Apart’taki responsive web design yazısında medya sorgularını kullanarak web sitesi yerleşimini ekran biçimine uyarlama yöntemini sundu
- Duyarlı tasarım o dönemde pek bilinmeyen medya sorgularını kullanan bir hack gibi görünüyordu; ancak web tasarımını uzun vadede değiştirdi
Internet Explorer döneminin görsel ve yorum geçici çözümleri
AlphaImageLoader, Internet Explorer 5 ve 6’nın PNG şeffaflığını düzgün destekleyememesi sorununu Microsoft’a özel bir filtreyle aştı- Internet Explorer 4. sürümden itibaren PNG’yi destekliyordu; ancak birçok durumda düzgün render edemiyordu ve özellikle IE5/IE6’nın şeffaf PNG desteğinin olmaması büyük sorundu
- Perishable Press’ten Jeff Starr, PNG fix for Internet Explorer yazısında, o dönemin çözümlerinin Microsoft’a özel AlphaImageLoader şeffaflık filtresini gerektirdiğini ele aldı
- Örnek, IE’ye
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(...)uygulayıp IE dışı tarayıcılara[class]seçicisiyle normal arka plan görseli uygulama biçimindeydi - Bu tür küçük özellik boşlukları, 2000’lerin sonları ve 2010’ların başlarında geliştiricilerin tarayıcıya özel hack’leri düşünmeye devam etmesine yol açtı
- Koşullu yorumlar (Conditional Comments), Microsoft’un IE sürümüne göre belirli HTML’in render edilip edilmeyeceğine karar vermek için oluşturduğu bir HTML yorum uzantısıydı
- Internet Explorer, web sitesi uygulamalarında çok fazla hack gerektirince Microsoft, bu hack’leri yönetmek için başka bir hack daha getirdi
- Normalde çalıştırma amaçlı olmayan HTML yorumları, IE sürüm koşullarına göre davranan bir yapıya dönüştü
- İlk olarak Internet Explorer 5’te tanıtıldı ve Windows için Microsoft Outlook’taki karmaşık e-posta tasarımlarında hâlâ gerekli olabildiği durumlar var
- Jens Oliver Meiert, 2007 tarihli yazısında, koşullu yorumların IE sürüm uyumluluğu için her belge ya da şablonun HTML’ini yeniden ayarlamayı gerektirdiğini ve yapı ile sunumun ayrılmasına zarar verdiğini söyleyerek eleştirdi
- Koşullu yorumlar IE9’dan sonra kaldırıldı; JavaScript’in conditional compilation özelliği alternatif olarak kullanılabiliyordu
Yazı tipleri, e-posta ve eski tarayıcılar için standart dışı kombinasyonlar
- sIFR (Scalable Inman Flash Replacement), web güvenli yazı tiplerine bağlı kalmadan istenen fontu göstermek için metni Flash gömüsüne dönüştüren JavaScript tabanlı bir hack’ti
- Microsoft’un Core Fonts for the Web’i sınırlı web güvenli yazı tiplerinin kullanımını fiilen teşvik etti ve daha sonra sonlandırıldı
- İlk font değiştirme teknikleri görsel kullanımından yola çıktı; ancak erişilebilirlik ve ifade sınırları vardı
- Shaun Inman, istenen fontu küçük bir Adobe Flash dosyasıyla değiştirme fikrini ortaya attı; Mike Davidson ise sIFR ile fontun ihtiyaca göre ölçeklenmesini sağladı
- Davidson, 2004 tarihli sIFR duyuru yazısında, kullanıcının yüklemediği özel yazı tiplerini iletme sorununun henüz çözülmediğini düşünüyordu
- sIFR, gerçek web fontu çözümlerine giden yolda bir ara aşamaydı; Flash mobil dünyaya taşınamayınca uzun ömürlü olmadı
- Ön başlık metni hack’i, e-posta istemcisinin önizleme satırına istenmeyen sonraki gövde metninin eklenmesini önlemek için gizli karakterler ve boşluk karakterleri ekleme yöntemidir
- Ön başlık, e-posta gelen kutusunda başlıktan sonra görünen kısa metindir ve e-postanın alt başlığı gibi çalışır
- E-posta istemcileri HTML etiketlerini ya da ilgisiz gövde metnini önizlemeye çekebildiğinden, amaçlanan ön başlık ile sonraki metin arasına zorla boşluk eklenir
- Litmus’un önerdiği örnek,
display: none,max-height: 0px,overflow: hiddenuygulanan bir alana͏,,,,gibi karakterleri tekrarlı biçimde eklemekti
- Google Chrome Frame, Internet Explorer içinde Chrome render motorunu kullandırarak IE6’ya bağımlı ortamlarda bile modern web özelliklerinin kullanılmasını sağlayan bir tarayıcı eklentisiydi
- Bazı şirketler güçlü IT departmanları ve IE6 tabanlı teknoloji bağımlılığı nedeniyle modern tarayıcılara geçmekte zorlanıyordu
- Google, 2009’da Chrome Frame’i geliştirerek eski Internet Explorer’a modern bir motor sağladı ve geliştiricilerin birden fazla sürüm oluşturmak ya da yeni özelliklerden vazgeçmek zorunda kalmamasını hedefledi
- Chrome Frame’in emekliliği yazısına göre o dönemde birçok kullanıcı modern özelliklerde geride kalmış tarayıcıları kullanıyordu
- Google Wave ve YouTube gibi araçlar HTML5 özellikleri gerektiriyordu; IE6 desteği Google için bir kısıttı
- Chrome Frame 5 yıl piyasada kaldı; bu sürenin ardından Chrome son derece baskın bir tarayıcı hâline geldi
Safari/WebKit’e özel uyarlamalar ve web’in gerçek evrimi
- WebKit’e özel seçici hack’i,
@supports (-webkit-appearance:none) {}gibi belirli bir tarayıcıya özel CSS desteğini kullanarak yalnızca WebKit ailesi tarayıcılara CSS uygulama yöntemidir- Safari ilk çıktığında açık kaynak topluluğuna dayanan bir motoru temel alıyordu ve başlangıçta HTML/CSS standart desteği güçlüydü
- Apple Mail, WebKit kullandığı için e-posta kodlamasında genel olarak iyi çalışan bir ortam olarak görülüyordu
- Zamanla Safari sürüm takviminin Mac ve iOS takvimlerine bağlı kalması, sektörün gerisinde kalma sorununu doğurdu
- Geliştiriciler, Apple’ın hataları görmezden geldiğini ya da rekabet açısından dezavantajlı özellikleri geciktirdiğini söyleyerek eleştirdi
- Reddit’te bir kullanıcı, Safari geliştirmeyle ilgili şikâyet yazısında, API uygulansa bile çok hatalı olduğunu ya da sonradan bozulduğunu yazdı
- Bu hack, WebKit tabanlı başlayan ilk Chrome sürümlerinde de çalışıyordu
- HTML’in amacı ile web’in gerçek kullanım biçimi büyük ölçüde farklılaştı; tasarımcılar ve UI uzmanları, tuhaf kodlara rağmen internet üzerinde görsel ifade inşa etti
- David Siegel’in anlattığı gibi standart kuruluşları, HTML’in RSS gibi, nihai tasarımdan çok kullanıcıya ve yapıya önem veren bir biçimde çalışmasını istiyordu
- Aynı dönemde ortaya çıkan Gopher gibi protokoller de tasarım etkisinin büyük olmadığı bir şekilde çalışıyordu
- Ancak internet kullanıcılarının yaratıcılığı ve ticari internetin görsel dile bağımlılığı nedeniyle bu felsefe ana akım hâline gelemedi
- E-posta HTML’inde standart HTML/CSS ile kolay olan şeffaf gradyan işlemleri bile zordur; eski StackOverflow yorumlarındaki HTML tablo glitch’i gibi geçici çözümler hâlâ çözüm olabiliyor
1 yorum
Hacker News yorumları
Yerleşim için tablo kullanmak oldukça anlaşılır bir şey
Ama tablolar gözden düştükten sonraki birkaç yıl boyunca yerleşim kurmanın tek yolu float kullanmaktı. Asıl zorlu dönem oydu; listede olmaması şaşırtıcı
https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layou...
“Başta metin bloklarının içinde görselleri yüzdürmek için tasarlanan float özelliği, web sayfalarında çok sütunlu yerleşimler oluşturmak için en yaygın kullanılan araçlardan biri hâline geldi. flexbox ve grid’in ortaya çıkmasıyla artık asıl amacına geri döndü”
Bitirmeye yakın IE’de açıp bakınca tüm tasarımın dağıldığını gördüm; hedef müşteriler neredeyse kesin olarak IE kullanacak kişilerdi, bu yüzden sonunda tablo tabanlı olarak yeniden yazmak zorunda kaldım. Üzücü bir gündü
Tabloların geri plana itilmesinden sonra sayısız frontend ekibinin “saflık yanlılarının” inançlarını korumak için float numaralarıyla toplamda aylar harcayıp çok daha az anlaşılır web sayfaları yaptığını gördüm; bundan önemli bir ders çıkardım
Joel Spolsky harika bir yazısında böyle geliştiricilere Architecture Astronauts diyordu: asıl işlerinin en az çabayla iyi çalışan yazılımı gerçekten üretmek olduğunu unutan tipler. İlk EJB şartnamesinin gülünçlüğünün ya da Java’nın alay konusu olan AbstractFactoryBuilderConstructor tarzı şeylerinin de bu tür insanların ürünü olduğunu düşünüyorum
Zamanla bu eğilimi iyi tanıyıp uzak durmayı öğrendim
https://en.wikipedia.org/wiki/Holy_grail_(web_design)#Faux_c...
.clearfix::after { content: ""; clear: both; display: table; }[1] https://www.w3schools.com/howto/howto_css_clearfix.asp
float zahmetliydi ve düzgün hizalamak zordu; birçok kişi tekrar tabloya döndü, açıkçası onları suçlayamazdım
spacer.gif hiç mi saygı görmüyor?
Tabii HN’de hâlâ var ve her sayfa isteğine dahil ediliyor
https://news.ycombinator.com/s.gif
Sevdiğim birkaç şey vardı
Faux columns, görsel olarak uzamış gibi görünerek kenar çubuğunu ana içerik kadar uzunmuş gibi gösterirdi: https://alistapart.com/article/fauxcolumns/
Daha da ileri gidip 9-patch ve 9 div ya da 3x3 tabloyla her eksende arka planı tekrar ederek kendi sınırlarınızı taklit edebiliyordunuz. CSS3’te border-image’ın gelmesi biraz yardımcı oldu ama bu tür kenarlık stilleri artık pek moda değil
Yuvarlatılmış kenarlıklar da 9-patch ile yapılabiliyordu; birçok kişi de oluşturucularla birden fazla öğe üretip yuvarlatılmış kenarlıkları simüle eden HTML hazırlıyordu. Bu yazı açıklıyor: http://benogle.com/2009/04/29/css-round-corners.html Genelde ek markup bayt olarak görsellerden daha büyük olurdu ama gidiş dönüş isteklerini azalttığı ve oldukça kolay yapılabildiği düşünülürdü
ActionScript tarafına daha yakındı ama stil verme fikri aynıydı; bununla ilgili bir yazı da yazmıştım: https://brajeshwar.com/2005/splice9-bitmap-window-resizer-co...
Sevdiğim bir başka şey de tekrar etmeyen arka plan stili desenlerinde cicada principle kullanmaktı
Yine de aradan bu kadar zaman geçmiş olmasına rağmen hâlâ temiz görünüyor
HN'nin hâlâ bunlardan birini kullanması hoşuma gidiyor: HTML tablolarıyla yerleşim oluşturma
Daha ciddi bakınca, bu liste standart olmadan geliştirme yapıldığında kontrol bilgisinin çeşitli “idare eder” yan kanallara kodlandığını iyi gösteriyor
Bu karmaşa ve çakışma olasılığı, bugün W3C sürecinin zaman zaman gördüğü küçümsemeye yeniden bakmayı sağlıyor. Bu süreç, standart odaklı web teknolojisi evrimiyle tarayıcı odaklı inovasyonu birleştiriyor; ikisinin sırayla öne geçmesine ya da yan yana ilerlemesine izin veriyor
Sıkça alaya alınsa da, bunu önceki yöntemden daha sürdürülebilir ve istikrarlı bir yaklaşım olarak da yorumlamak mümkün
Yeni W3C-tedarikçi normlarını eleştirenlerin kaçının, bu “10 tuhaf hack”in hatırlattığı o coşkulu günlere dönmek isteyeceğini merak ediyorum
Yapmak istediğiniz şey bir özellik olarak ele alınmıyorsa, bir şekilde yaratıcı davranırsınız. Standartlar, olası ihtiyaçların tümünü yakalayacak kadar olgun değilse, aksine katılık yaratıp bu duruma yol açar. Özellikle web gibi, ihtiyacınıza uyabilecek de uymayabilecek de standartlara bağlı kalınan yerlerde böyledir
Diğer alanlarda genellikle yeterince seçenek olur; içlerinden biri yapılması gereken işi karşılayacak kadar esnektir ve onu seçersiniz
Araştırma tarafında uzun süre çalışınca, yapmak istediğiniz şeyin şaşırtıcı derecede sık biçimde hack'vari teknik yaklaşımlar gerektirdiğini görürsünüz. Çünkü pek çok standart ve özellik kümesi, paranın aktığı iş/tüketici etkileşimleri ve bunların çevresindeki sistemler etrafında oluşur
Tarayıcı özelliklerine bağımlı birçok oyuncu, örneğin uygulamalarını WebKit ya da Chromium sürümleri içinde çalıştıran TV üreticileri, standart komitelerinde tamamen sessiz. Bu yüzden fiilen Google, Apple ve Mozilla arasında üç taraflı bir çekişme bile sayılmaz
Sonuçta div'in içine konmuş bir tablo elde ediyorsunuz. Sadece 12 sütunlu
HTML 3.2 ile öğrendiğim için IE ve Netscape yüzünden ne tür Bizansvari saçmalıkların gerektiğini çok iyi biliyorum. Ama bu, MS ve Netscape'in tercihiydi; W3C'nin varlığı daha güçlü olsaydı bile MS ve Netscape'in yeni standartları izleyeceğine dair bir garanti ya da ima yoktu
Yine de o dönem, bugün olduğu gibi tek bir büyük şirket istediğinde web'in geri kalanının katlanmak zorunda kaldığı berbat durumdan iyiydi
Gerçekten çok daha iyiymiş, ne güzel /s
“En sevdiğim” hack eksik kalmış. Erişilebilirlik başlığını
-10000konumuna koyup ekranda render edilmemesini, ama ekran okuyucunun okumasını sağlama yöntemiaria-labelgibi şeyler bu kalıbın bazı kullanım yerlerinin yerine geçti, ama hepsinin değilTüm CSS'lerden önce kurup tarayıcı quirks'lerini ortadan kaldıran html5 shiv'den bahsedilmemiş
https://paulirish.com/2011/the-history-of-the-html5-shiv/
Tablo hücrelerini uslu tutmak için kullanılan şeffaf 1×1 piksel GIF'in güzel eski günlerini hatırlıyorum
https://news.ycombinator.com/item?id=38485665
Bunu neden yaptığımızı bile hatırlamıyorum. Daha hızlı yüklenmesi için miydi?
İlk dönemlerden bir tane daha eklemek gerekirse, satır bölünmeyen boşluk karakteri varlığı olan
nin yaygın kullanımı vardıBir konteyner içinde metni sağa ya da sola itmek için kullanılırdı; hatırladığım kadarıyla tablo hücrelerini uslu tutmak için 1x1 spacer GIF gibi de kullanılırdı. Bazı sayfalarda yüzlerce
bulunurdu; kenar boşluğu ya da padding eklemek için genel amaçlı bir araç gibiydiModern web geliştiricileri CSS Grid olduğu ve IE öldüğü için mi şımardı, yoksa biz o zamanlar modern framework'lerin ve build süreçlerinin karmaşıklığını yaşamadığımız için mi şımarıktık, bazen bilemiyorum
Yine de bugünler daha kolay gibi. Teknik olarak modern framework'leri ve build süreçlerini kullanmak zorunda değilsiniz; sadece modern CSS ve JavaScript ile eskiden karmaşık olacak siteleri ve uygulamaları kolayca yapabiliyorsunuz
Sektör, tekerleği sürekli daha karmaşık biçimde yeniden icat etmeyi alışkanlık haline getirdi
En makul tahmin, web'in yeni ya da az deneyimli geliştiricilerin daha sık seçtiği bir alan olmasının yan etkisi olduğu
Responsive tasarım gerçekten hack mi? Media query'ler harika
Koşullu mantığı JavaScript'e koymak yerine CSS'te tutmak büyük kazanç. Özellikle sunucu tarafı render istendiğinde
User agent'ın çeşitli özelliklerini sorgulayıp sonuca göre farklı CSS sunabilirsiniz. Buna hack demek cehalet olur; responsive tasarım yapmak için gerekli bir parça