Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
12 yazı bulundu #sass
Sass'ı Build'e Bağlamak: Source Map'ler, Angular, Vite ve ASP.NET Core Ayarları, Load Path'ler ve Derleme Performansı
Frontend SERİ 12

Sass'ı Build'e Bağlamak: Source Map'ler, Angular, Vite ve ASP.NET Core Ayarları, Load Path'ler ve Derleme Performansı

Source map'i geliştirmede aç, production'da hidden yap ve .map dosyasını yayından ayır; Vite'ta sass-embedded kur, additionalData'ya yalnız CSS üretmeyen @use satırı koy. Bookstore'da Debug sonrası Release build'in Sass'ı hiç çalıştırmadığını ve map'i Brotli ve gzip kopyalarıyla yayına gönderdiğini gösteriyor, MSBuild target'ını düzeltiyor, DevTools'un .scss satırını bulduğunu ve pkg: importer'lı kendi build script'imizi deniyoruz.

15 Kas 2026 11 dk 12
Kendi Sass Kütüphaneni Yazmak: @debug, @warn, @error ile Argüman Doğrulama, sass:meta, sass:selector ve True ile Test
Frontend SERİ 11

Kendi Sass Kütüphaneni Yazmak: @debug, @warn, @error ile Argüman Doğrulama, sass:meta, sass:selector ve True ile Test

Bir Sass kütüphanesinde public function'ları meta.type-of ile doğrulayıp meta.inspect'li @error ver, eskiyen API'yi @warn ile duyur ve function'ları True ile, hata ve uyarıları Vitest'te JavaScript'ten test et. Bookstore'un ortak Sass kodunu @bookstore/styles paketine taşıyor, Angular'ın sabit quietDeps ayarının @warn'ı susturmadığını gösteriyor ve 16 testlik bir paketle min-width regresyonunu yakalıyoruz.

15 Kas 2026 13 dk 11
Responsive Mixin'ler ve Utility Class Üretmek: Breakpoint Map'i, @content(args), Container Query Mixin'i ve @each/@for ile Utility'ler
Frontend SERİ 10

Responsive Mixin'ler ve Utility Class Üretmek: Breakpoint Map'i, @content(args), Container Query Mixin'i ve @each/@for ile Utility'ler

Breakpoint'leri tek bir map'ten okuyan up, down, between ve only mixin'lerini range syntax'la yaz; max-width ile min-width'in tam sınırda çakışması böylece biter ve aynı mixin'ler $container ile container query üretir. Bookstore'a @content(args) ile md: önekli utility'ler üreten bir generator ve kart genişliğine bakan bir buton ekliyor, her şeyi responsive üretmenin kural sayısını 3,6 katına çıkardığını ölçüyoruz.

15 Kas 2026 12 dk 10
Sass Built-in Module'leri 2: sass:map ve sass:color ile İç İçe Token Map'leri, deep-merge ve Color Space Farkında Renk Türetme
Frontend SERİ 09

Sass Built-in Module'leri 2: sass:map ve sass:color ile İç İçe Token Map'leri, deep-merge ve Color Space Farkında Renk Türetme

İç içe token map'ini map.merge() ile değil map.deep-merge() ile override et, renk tonlarını HSL'de değil OKLCH'de türet ve sonucu color.to-gamut()'tan geçir; yoksa iç key'ler sessizce kaybolur, aynı adım renkten renge 8 ile 14 puan oynar ve gamut dışı renkleri tarayıcı keser. Bookstore'a OKLCH'de üretilen hover, active ve subtle tonları ile deep-merge'le kurulan bir kurumsal portal teması ekliyoruz.

15 Kas 2026 13 dk 10
Sass Built-in Module'leri 1: sass:math, sass:string ve sass:list ile Birim Hesabı, px→rem Function'ı ve List İşlemleri
Frontend SERİ 08

Sass Built-in Module'leri 1: sass:math, sass:string ve sass:list ile Birim Hesabı, px→rem Function'ı ve List İşlemleri

Sass sayıları birimleriyle taşır: uyumlu birimleri dönüştürür, rem ile px'i karıştırınca hata verir, 1.96.0'dan beri 16px * 2px'i tarayıcının attığı bir calc()'a çevirir; list'ler 1'den sayar. Bookstore'a birimsiz, px ve pt kabul eden bir rem(), 0'dan başlayan ölçeği list'ten okuyan space() ve font-stack() ekliyor, class adlarında escape'i ve unique-id()'nin build'i nasıl deterministik olmaktan çıkardığını gösteriyoruz.

15 Kas 2026 13 dk 10
Dart Sass 2.0'a Hazırlık: Deprecation'lar, --fatal-deprecation, Slash Division ve @import'un Sonu
Frontend SERİ 07

Dart Sass 2.0'a Hazırlık: Deprecation'lar, --fatal-deprecation, Slash Division ve @import'un Sonu

Dart Sass 2.0'da 1.105.0'a kadar gelen deprecation'ların çoğu hataya dönüşüyor (slash-div, darken() gibi renk fonksiyonları, legacy JS API); @import, global built-in'ler ve eski if() 3.0'a kadar uyarı olarak kalıyor. --fatal-deprecation=dart-sass-2 ile bugünden hata alıyor, sass-migrator ile temizliyor ve Angular'ın sabit quietDeps ayarı yüzünden includePaths ile yüklenen dosyalardaki deprecation'ların build'de hiç görünmediğini gösteriyoruz.

