ViraStack
  • Akademi
  • Hakkında
  • Destek
Genel BakışKaynaklarKatkı
ViraStack

Frontend geliştiricileri için DX odaklı araç seti: starter’lar, ajan kuralları, form hook’ları ve rehber.

Ürünler

  • ViraStack Start
  • ViraStack AI
  • ViraStack Mask
  • ViraStack Password
  • ViraStack Guide

Keşfet

  • Akademi
  • Hakkında
  • Marka
  • Destek

© 2026 ViraStack.

Açık kaynak · MIT

Web Temelleri

04 / 07

CSS

Seçiciler, kutu modeli ve sayfa düzeni.

CSS Nedir

CSS, HTML ile kurulan yapının nasıl görüneceğini anlatan dildir. Her kural bir seçici ve süslü parantez içinde property: value; çiftlerinden oluşur. Seçici hangi elementlerin stilleneceğini, özellikler de neyin değişeceğini söyler.

.card {
  padding: 1rem;
  color: #1f2937;
}

Seçiciler

En sık kullanılan seçiciler şunlardır:1

SeçiciÖrnekNeyi seçer
Typeh1Tüm <h1> elementlerini
Class.cardclass="card" olan her elementi
ID#headerid="header" olan tek elementi
Universal*Her elementi
Listeh1, .titleVirgülle ayrılan seçicilerin hepsini

Class bir sayfada istendiği kadar kullanılabilir, ID ise sayfada bir kez kullanılır.1 Seçiciler combinator ile birleştirilerek elementin HTML'deki konumuna göre seçim yapılır: nav a nav içindeki tüm linkleri, ul > li yalnızca doğrudan çocukları, h2 + p başlıktan hemen sonraki paragrafı seçer.2 :hover gibi pseudo-class'lar elementin durumunu, ::before gibi pseudo-element'ler elementin bir parçasını seçer.2

Hangi Kural Kazanır

Aynı elemente birden çok kural uyduğunda tarayıcı hangisinin uygulanacağına üç kavramla karar verir: cascade, specificity ve inheritance.3

Cascade

Cascade, çakışan kurallar arasında kazananı seçen algoritmadır.4 CSS spesifikasyonuna göre tarayıcı sırasıyla şunlara bakar: kuralın kaynağı ve !important olup olmadığı, style attribute ile yazılmış olup olmadığı, hangi cascade layer'da durduğu, seçicinin specificity'si ve son olarak kodda hangisinin sonra geldiği.5 Günlük işte çakışmaların çoğu son iki adımda çözülür: specificity eşitse sonra yazılan kural kazanır.4

Specificity

Specificity, seçicinin ne kadar "özel" olduğunu gösteren üç parçalı bir puandır: ID sayısı, class/attribute/pseudo-class sayısı, type/pseudo-element sayısı. Puanlar soldan sağa karşılaştırılır ve en yüksek puanlı kural kazanır; * puana bir şey eklemez.6

#header a     { color: red; }   /* (1, 0, 1) kazanır */
.nav .link    { color: blue; }  /* (0, 2, 0) */
nav a         { color: green; } /* (0, 0, 2) */

Soldan karşılaştırıldığı için tek bir ID, kaç class olursa olsun class'lardan oluşan bir seçiciyi yener. Bu yüzden ID ile stil vermek ve !important ile kural zorlamak, ileride o kuralı ezmeyi zorlaştırır. Gerçek sitelerde bu sık görülür: 100.000'den fazla sitenin incelendiği bir araştırmada ortanca site 154 !important içeriyordu.7

Yap

  • Stil için class kullanın, seçicileri kısa tutun.

Yapma

  • Bir kuralı ezmek için ID ya da !important eklemeyin.

Büyük projelerde bu sorunu çözmek için cascade layers (@layer) vardır: layer sırası specificity'den önce gelir, böylece bir stil grubunun önceliği seçici yarışına girmeden belirlenir.8

Inheritance

Bazı özellikler ebeveynden çocuğa miras geçer, bazıları geçmez. color ve font özellikleri miras alınır; width, margin, border alınmaz.3 Bu yüzden body'ye verilen color sayfanın tamamına yayılır.

Kutu Modeli

Tarayıcı her elementi bir kutu olarak çizer. Kutu içten dışa dört katmandan oluşur: content (içerik), padding (iç boşluk), border (kenarlık) ve margin (dış boşluk).9

CSS kutu modeli: içte content, onu saran padding, onun dışında border ve en dışta margin katmanı

Varsayılan modelde width yalnızca içeriğe uygulanır, padding ve border üstüne eklenir. width: 200px ve padding: 20px verilen bir kutu ekranda 240px yer kaplar. box-sizing: border-box ile width border dahil tüm kutuyu kapsar, hesap tahmin edilebilir olur.10

*,
*::before,
*::after {
  box-sizing: border-box;
}

