2015'te CSS Yerleşimini Titiz Bir Yaklaşımla Öğrenmek
(book.mixu.net)- CSS yerleşimini daha önce kullanmış okuyucuların yerleşim algoritmasını ayrıntılı kurallarına kadar anlaması için hazırlanmış, bölümler hâlinde bir öğrenme materyali
inline,block,z-indexve kutu modelini basit kullanım biçimleri olarak değil, formatting context ve stacking context gibi karar kuralları üzerinden yeniden açıklar- Normal akışta blok ve inline öğelerin göreli konumu yalnızca
displayile belirlenmez; kardeş öğeler ve bağlam da birlikte etkili olur - Kutu modelinde boyut ve
margin: autohesaplamaları konumlandırma biçimine göre değiştiğinden, tek bir kural olarak ezberlemek zordur - Normal akış, float, mutlak konumlandırma, margin collapsing, overflow,
z-index, pseudo-element’ler ve Flexbox’tan geçerek ortalama ve grid framework’leri gibi pratik yerleşim sorunlarına uzanır
CSS yerleşimini kurallar üzerinden anlamak
- Bu materyal, CSS yerleşimini ipuçları koleksiyonu olarak değil kural tabanlı bir sistem olarak ele alır ve her kuralı bölümler hâlinde takip ederek açıklar
- “pedantic” ifadesinde olduğu gibi, önemsiz görünebilecek ayrıntıları ve biçimsel kuralları bile sorgulayan bir yaklaşım benimser
- Hedef okuyucu CSS’yi ilk kez öğrenenler değil; hâlihazırda CSS kullanan ama yerleşim davranışını daha kesin biçimde anlamak isteyenlerdir
- Web siteleri genellikle aşamalı olarak geliştiği için yerleşimi küçük ipuçları ve hilelerle öğrenmek kolaydır; bu süreçte yerleşim algoritmasının kendisi gözden kaçabilir
- Temel kavramları sırasıyla ele alır ve her kavramı doğrulayabileceğiniz uygulamalı örnekler de sunar
Bölüm yapısı
- Chapter 1: Box positioning in CSS, HTML öğelerinin oluşturduğu kutuların birbirine göre nasıl yerleştirildiğini ele alır
- CSS’nin üç ana konumlandırma biçimi: normal akış, float ve mutlak konumlandırma
- Normal akışta anonymous box generation, formatting context, line box ve line box içindeki hizalama
- float order, clearfix, float ile ebeveyn yüksekliği arasındaki etkileşim
- Chapter 2: Box sizing in CSS, kutu modelini ve konumlandırma biçimine göre ortaya çıkan farkları ele alır
height,widthvemarginhesaplamaları birbirinden farklı mekanizmalar kullanır- Hesaplama biçimini anlamak için o anda kullanılan konumlandırma biçimini ve hesaplama mekanizmasını birlikte değerlendirmek gerekir
- Chapter 3: Additional properties that influence positioning, kutu yerleşimini etkileyen ek özellikleri ve mekanizmaları özetler
- margin collapsing, negative margins, overflow
max-width,max-height,min-width,min-height- stacking context ve
z-index - Pseudo-element’lerin yerleşime etkisi
- CSS3
box-sizingözelliği
- Chapter 4: Flexbox, CSS 3 Flexbox yerleşim modunu açıklar
- Chapter 5: CSS layout - tricks and layout techniques, önceki bölümlerdeki içeriği gerçek sorunlara uygular
- Yatay ve dikey ortalama
- CSS grid framework’lerinin çalışma biçimi
- Çok sütunlu yerleşim
- Yaygın tuzaklar ve yerleşim hileleri
- reference index, belirli bir kavramı veya özelliği arayıp ilgili bölüm ve kısımlara gitmek için kullanılabilir
1 yorum
Hacker News görüşleri
CSS düzenini açıklarken ilk söylenmesi gereken şey, birbirinden farklı dört düzen sistemi olduğudur: e-postalarda hâlâ kullanılan en eski table, metin içi görseller için float, bugün en çok kullanılan flexbox ve table'ın modern alternatifi olan grid
absolute ve fixed konumlandırma da düzeni “baypas eden” hack'ler gibi kullanılabilir
absolutevefixedne hack'tir ne de düzeni “baypas eder”İkisi de bir öğenin belge akışı içinde veya belirli bir kapsayıcı içinde nasıl yerleştirileceğini ve davranacağını belirleyen beş konumlandırma seçeneğinden ikisidir: https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layou...
floatözelliği Grid ile birlikte de kullanılabilir. En kolay ve en temel düzen sistemi olan normal akış bu listede yok: https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layou...Gerçek HTML table işaretlemesi, web sayfasının bazı kısımlarını yan yana yerleştirmek için kullanılan en eski yöntemlerden biridir ve e-postada da kullanılır, ama bu CSS'ten ayrı bir konudur
CSS'te
display: tableve ilişkili değerler vardır ama hatırladığım kadarıyla eski IE'de float'tan daha zor kullanılıyordu ve kullanımı da sınırlıydı. Modern web'de de çok kullanıldığını neredeyse hiç görmedim; belki de çevresindeki işaretleme gereksinimleri fazla katı olduğu içindir. Örneğin sırayı değiştirmenin bir yolu yoktur ve birden fazla satır gerekiyorsa HTML içine bunun görevini görecek öğeler eklemek gerekirÇünkü eski geriye dönük uyumluluk davranışlarını mantıklı varsayılanlara çevirir. Örn: https://www.joshwcomeau.com/css/custom-css-reset/#our-finish...
float'un “kutuları kapsayıcı kutunun sol ve sağ kenarlarına yerleştirmek için kullanıldığı” açıklaması doğru değil
float ile bu yapılabilir ama flexbox ve grid çıktıktan sonra artık bunun için kullanılmıyor. Öğeyi normal akıştan çıkardığı için CSS öğrenenler açısından düzen kurmayı kafa karıştırıcı hâle getirir
float, bir düzen aracından çok dizgi aracına yakındır. Metin kendini pedantic diye tanımlıyorsa daha titiz olmalıTemelde başkasının bilgisayarındaki dosyalar için yapılmış bir Microsoft Word gibiydi; bu yüzden
floatgibi ilk özelliklerin çoğu dizgi düzeni içindiYer kalmazsa önceki öğelerin altına iner. Öğenin
display: blockolması hâlinde yatay alanın tamamını kaplar, bu yüzden ondan sonraki tüm öğeler altına doğru yüzer. Adınınfloatolmasının sebebi ve öğe konumlarını hesaplama biçimi budurfloat:left|rightkullanıldığında aynı kapsayıcıdaki diğer öğelerden önce o öğe sola ya da sağa zorla yüzdürülür. Elbette kapsayıcı flex veya grid kullanıyorsa artık böyle çalışmazÖzellikle yazıldığı sırada flexbox/grid düzenlerinin henüz olmadığını düşününce, bunu yeterince titiz bir açıklama olarak görüyorum
Birçok özelliği düşünme ihtiyacını azaltıyor: https://flexboxcss.com
Özellikle notun paragrafın ortasındaki referans konumuna hizalanması gerekiyorsa daha da zor
Böyle yazılar, CSS Grid öncesi döneme ait olsa bile göz korkutucu geliyor. CSS Grid geldikten sonra CSS yerleşimi daha da karmaşıklaştı; 10 yıldır web geliştirme yapıyor olsam da CSS’in hâlâ ne kadar derin olduğunu kavrayamadığımı hissediyorum
Çalışma biçimi, nadir görülen istisna durumları, iç işleyişi ve inanılmaz sayıdaki özelliği böyle hissettiriyor; yakın zamanda bununla ilgili bir yazı da yazmıştım
Grid Layouting’in tüm ayrıntılarını daha yakalayamadan
subgridvecontainer queriesçıktı. Yeni eklenen birçok özellik o kadar özel durumlara hitap ediyor ki gerçekten kullanır mıyım diye şüpheleniyorum (hanging-punctuation,font-palettegibi)Yalnızca paragraf tireleme ile ilgili en az üç özellik var ve
filterözelliğinin SVG kullanan tamamen farklı türde filtreleri de desteklediğini fark etmeyebilirsiniz. Görüntü ölçekleme algoritmasını da ayarlayabiliyorsunuz veborder-radiuseliptik köşeleri de destekliyorBunu her teknoloji için söylemek mümkün ama CSS farklı. Çok fazla şeyi çok fazla yolla yapıyor ve çok fazla, çok hızlı değişiyor: https://shubhamjain.co/2024/02/19/css-impossible-thats-okay/
CSS ile çok daha uzun süredir uğraşıyorum ama
align-itemsmıydıjustify-contentmiydi ezberlemeye bile çalışmadığım için aklımda kalmıyor. Flexbox kullanacağım zaman https://css-tricks.com/snippets/css/a-guide-to-flexbox/ sayfasını açıyorumGrid’i daha da az hatırlıyorum. Yine de biraz söylenip WTF dedikten sonra istediğim şeyi yeterince kolay yapabildiğim için onun derinliğini bilmediğimi hissetmiyorum. CSS hakkında bunu çok duydum ama çoğu durumda büyük bir çaba harcamadan istediğim yerleşimi kurmanın oldukça kolay olduğunu düşünüyorum. Sadece CSS’i JS gibi aklımda tutamıyorum
İkisinin de dokümantasyonu iyi ve nispeten sezgisel; özellikle grid’in tuhaf davranışları daha az
Artık akış yerleşimini çok iyi bilmek zorunda değilsiniz ve float ile table layout’u tamamen atlayabilirsiniz. Bunları sadece asıl amaçları için, yani metin içindeki kayan görseller ve gerçek tablolar için kullanmanız yeterli
İlk kez gerçek bir frontend işi yapıp bunun için dolar aldığımda, doğrudan perl içinden DHTML üretiyordum. O kısaltmayı yazmak bile kas hafızamın önbelleğinden o kadar uzaklaşmış ki parmaklarım tökezliyor
Frontend, sanki altı yaşında bir çocuğun diferansiyel hesabı biliyor olması gereken bir alan gibi; artık yetişmenin yolu yokmuş gibi geliyor
Tabii düz CSS kullanmam ve genelde global stylesheet de tutmamam bunda epey yardımcı oluyor
Çok fazla UI uygulaması geliştiriyorum ve çoğunlukla Angular kullanıyorum; bugünlerde genelde Bootstrap ya da Foundation gibi framework’ler kullanıyorum
Saf CSS’in sayısız yerleşim seçeneği, özellikle responsive design tarafında, bunaltıcı ve baş ağrıtıcı. Saf CSS denedim ama sonunda yine çok fazla boilerplate kullanıp mini bir framework benzeri şey üretmiş oldum
Özel tasarımlı bir tasarımcı web sitesi yapmıyorsanız, kişisel olarak sürekli tekerleği yeniden icat etmeye gerek görmüyorum
CSS mutlaka tekerleği yeniden icat etmek anlamına gelmiyor; zor yerleşimleri ya da eskiden JS gerektiren işleri daha kolay ve daha güçlü hâle getirebiliyor
Bootstrap da fena değil ama ileri seviye yerleşim problemlerini çözmek için gerçekte hangi stillerin uygulandığını görmek adına sık sık öğe denetimine başvuruyorum. En azından benim deneyimim buydu; bu yüzden kişisel olarak tercihim CSS olurdu
Beklediğim yeni özellik
@scopekuralı; scoped stiller yazmayı çok daha kolaylaştıracak gibi görünüyorhttps://open-props.style/
https://developer.mozilla.org/en-US/docs/Web/CSS/@scope
Bu yazı CSS Grid ve CSS columns öncesinde mi yazılmış?
z-index ile ilgili bir yazı da var: https://philipwalton.com/articles/what-no-one-told-you-about...
Legacy codebase’lerle uğraşırken değerli olabilir ama yeni projelerde bunlardan kaçınmak daha iyi
CSS’yi derinlemesine öğrenmenin en iyi yolu nedir? Resmî dokümanlar, neyin şu anda geçerli olup neyin olmadığını anlatma konusunda biraz garip hissettiriyor
Hollandacada current’ın
actueel, actual’ın isedaadwerkelijkdiye çevrildiğini düşününce oldukça anlaşılır geliyor. Ana dili İngilizce olanlar için kafa karıştırıcıysa bu belki tersine faydalı bile olabilirBu, belli bir öğrenme tarzına uygun bir tavsiye olabilir ama gerçekten stil ve düzenle oynadığınızda nasıl çalıştığının pratik yönü iyice yerleşiyor
CSS yazarken hedefim mümkün olduğunca az yazmak. CSS’den nefret ettiğim için değil; aksine haksız yere kötü bir üne sahip olduğunu düşünüyorum. Ama bu sayede deklarasyonları gereksiz yere üst üste bindirmeden düzeni daha etkili biçimde stillendirmeyi öğreniyorsunuz
CSS temelleri için en iyi kaynak https://web.dev/learn/css oldu; flexbox ve grid de dahil
Tasarım yönergeleri için Refactoring UI’ı öneririm. The UX Book gibi kitaplarda eksik kalan, uygulanabilir çok sayıda tavsiye içeriyor
Kendi projelerimde Refactoring UI yazarlarının TailwindCSS ve Daisy UI bileşenlerini kullanıyorum; bu yüzden pratikte raw CSS yazmıyorum. Başta TailwindCSS, inline CSS’ye geri dönüş gibi hissettirebilir ama alternatiflerden düpedüz daha iyi. Bir kez denemenizi tavsiye ederim
[1] https://drafts.csswg.org/
[2] https://developer.mozilla.org/en-US/docs/Web/CSS
İlki yeni web geliştiricileri için bir öğrenme kaynağı değil. İkincisi de resmî ya da otoritatif bir belge değil ama genellikle Baseline desteği ve tarayıcı uyumluluk tabloları hakkında bilgi içeriyor
marginilepaddingi ne zaman kullanacağınızı kavrayınStil katmanlılığının nasıl çalıştığını öğrenmek de iyi olur; böylece neden SCSS ve bileşen geliştirme kullanıp bunun çoğunu düşünmemeye çalıştığımızı da anlarsınız
Media query’leri ve ekran boyutuna göre hedefleme yapmayı da öğrenin. Her şeyden önce, web’de “CSS’te x nasıl yapılır” diye aramaktan utanmayın. Spesifikasyonlar devasa ve ezberlenecek şey çok fazla; uzun süre sık kullanmayınca hepsini akılda tutmak mümkün değil