14 puan yazan GN⁺ 2025-08-30 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Son dönemde web sitelerindeki performans düşüşünün başlıca nedenleri aşırı JavaScript kullanımı ve izleme betikleridir; çoğu durumda bunların yerini yalnızca HTML/CSS ile doldurmak mümkündür
  • CSS nesting, relative colors, yeni viewport birimleri (lvh, svh, dvh) gibi yakın zamanda eklenen özellikler, geçmişte JS veya önişleyicilere bağlı olunan işleri basitçe çözebilir hale getiriyor
  • CSS, yalnızca basit bir stil aracı değil; animasyonlar, girdi doğrulama, karanlık mod teması, akordeon menüler de oluşturabilen güçlü bir dildir
  • Performans açısından da CSS, GPU hızlandırması ve ayrı bir iş parçacığında çalışması sayesinde animasyonlar ve geçiş efektlerinde JS'den daha akıcı ve verimlidir
  • Yazar, CSS'i yalnızca pratik bir araç olmanın ötesinde ifade ve sanatın bir aracı olarak vurguluyor ve web geliştiricilere modern CSS'in potansiyelinden daha fazla yararlanmalarını öneriyor

Giriş: Web'in karmaşıklığı ve yeni denemeler

  • Birçok web sitesi, JavaScript framework'lerinin aşırı kullanımı nedeniyle performans düşüşü ve karmaşıklık yaşıyor
    • React uygulamaları birkaç saniyede yükleniyor, NextJS ise hydration hataları üretiyor
    • node_modules klasörü birkaç gigabayt yer kaplıyor
  • JavaScript olmadan da yalnızca HTML ve CSS ile güçlü özellikler hayata geçirilebilir
    • E-ticaret sitelerindeki karmaşık alışveriş sepetleri veya dashboard'lar dışında JavaScript zorunlu olmayabilir
  • Bu yazı, CSS'in en yeni özelliklerini tanıtıyor ve geliştiricileri yalnızca JavaScript'e bağımlı kalmadan farklı olanakları keşfetmeye yönlendiriyor

CSS hakkındaki yanlış algılar ve bakış açısı

CSS gerçekten zor ve kullanışsız mı?

  • CSS'e yönelik olumsuz algı, temel öğrenimin eksikliğinden kaynaklanıyor
    • Pek çok geliştirici CSS temellerini atlayıp JavaScript veya TypeScript'e odaklanıyor
    • CSS, basit bir stillendirme aracı değil; güçlü yetenekler sunan alan odaklı bir dil
  • CSS, flexbox gibi araçlarla karmaşık düzenleri kolayca kurabiliyor
    • Örnek: display: flex ve justify-content: center ile bir div'i ortalamak kolaydır
    • Tarayıcı geliştirici araçları, flexbox özelliklerini görsel olarak ayarlamaya yarayan bileşenler sunar
  • Yalnızca tek bir alanı (ör. JS) derinlemesine öğrenip CSS'i ihmal ederseniz, bunun yük gibi gelmesi doğaldır