Kutunun dışa nasıl davrandığını display belirler. Block kutular yeni satırda başlar ve width/height alır (div, p, h1). Inline kutular satır içinde akar; width ve height uygulanmaz, dikey margin ve padding çevredeki satırları itmez (span, a).9 Üst üste gelen iki block elementin dikey margin'leri toplanmaz, birleşir ve büyük olan kalır; buna margin collapsing denir.9

Birimler

px gibi mutlak birimler her zaman aynı boyutu verir. Göreli birimler ise bir başka değere göre hesaplanır, bu yüzden web'in esnek yapısına daha iyi uyar.11

BirimNeye göre
remKök elementin (html) font boyutu, varsayılan 16px
emElementin font boyutu; font-size'da kullanılırsa ebeveynin
%Ebeveynin ilgili değeri (ör. genişlik)
vw / vhViewport genişliğinin / yüksekliğinin %1'i
dvhMobil tarayıcı çubukları açılıp kapandıkça değişen viewport yüksekliği
chFontta "0" karakterinin genişliği

Font boyutunu px ile vermek, kullanıcının tarayıcıda seçtiği yazı boyutunu yok sayar; rem bu tercihe uyar.11 Okunabilir satır uzunluğu için max-width: 60ch gibi bir değer işe yarar.11 Değerler calc(100% - 2rem) gibi hesaplamalarla birleştirilebilir.12

Gerçek sitelerde px hâlâ her yerde: sitelerin %98,28'i px, %80,15'i rem kullanıyor.7

Flexbox ve Grid

Modern sayfa düzeni iki araçla kurulur. Flexbox tek boyutlu düzen içindir: öğeleri bir satır ya da sütun boyunca dizer. Grid iki boyutludur: satır ve sütunları birlikte kontrol eder.13

Flexbox

Flex container'ın bir ana ekseni (öğelerin dizildiği yön) ve ona dik bir çapraz ekseni vardır. justify-content ana eksende, align-items çapraz eksende hizalar.14 Varsayılan flex-direction: row'da ana eksen yatay, çapraz eksen dikeydir; bu yüzden align-items öğeleri dikeyde hizalar. flex-direction: column dendiğinde eksenler yer değiştirir: justify-content dikeyde, align-items yatayda çalışır.15

.toolbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 1rem;
}

flex: 1 bir öğenin kalan boşluğu paylaşmasını sağlar. Arka planda bu, başlangıç boyutunu (flex-basis), büyüme (flex-grow) ve küçülme (flex-shrink) oranını birlikte ayarlar.15

Grid

Grid, tek bir elementi satır ve sütunlara böler; çocuklar bu hücrelere yerleşir.16 fr birimi kalan boşluğu oranlı paylaştırır, repeat() ve minmax() sütun tanımını kısaltır.17

.products {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 1rem;
}

Bu örnekte sütunlar en az 200px olur ve ekrana sığdığı kadar sütun açılır; media query yazmadan responsive bir kart listesi elde edilir. Sayfa iskeleti için grid-template-areas ile alanlara isim verilebilir; alanlar dikdörtgen olmak zorundadır.17

İpucu

Öğeleri tek yönde dizecekseniz (menü, buton grubu) flexbox, satır ve sütunu birlikte kontrol edecekseniz (kart ızgarası, sayfa iskeleti) grid kullanın.13

2022 verisine göre flexbox mobil sayfaların %74'ünde, grid ise %12'sinde kullanılıyordu.18

Responsive Tasarım

Responsive tasarım, sayfanın her ekran boyutunda düzgün görünmesi ve rahat kullanılmasıdır.19 Üç parçası vardır:

  • Viewport meta etiketi: Mobil tarayıcının sayfayı küçültüp göstermesini engeller.20

  • Esnek düzen: Flexbox, grid ve göreli birimler.19

  • Media query: Belirli bir genişlikten sonra stili değiştirir.19

<meta name="viewport" content="width=device-width, initial-scale=1" />
.layout {
  display: grid;
  gap: 1rem;
}

@media (width >= 768px) {
  .layout {
    grid-template-columns: 240px 1fr;
  }
}

Bu yaklaşıma mobile-first denir: önce dar ekran için tek sütun yazılır, ekran genişledikçe sütun eklenir.19 Breakpoint'leri popüler cihaz boyutlarına göre değil, içeriğin bozulmaya başladığı genişliğe göre seçin.20

Custom Property

Custom property (CSS değişkeni), bir değeri bir kez tanımlayıp her yerde kullanmayı sağlar. Adı iki tire ile başlar, var() ile okunur.21

:root {
  --color-primary: #2563eb;
  --radius: 0.5rem;
}

.button {
  background: var(--color-primary);
  border-radius: var(--radius, 4px);
}

:root'ta tanımlanan değer tüm sayfada geçerli olur ve miras yoluyla çocuklara iner; bir bileşende yeniden tanımlanarak yalnızca orada değiştirilebilir.21 var()'ın ikinci değeri, değişken tanımlı değilse kullanılan yedektir.22 Tema ve dark mode gibi işlerin temeli budur.