14 Kas 2026 12 dk 14
Büyük Projede Stil Mimarisi: 7-1 Pattern, BEM, ITCSS ve Cascade Layers ile Katmanlı CSS
Frontend SERİ 06

Büyük Projede Stil Mimarisi: 7-1 Pattern, BEM, ITCSS ve Cascade Layers ile Katmanlı CSS

Büyük bir stil codebase'i CSS üretmeyen bir abstracts ile CSS üreten klasörlere böl, isimleri BEM ile düz tut ve ITCSS'in genelden özele sırasını @layer ile tarayıcıya taşı; Sass'ta katmanlar @use ile değil meta.load-css() ile kurulur. Bookstore'un stil ağacını 7-1'e çeviriyor, vendor CSS'i katmana alıyor ve Angular component stillerinin katmansız olduğu için en uzun katmanlı selector'ü bile yendiğini ölçüyoruz.

14 Kas 2026 9 dk 14
Sass ile Theming: Map'ler, CSS Custom Property Üretmek, Dark Mode ve Angular Material M3 Teması
Frontend SERİ 05

Sass ile Theming: Map'ler, CSS Custom Property Üretmek, Dark Mode ve Angular Material M3 Teması

Tema değerlerini Sass map'inde tutup doğrula ve light-dark() ile custom property'ye çevir; runtime'da tema değiştirmek yalnız color-scheme'ı ya da html'deki bir class'ı değiştirmek demek, Sass değişkeni runtime'da değişmez. Bookstore'a eksik token'da build'i kıran bir mixin, üç durumlu tema butonu ve marka renginden üretilmiş bir Angular Material M3 teması ekliyor, iki temada sekiz durumu ölçüyor ve tema başına ayrı bundle'ın neden değmediğini gösteriyoruz.

14 Kas 2026 11 dk 12
Sass Module Sistemi: @use, @forward, Namespace, Private Member ve @import'tan Migration
Frontend SERİ 04

Sass Module Sistemi: @use, @forward, Namespace, Private Member ve @import'tan Migration

@use her dosyayı namespace'li ve bir kez yükler, private member'larla public API'yi çizer; @forward ile index dosyası, !default ve with() ile kütüphane konfigürasyonu gelir. @import'un global namespace yüzünden marka rengini nasıl ezdiğini ve CSS'i nasıl iki kez ürettiğini gösteriyor, ağacı sass-migrator ile taşıyor ve Angular'da includePaths ile CSS üretmeyen bir abstracts kuruyoruz; CSS üreten abstracts her component'e kopyalanıyor.

14 Kas 2026 11 dk 12
Mixin, Function, @extend ve Control Flow: @if, @each, @for ile Tekrarı Kaldırmak
Frontend SERİ 03

Mixin, Function, @extend ve Control Flow: @if, @each, @for ile Tekrarı Kaldırmak

Parametre, media query ya da selector üretmek gerekiyorsa mixin, gerçekten aynı olan kurallar için placeholder ile @extend, değer hesaplamak için @function kullan; map ve @each ile tekrar eden kuralları veriden üret. Bookstore'a breakpoint mixin'i ve stok badge'leri ekliyor, slash division'ın neden 12px/2 gibi geçersiz CSS ürettiğini, @extend'in media query'de kırıldığını ve her şeyi mixin yapmanın gzip öncesi ve sonrası maliyetini ölçüyoruz.

14 Kas 2026 12 dk 11
Sass Temelleri: Variable, Nesting, Parent Selector (&), Interpolation ve Placeholder
Frontend SERİ 02

Sass Temelleri: Variable, Nesting, Parent Selector (&), Interpolation ve Placeholder

Sass değişkeni derleme anında bir değerdir ve derleme bitince yok olur; custom property ise runtime'da yaşar, bu yüzden ikisini birlikte kullanırken değeri #{} ile aktarmak gerekir, yoksa tarayıcıya "$brand" metni gider. Bookstore kartını & ile BEM'e çeviriyor, Sass nesting'inin native nesting'den farklı specificity ürettiğini iki motorda ölçüyor ve derin nesting'in çıktıyı nasıl şişirdiğini gösteriyoruz.

14 Kas 2026 11 dk 12
Sass 2026'da Hâlâ Gerekli mi? Native CSS ile Karşılaştırma ve Dart Sass Kurulumu
Frontend SERİ 01

Sass 2026'da Hâlâ Gerekli mi? Native CSS ile Karşılaştırma ve Dart Sass Kurulumu

Evet, ama eskisi kadar her yerde değil: değişken, nesting ve renk/matematik artık native CSS'te var; mixin, döngüyle kural üretme, map'ler, module sistemi ve derleme zamanı hataları ise hâlâ yalnız Sass'ta. Ham SCSS'in tarayıcıda neden tek kural bırakmadığını ölçüyor, sass ile sass-embedded'i karşılaştırıyor ve Sass'ı Angular, Vite ve ASP.NET Core'a ekliyoruz.

14 Kas 2026 12 dk 12
Blog Haritası