CSS yazmanın sancısı ve değişim

  • Eskiden CSS pek rahat değildi; bu yüzden Sass, Tailwind gibi araçlar ortaya çıktı
    • Örnek: .post > .buttons .like:hover gibi uzun seçici zincirlerini yönetmek gerekiyordu
  • Son dönemde kaliteyi artıran özellikler (nesting vb.) eklendiği için artık yalnızca temel CSS ile de rahat geliştirme yapılabiliyor
    • CSS nesting, ilgili stilleri tek yerde toplayarak okunabilirliği artırır
      • Örnek: .post { & > .buttons { .like { &:hover { ... } } } }
      • Ebeveyn-çocuk ilişkisi netleştiğinden daha kısa ve basit sınıf adları kullanılabilir
  • Relative colors, renk ayarlamayı kolaylaştırır
    • hsl(from #123456 h s calc(l + 10)) ile parlaklık ayarlanabilir
    • color-mix() ile iki renk karıştırılarak dinamik renk üretilebilir
  • Media query aralık sözdizimi, (width <= 768px) gibi sezgisel koşullar tanımlamayı sağlar
  • lh birimi, satır yüksekliğine göre stillendirmeyi destekler
  • scrollbar-gutter özelliği, scrollbar nedeniyle oluşan layout kayması sorununu çözer
  • Baseline, temel tarayıcılarda özellik uyumluluğunu garanti eder
    • newly available, modern tarayıcılarda çalışır
    • widely available, 2,5 yıl önceki tarayıcılara kadar desteklenir
    • Örnek: CSS nesting, Aralık 2023'ten beri tüm tarayıcılarda destekleniyor

Neden yalnızca CSS/HTML ile geliştirme yapılmalı?

  • Bazı kullanıcılar JavaScript'i varsayılan olarak devre dışı bırakır (güvenlik, gizlilik vb. nedenlerle)
  • Web sitesini saf CSS/HTML ile sunarsanız, bu kullanıcıların da siteyi kullanabilme olasılığı artar
  • Hem geliştirme hem de kullanıcı tarafında, yalnızca CSS/HTML kullanmanın hız, erişilebilirlik, CPU/pil kullanımı açısından avantajları büyüktür
    • CSS animasyonları compositor thread üzerinde çalıştığı için CPU yükünü azaltır
    • JavaScript event loop üzerinden çalışır; bu da küçük gecikmelere yol açabilir
  • Erişilebilirlik ve kullanım kolaylığı artar
    • Buton hover efektleri, toast animasyonları, girdi doğrulama gibi işler CSS ile kolayca yapılabilir

CSS'in pratik örnekleri ve başlıca özellikleri

@starting-style ile doğal başlangıç animasyonları oluşturma

  • Önceden bir öğenin giriş animasyonunu yapmak için keyframes, JS tetikleyicileri gibi karmaşık yapılara ihtiyaç duyuluyordu
  • @starting-style ile başlangıç durumunu tanımlamak kolaylaştı. Öğenin ilk durum animasyonu (ör. fade-in) artık rahatça yapılabiliyor
    • transition: opacity 1s; @starting-style { opacity: 0; } şeklinde ayarlanabilir
    • Ayrı bir @keyframes ya da JavaScript olmadan da çalışır
  • Yalnızca transition ile birlikte başlangıç durumunu belirtmek, animasyonun doğal biçimde uygulanmasını sağlar
    • Örnek: toast mesajlarının opaklık ve konum geçişlerini yumuşak hale getirmek

Karanlık/aydınlık mod için kolay tema ayarı

  • color-scheme: light dark, kullanıcı tercihine göre temayı otomatik değiştirir
  • light-dark(#000, #FFF) fonksiyonu, açık/koyu moda uygun renkleri belirler
  • Radio button'lar ve :has seçicisiyle kullanıcı tema seçimi desteklenebilir
    • JavaScript olmadan yalnızca CSS ile tema değişimi mümkündür
    • İstenirse temayı kaydetme/yükleme için JavaScript sonradan isteğe bağlı eklenebilir

Radio/checkbox ve :has, :checked ile özel UI oluşturma

  • Sekmeler, akordeonlar, toggle'lar gibi karmaşık etkileşimler bile JavaScript olmadan uygulanabilir
  • Radio button'lar, :checked ve :has ile özel biçimde stillendirilebilir
    • Örnek: label:has(input:checked) ile seçilmiş buton stili verilebilir
    • Girdi öğesi opacity: 0 ile gizlenirken ekran okuyucu erişilebilirliği korunur
  • details öğesi, SSS benzeri akordeon menüler oluşturmak için uygundur
    • name niteliğiyle yalnızca tek bir bölümün açık kalması kontrol edilebilir
    • [open] durumuna göre animasyon eklenebilir

Girdi doğrulama ve durumun yansıtılması

  • pattern, required gibi HTML nitelikleri ile CSS sözde sınıflarının (:valid, :invalid, :user-valid vb.) birleşimi, gerçek zamanlı doğrulama ve görsel geri bildirim sağlar
  • Girdi alanlarının outline/border stilini değiştirerek kullanıcı deneyimi iyileştirilebilir
  • HTML'in pattern niteliği, girdi alanı doğrulaması için kullanılabilir
    • Örnek: \w{3,16} ile 3-16 karakterlik harf/rakam/alt çizgi kabul edilebilir
  • CSS'in :valid ve :invalid durumları, geçerliliğe göre stillendirme yapar
    • :user-valid ve :user-invalid, stilleri yalnızca kullanıcı giriş yaptıktan sonra uygular
  • :has seçicisiyle girdi durumuna göre başka öğeler de stillendirilebilir
  • Bazı durumlarda (ör. karmaşık girdi koşulları) JS gerekebilir; ancak çoğu durumda CSS/HTML yeterlidir

Viewport birimlerini doğru kullanmak

  • vw/vh birimleri, mobilde adres (navigasyon) çubuğunun görünmesi/gizlenmesi nedeniyle doğruluk sorunları yaşar
  • lvh/svh/dvh (largest/smallest/dynamic viewport height) gibi yeni viewport birimlerinin kullanılması önerilir
    • lvh: tam ekran kullanım için (ör. tam ekran arka plan)
    • svh: her zaman ekranda görünmesi gereken butonlar, bağlantılar vb. için
    • dvh: kaydırma gibi değişimlere göre alanı dinamik biçimde ayırmak için
  • Klavye kaplaması, interactive-widget niteliği veya VirtualKeyboard API ile ele alınabilir
    • <meta name="viewport" content="width=device-width, interactive-widget=resizes-content">
    • Chromium tabanlı tarayıcılarda navigator.virtualKeyboard.overlaysContent = true

CSS istek listesi (eksik kalan veya arzu edilen özellikler)

  • Yeniden kullanılabilir bloklar: Bir sınıf içinde başka bir sınıfı uygulayabilme (ör. @apply border)
  • Birleştirilmiş media query seçicileri: @media ile sınıf seçicisinin birleşimi
  • nth-child değişkeni: span { --nth: nth-child(); } ile dinamik stillendirme
  • nth-letter seçicisi: Belirli bir harfi stillendirme (ör. p::nth-letter(2))
  • Birim kaldırma: calc(100vw / 1px) ile birimsiz değer üretmek
  • image() fonksiyonu: Yedek renk ve görsel parçaları desteği
  • body içinde style etiketi: FOUC sorununu hafifletmek için resmî standart desteği

Sonuç: CSS ve web'in sanatsal yönü

  • CSS, yalnızca bir araç değil; yaratıcı ifadenin bir aracıdır
  • Yapay zeka araçları veya build zinciri (linter, minify araçları) yaratıcılığı sınırlayabilir
  • CSS, performans, erişilebilirlik ve sanatsal ifadeyi aynı anda karşılar
  • Bu yazı, yaklaşık 49kB'lık JavaScript'siz HTML/CSS ile yazılmıştır
    • Tüm etkileşimli bileşenler ve görsel unsurlar elle uygulanmıştır
    • Örnek: CSS tıklama oyunu, CSS'in programlama dili benzeri olanaklarını kanıtlıyor

Henüz yorum yok.

Henüz yorum yok.