Detaylı Öğrenmek İçin

  • Baştan sona kurs: web.dev'in ücretsiz Learn CSS kursu; nesting, container queries ve anchor positioning gibi yeni konular da var.23

  • Responsive tasarım: web.dev'in Learn Responsive Design kursu.24

  • Alıştırmalı yol: MDN'in CSS styling basics modülü, ardından CSS layout modülü.25

  • Sağlam düzen alışkanlıkları: Ahmad Shadeed'in Defensive CSS ipuçları; uzun metin, bozulan görsel gibi beklenmedik içerikte kırılmayan düzen.26

  • Konuşma: Miriam Suzanne'ın cascade ve cascade layers konuşması (JSHeroes 2025).27

  • Konuşma: Jen Simmons'ın web'de sayfa düzeninin nasıl değiştiğini anlattığı konuşma (View Source 2018).28

Kaynaklar

  • 1DokümanMDN: Basic selectors

    Type, class, ID, universal ve selector list; ID'nin sayfada bir kez kullanılması.

  • 2Dokümanweb.dev Learn CSS: Selectors

    Basit seçiciler, pseudo-class/element ve combinator'lar.

  • 3DokümanMDN: Handling conflicts

    Cascade, specificity ve inheritance; hangi özelliklerin miras alındığı.

  • 4Dokümanweb.dev Learn CSS: The cascade

    Cascade'in tanımı ve sıra, specificity, origin, importance adımları.

  • 5DokümanCSSWG: CSS Cascading and Inheritance Level 5

    Cascade sıralamasının resmi tanımı (§6.1).

  • 6Dokümanweb.dev Learn CSS: Specificity

    Üç parçalı specificity puanı ve soldan sağa karşılaştırma.

  • 7AraştırmaProject Wallace: The CSS Selection 2026

    100.000'den fazla sitenin CSS'i; `!important` ve birim kullanımı.

  • 8DokümanMDN: Cascade layers

    `@layer` ile stil gruplarını sıralamak; layer önceliğinin specificity'yi yenmesi.

  • 9DokümanMDN: The box model

    Block ve inline kutular, kutu katmanları ve margin collapsing.

  • 10Dokümanweb.dev Learn CSS: Box Model

    Kutu katmanları ve `box-sizing: border-box`.

  • 11Dokümanweb.dev Learn CSS: Sizing Units

    Mutlak ve göreli birimler, `rem`/`em`, viewport birimleri ve `ch`.

  • 12DokümanMDN: Values and units

    Uzunluk birimleri, yüzde, renk yazımları ve `calc()`.

  • 13Dokümanweb.dev Learn CSS: Layout

    Flexbox tek boyut, grid iki boyut; block ve inline davranışı.

  • 14DokümanMDN: Flexbox

    Ana ve çapraz eksen, `flex` kısayolu ve hizalama.

  • 15MakaleJosh W. Comeau

    : — Etkileşimli örneklerle ana eksen, `flex-basis`, `flex-grow`, `flex-shrink`.

  • 16MakaleJosh W. Comeau

    : — Track, `fr` ve template areas etkileşimli örneklerle.

  • 17DokümanMDN: CSS grid layout

    `fr`, `repeat()`, `minmax()`, `gap` ve `grid-template-areas`.

  • 18AraştırmaWeb Almanac 2022: CSS

    Flexbox, grid ve custom property kullanım oranları.

  • 19DokümanMDN: Responsive web design

    Responsive tasarımın tanımı, esnek düzen, media query ve mobile-first.

  • 20Dokümanweb.dev Learn Responsive Design: Media queries

    Viewport meta etiketi ve içeriğe göre breakpoint seçimi.

  • 21Dokümanweb.dev Learn CSS: Custom Properties

    `--` söz dizimi, `var()`, `:root` ve miras.

  • 22DokümanMDN: Using CSS custom properties

    `var()` yedek değeri ve custom property mirası.

  • 23Dokümanweb.dev: Learn CSS

    Baştan sona ücretsiz CSS kursu.

  • 24Dokümanweb.dev: Learn Responsive Design

    Düzen, tipografi, responsive görsel ve tema üzerine ücretsiz kurs.

  • 25DokümanMDN: CSS styling basics

    Seçicilerden hata ayıklamaya alıştırmalı modül.

  • 26MakaleAhmad Shadeed

    : — Beklenmedik içerikte bozulmayan düzen için kısa ipuçları.

  • 27VideoMiriam Suzanne

    : — Cascade neden böyle çalışır ve cascade layers.

  • 28VideoJen Simmons

    : — Web'de sayfa düzeni anlayışının değişimi.

Bu sayfayı düzenle

Son güncelleme tarihi: 17 Ekim 2026

Önceki adım03. HTMLSonraki adım05. Tailwind