İçeriğe geç
XDD.baby Yazılım Öğrenme
Sözlük Hata rehberi 0/56

Blok 3 · Ders 20

CSS temelleri: renk, yazı, kutu modeli

Seçiciler, renkler, yazı tipleri, kutu modeli (margin, border, padding), birimler ve özgüllük; geliştirici araçlarında canlı düzenleme.

Bu dersin sonunda

  • Bir CSS dosyasını <link> ile sayfana bağlayabilir, <style> etiketi ve style niteliğiyle farkını açıklayabilirsin
  • Etiket, sınıf, kimlik, birleşik, torun ve :hover seçicileriyle istediğin öğeyi seçebilirsin
  • Renkleri ad, hex, rgb ve hsl ile yazabilir; yazı tipini, boyutunu ve satır yüksekliğini ayarlayabilirsin
  • Bir kutunun ekrandaki genişliğini içerik, padding ve border'dan hesaplayabilir, box-sizing: border-box ile işini kolaylaştırabilirsin
  • px, rem, %, vw ve vh arasından duruma uygun birimi seçebilirsin
  • Çalışmayan bir kuralın sebebini kalıtım, özgüllük ve sırayla açıklayıp geliştirici araçlarında bulabilirsin
Bu sayfada
  1. CSS ne işe yarar?
  2. CSS'i sayfaya bağlamak
  3. Bir CSS kuralının parçaları
  4. Seçiciler: kural kime uygulanacak?
  5. Renkler
  6. Yazı: yazı tipi, boyut, satır yüksekliği
  7. Kutu modeli: her öğe bir kutudur
  8. Birimler: px, rem, %, vw, vh
  9. Hangi kural kazanır? Kalıtım, özgüllük ve sıra
  10. Geliştirici araçlarında CSS denemek
  11. Kartın son hâli
  12. Sık hatalar: CSS sessizce görmezden gelir
  13. Görevler
  14. Kendini sına
  15. Kayıt noktası

Ders 19'da sayfanın iskeletini kurdun, ama tarayıcıda eski bir belge gibi görünüyordu: beyaz zemin, Times New Roman yazı, mavi bağlantılar. Bu derste o iskelete görünüm vereceksin: renkleri, yazıları ve boşlukları ayarlayacak, bir kutunun ekranda kaç piksel tutacağını hesaplayacak ve "yazdığım kural neden çalışmıyor?" sorusunu geliştirici araçlarıyla kendin cevaplayacaksın. Sonunda elinde, sıfırdan boyadığın bir şampiyon kartı olacak.

CSS ne işe yarar?

HTML bir şeyin ne olduğunu söyler: bu bir başlık, bu bir düğme. Nasıl görüneceğini söylemez; o iş CSS'indir (Cascading Style Sheets, "basamaklı stil sayfaları"). Aşağıdaki kartta tek satır CSS yok; gördüğün her şey tarayıcının varsayılan stilleri.

127.0.0.1:5500/index.html

Tarayıcı her sayfaya kendiliğinden birkaç kural uygular: gövdenin kenarlarında 8 piksel boşluk, 16 piksellik Times New Roman, 32 piksellik kalın h1, maddelerde 40 piksel girinti. Senin CSS'in bu varsayılanların üstüne yazılır. Aynı kart, bu derste yazacağın CSS ile:

127.0.0.1:5500/index.html

İki penceredeki <body> harfi harfine aynı; farkı yaratan, <head>'e eklenen birkaç <link> satırı ve 51 satırlık bir CSS dosyası. Dersin sonunda o dosyanın her satırını kendin yazmış olacaksın. Düğmenin üstüne fareyle gelmeyi de dene.

CSS'i sayfaya bağlamak

Proje klasörü

C:\kod içinde sampiyon-karti adında yeni bir klasör oluştur, VS Code'da File → Open Folder ile aç ve içinde iki dosya oluştur: index.html ve stil.css. index.html'e aşağıdakini yaz. Ders 19'daki iskeletten farkı 7. satır ve etiketlerdeki class ile id nitelikleri; ikisinin ne işe yaradığını seçiciler bölümünde göreceksin.

index.html
<!doctype html><html lang="tr"><head>    <meta charset="utf-8">    <meta name="viewport" content="width=device-width, initial-scale=1">    <title>Ahri kartı</title>    <link rel="stylesheet" href="stil.css"></head><body>    <main>        <article class="kart" id="ahri">            <h1 class="ad">Ahri</h1>            <p class="rol">Büyücü · Orta koridor</p>            <p>Dokuz kuyruklu bir tilki. Hızlı, çevik ve tehlikeli.</p>            <ul class="degerler">                <li>Can: 590</li>                <li>Mana: 418</li>                <li>Hareket hızı: 330</li>            </ul>            <button class="dugme">Şampiyonu seç</button>        </article>    </main></body></html>

Vurgulu <link> satırı sayfaya dışarıdan bir dosya bağlar:

  • rel="stylesheet": bağlanan dosya "bir stil sayfası" (relationship, ilişki).
  • href="stil.css": dosyanın yolu. Ders 19'daki göreli yol kuralı geçerli: yol index.html'in klasörüne göre okunur. Dosya css adlı bir alt klasörde olsaydı css/stil.css yazardın.

<link>'in kapanış etiketi yoktur, tıpkı <img> gibi. <head>'e konur, çünkü tarayıcı sayfayı çizmeden önce stili bilmek ister. Şimdi stil.css'e ilk kuralını yaz:

stil.css — sampiyon-karti — Visual Studio Code
stil.css
body {    background-color: #0a1428;    color: #f0e6d2;}
Ln 1, Col 1Spaces: 4UTF-8CSS

#0a1428 koyu lacivert, #f0e6d2 krem rengi. Bu yazımı renkler bölümünde çözeceğiz.

Kaydet ve sayfayı yerel sunucuyla aç (Live Server'da Go Live, ya da npx serve). Zemin lacivert, yazılar krem rengiyse bağlantı çalışıyor. Sayfa beyaz kaldıysa sık hatalar bölümüne bak.

Tarayıcı CSS'i nasıl alır?

CSS dosyası sayfanın içinde değil, ayrı bir dosyadır; tarayıcı onu Ders 18'de gördüğün türden ayrı bir istekle alır.

Tarayıcı Sunucu index.html stil.css 1. GET /index.html 2. 200 + HTML 3. HTML'in içinde <link>'i görür 4. GET /stil.css 5. 200 + CSS dosya yoksa: 404, stil gelmez 6. sayfayı boyar
Şekil 20.1 Tarayıcı önce HTML'i alır, içinde <link> görünce CSS dosyasını ayrıca ister.

Sonuç: href'teki yol yanlışsa HTML yine gelir ama CSS gelmez. Sayfa stilsiz açılır ve hiçbir hata penceresi çıkmaz.

Üç yol: <link>, <style>, style

HTML
<!-- 1. Ayrı dosya: <head> içine tek satır --><link rel="stylesheet" href="stil.css"> <!-- 2. Aynı sayfada: <head> içinde <style> etiketi --><style>    body {        background-color: #0a1428;    }</style> <!-- 3. Tek bir öğenin üstünde: style niteliği --><p style="color: gold;">Bu paragraf altın sarısı</p>
YolNereye yazılırNe zaman
<link> ve ayrı bir .css dosyası<head> içine tek satırGerçek projelerde her zaman
<style> etiketiAynı HTML'in <head> bölümüTek sayfalık küçük denemeler
style niteliğiTek bir öğenin açılış etiketiYalnızca hızlı bir deneme; kalıcı koda koyma

Neden hep ayrı dosya? On sayfalık bir sitede hepsi aynı stil.css'i bağlar; başlık rengini tek satırda değiştirirsin (Ders 3'teki kendini tekrar etme ilkesi). Tarayıcı dosyayı bir kez indirir, sonraki sayfalarda deposundaki kopyayı, yani önbelleği kullanır. HTML içerikle, CSS görünümle uğraşır; Ders 17'de kodu modüllere bölmenle aynı düşünce.

style niteliği ise kuralı tek bir öğenin içine gömer: aynı görünüm için satırı her öğeye kopyalarsın ve değiştirirken hepsini tek tek ararsın.

Bir CSS kuralının parçaları

Bir CSS dosyası kurallardan oluşur. Her kural iki parçadır: seçici (kime?) ve süslü parantezin içindeki bildirimler (ne yapılsın?).

.kart { color: white; padding: 24px; } seçici kural kime uygulanacak özellik neyi değiştiriyoruz değer neye çeviriyoruz { } : ; yazım işaretleri color özellik : white değer ; = bir bildirim bir kuralda istediğin kadar olur
Şekil 20.2 Bir CSS kuralı: seçici, süslü parantez ve içinde iki bildirim. Alttaki satır tek bir bildirimi parçalarına ayırıyor.

Şekildeki kural: "kart sınıfındaki her öğenin yazısı beyaz olsun, içinde 24 piksel boşluk olsun."

Yazım kuralları:

  • Özellik adları İngilizcedir, sözcükleri tireyle ayrılır: background-color. JavaScript'teki camelCase (backgroundColor) burada çalışmaz.
  • Her bildirim ; ile biter. Sondakinde zorunlu değil ama hep koy; altına satır ekleyince unutmuş olmazsın.
  • Birim sayıya bitişik yazılır: 24px doğru, 24 px yanlış.
  • Girinti ve satır sonları tarayıcı için önemsizdir; yine de her bildirimi ayrı satıra, 4 boşluk girintiyle yaz. Seçicinin içindeki boşluk ise anlam taşır; seçicilerde göreceksin.
  • Yorum /* ... */ ile yazılır. JavaScript'teki // CSS'te yorum değildir (sık hatalarda göreceksin).
CSS
/* Kartın genel görünümü */.kart {    color: white;    padding: 24px;}

Seçiciler: kural kime uygulanacak?

Seçici, kuralın sayfadaki hangi öğelere uygulanacağını söyler. Temel seçicileri kartın HTML'i üstünde görelim.

Etiket seçicisi

Etiketin adını yazarsın, o etiketteki bütün öğeler seçilir:

CSS
p {    color: dimgray;}

Karttaki iki paragraf da gri olur. Çoğu zaman daha seçici olman gerekir.

Sınıf seçicisi

HTML'de bir öğeye class niteliğiyle bir grup adı takarsın, CSS'te adın başına nokta koyarak seçersin:

HTML
<p class="rol">Büyücü · Orta koridor</p>
CSS
.rol {    font-weight: bold;}
  • Aynı sınıfı istediğin kadar öğeye verebilirsin; hepsi aynı görünür.
  • Bir öğeye boşlukla ayırarak birden çok sınıf verebilirsin: class="dugme ana" öğesine hem .dugme hem .ana uygulanır.
  • Sınıf adlarını küçük ve İngilizce harflerle yaz, sözcükleri tireyle ayır: ana-dugme.

Kimlik seçicisi

id niteliği bir öğeye sayfada tek olan bir ad, yani kimlik verir (Ders 19'da <label for="…"> ile kullandın). CSS'te başına # koyarsın:

CSS
#ahri {    background-color: aliceblue;}

Aynı id sayfada bir kez kullanılabildiği için #ahri kuralını ikinci bir karta veremezsin; özgüllükte göreceğin bir sebep daha var. Kural: stil için sınıf kullan, id'yi sayfa içi bağlantılara ve Ders 22'deki JavaScript'e sakla. Örneğin kutu modeli bağlantısı, bu sayfadaki o id'li başlığa gider.

Seçicileri birleştirmek

Seçicileri üç yolla birleştirebilirsin; aradaki işaret anlamı değiştirir:

YazımAnlamı
h1, .rolvirgül: h1'ler ve .rol'lar
p.rolbitişik: hem p hem rol sınıflı
.kart liboşluk: .kart'ın içindeki li'ler

Kartta ilki başlığı ve rol satırını, ikincisi yalnız rol satırını (rol sınıflı bir span olsaydı onu almazdı), üçüncüsü üç değer satırını seçer.

Boşluklu yazımı anlamak için HTML'i bir soy ağacı gibi düşün. Bir öğeyi saran öğe onun ebeveyni, hemen içindekiler çocukları, çocukların içindekiler de torunlarıdır. Kartta ul, li'lerin ebeveyni; li'ler ul'un çocukları ve kartın torunları.

Boşluk "herhangi bir derinlikte içinde" demek: çocuk da olur, torun da. li kartın çocuğu değil torunu, arada ul olması fark etmez. Bu yüzden boşluklu yazıma torun seçicisi (descendant selector) denir.

Bitişik yazım p.rol ise bir birleşik seçicidir (compound selector): iki koşul aynı öğede aranır. Dikkat: .kart, li "kart ve bütün li'ler", li.kart ise "kart sınıflı li" demek. Yazımları benzer, anlamları çok farklı.

article.kart h1.ad p.rol p ul button li li li ul: li'lerin ebeveyni li: ul'un çocuğu, kartın torunu .kart li: kartın içindeki bütün li'ler, araya ul girse bile
Şekil 20.3 .kart li seçicisi kartın HTML ağacında aşağı iner ve içerideki bütün li'leri yakalar.

Hepsini birlikte dene: deneme.html'in <style>'ına aşağıdaki CSS'i, <body>'sine kartın <article> bölümünü yaz.

deneme.html · <style> içine
p {    color: dimgray;} .rol {    font-weight: bold;} #ahri {    background-color: aliceblue;} .kart li {    color: darkgreen;}
127.0.0.1:5500/deneme.html

Rol satırı p'den gri rengi, .rol'dan kalınlığı aldı: çakışmayan bildirimler toplanır. Çakışınca ne olacağını "Hangi kural kazanır?" bölümünde göreceksin.

:hover: fare üstündeyken

Bazı seçiciler öğenin bir durumunu seçer. En çok kullanılanı :hover: "fare bu öğenin üstündeyken".

deneme.html · <style> içine
.dugme {    background-color: royalblue;    color: white;} .dugme:hover {    background-color: midnightblue;    cursor: pointer;}
deneme.html · <body> içine
<button class="dugme">Şampiyonu seç</button>
127.0.0.1:5500/deneme.html
Fareyi düğmenin üstüne getir: zemin koyulaşır, imleç el işaretine döner.

İki nokta seçiciye bitişik yazılır. Boşluklu .dugme :hover bambaşka bir şey seçer: ".dugme'nin içinde, fare üstündeki herhangi bir öğe". Düğmenin içinde başka öğe olmadığı için hiçbir şey değişmez. cursor: pointer imleci el işaretine çevirip "buraya tıklanır" der.

Renkler

Renk alan özellikler: color (yazı), background-color (zemin) ve kutu modelinde göreceğin border (kenarlık). Rengi dört yazımla verebilirsin; aşağıdaki dördü de aynı rengi verir:

YazımÖrnek
Adrebeccapurple
Hex#663399
rgbrgb(102 51 153)
hslhsl(270 50% 40%)

Tarayıcı dördünü de aynı biçimde saklar: geliştirici araçlarının Computed sekmesinde hepsi rgb(102, 51, 153) görünür. Nasıl okunduklarına sırayla bakalım:

  • Ad: rebeccapurple, gold, teal, crimson gibi hazır adlar; CSS'te 150 kadar var. Hızlı denemeler için iyidir, ama seçenek azdır.
  • Hex: Ekrandaki her nokta kırmızı, yeşil ve mavi ışığın karışımıdır. Hex, üç ışığın gücünü ikişer onaltılık haneyle verir: 0–9'dan sonra a (10) … f (15) gelir, 00 0, ff 255 demektir. Tablodaki #663399'un çiftleri, yani 66, 33 ve 99, onluk sayıyla 102, 51 ve 153: rgb satırındaki sayıların aynısı. #000000 siyah, #ffffff beyaz, #ff0000 kırmızı. Çiftler aynı hanelerdense kısalır: #639, #fff. Tasarım programları renkleri çoğunlukla hex verir.
  • rgb: Aynı üç ışık (kırmızı, yeşil, mavi), 0–255 arası onluk sayılarla. Eski kodlarda virgüllüsünü görürsün, rgb(102, 51, 153); o da geçerli. Eğik çizgiyle saydamlık eklenir: rgb(0 0 0 / 50%) yarı saydam siyah.
  • hsl: İnsan için en kolayı. Ton renk çemberindeki açıdır (0 kırmızı, 120 yeşil, 240 mavi); doygunluk 0% gri, 100% en canlı; açıklık 0% siyah, 50% rengin kendisi, 100% beyaz.

hsl'in kolaylığı: aynı rengin açık ya da koyu tonunu yalnızca son sayıyı değiştirerek üretirsin. Düğmenin :hover rengini böyle seçeceğiz.

127.0.0.1:5500/deneme.html
Üst sıra: doygunluk %70 ve açıklık %50 sabit, yalnızca ton değişiyor. Alt sıra: ton 270 ve doygunluk %50 sabit, yalnızca açıklık değişiyor.

Okunabilirlik: kontrast

Yazı ile zemin arasındaki fark yetmezse metin okunmaz. Kabul gören ölçü (WCAG) normal yazı için en az 4,5'e 1 kontrast oranı.

Ölçmek için geliştirici araçlarında bir color değerinin yanındaki renk karesine tıkla: renk seçicideki Contrast ratio (Türkçe arayüzde Kontrast oranı) bölümü oranı ve yeterli olup olmadığını gösterir. Krem yazımız lacivert zeminde 14,8'e 1, kartın koyu gri zemininde 12,8'e 1; gray ise beyaz zeminde 3,9'da kalır. Bu yüzden örneklerde gri için daha koyu dimgray'i (5,5'e 1) kullanıyoruz.

Yazı: yazı tipi, boyut, satır yüksekliği

Yazı tipi listesi

stil.css'teki body kuralına bir satır ekle:

stil.css
body {    background-color: #0a1428;    color: #f0e6d2;    font-family: "Segoe UI", Arial, sans-serif;}

Yazı tipi ziyaretçinin bilgisayarında kurulu olmalı: Segoe UI Windows'ta var, Mac'te ve Android'de yok. Bu yüzden font-family'ye virgülle ayrılmış bir liste verirsin; tarayıcı soldan başlayıp bulduğu ilkini kullanır (Windows'ta Segoe UI, Mac'te Arial). Listenin sonuna hep bir genel aile koy; hiçbiri bulunamazsa tarayıcı o aileden kendi yazı tipini seçer:

Genel aileNasıl bir yazıÖrnek
sans-serifharf uçları düz, sadeArial, Segoe UI
serifharf uçlarında küçük çıkıntılarTimes New Roman, Georgia
monospaceher harf aynı genişlikteConsolas; kod yazısı

Adında boşluk olan yazı tiplerini tırnağa al: "Segoe UI". Genel aileler ise tırnaksız yazılır: "sans-serif" yazarsan tarayıcı onu "adı sans-serif olan bir yazı tipi" sanar; listede başka bir yazı tipi de bulunamazsa Chrome'da Times New Roman'a düşersin.

Google Fonts: herkeste aynı yazı tipi

Ziyaretçide olmayan bir yazı tipini kullanmak için onu sayfanla birlikte göndermen gerekir. En kolay yol Google'ın ücretsiz servisi Google Fonts:

  1. fonts.google.com'da bir yazı tipi seç. Başlık için Cinzel'i kullanacağız.
  2. Get font, ardından Get embed code'a tıkla; <link> satırları çıkar. (Arayüz değişmiş olabilir; aradığın şey bu satırlar.)
  3. Satırları <head> bölümüne, kendi stil.css bağlantının üstüne yapıştır.
  4. CSS'te yazı tipini adıyla kullan, sonuna yine genel aileyi koy.
index.html
<head>    <meta charset="utf-8">    <meta name="viewport" content="width=device-width, initial-scale=1">    <title>Ahri kartı</title>    <link rel="preconnect" href="https://fonts.googleapis.com">    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>    <link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@700&display=swap" rel="stylesheet">    <link rel="stylesheet" href="stil.css"></head>
stil.css
.ad {    font-family: "Cinzel", serif;}

İlk iki <link> "şu sunuculara şimdiden bağlan" der, yazı tipi daha çabuk gelir. Üçüncüsü yazı tipinin CSS dosyasıdır: wght@700 "700 kalınlığını ver", display=swap "yazı tipi gelene kadar metni yedekle göster" demek. Google Fonts'un verdiği satırda wght@400..900 gibi bir aralık görebilirsin; o, bütün kalınlıkları getirir. Biz yalnızca kullanacağımız 700'ü istedik; ikisi de çalışır.

127.0.0.1:5500/deneme.html
Başlık taşa oyulmuş yazıyı andıran, hep büyük harf gibi görünen Cinzel ile çıkıyorsa yazı tipi indi. Times New Roman gibi sıradan çıkıntılı harflerle çıkıyorsa tarayıcı listedeki yedeğe, serif ailesine geçmiştir.

İnternet yoksa ya da adres yanlışsa sayfa bozulmaz, yalnızca yedek yazı tipiyle görünür; listenin işi bu.

Boyut, kalınlık, satır yüksekliği

stil.css'e devam et:

stil.css
body {    background-color: #0a1428;    color: #f0e6d2;    font-family: "Segoe UI", Arial, sans-serif;    line-height: 1.6;} .ad {    font-family: "Cinzel", serif;    font-size: 32px;} .rol {    font-size: 14px;    text-transform: uppercase;}
  • font-size: yazının boyu, varsayılanı 16 piksel. Birimler bölümünde px'ten daha iyi bir birim göreceğiz.
  • font-weight: kalınlık; 400 normal, 700 (ya da bold) kalın. h1 zaten kalın. Yazı tipinde o kalınlık yoksa tarayıcı en yakın kalınlığı kullanır ya da harfleri kendisi kalınlaştırır ve yazı kaba görünür; Google Fonts'tan 700'ü istememizin sebebi bu.
  • line-height: satırların arası. Birimsiz yaz: 1.6 "yazı boyunun 1,6 katı" demek; 16 piksellik yazıda 25,6, 32 piksellik başlıkta kendiliğinden 51,2 piksel olur. Okuma metinlerinde 1,5–1,7 rahattır.
  • text-transform: uppercase: yazıyı ekranda büyük harfe çevirir; HTML'deki metin değişmez. text-align (left, center, right) ise satırları hizalar.

Kutu modeli: her öğe bir kutudur

Tarayıcı her öğeyi dikdörtgen bir kutu olarak çizer: başlık, paragraf, düğme. Kutunun boyutu ve komşularıyla arası dört katmanla belirlenir. Katmanları karıştırırsan yazı kenara yapışır, kartlar birbirine değer ve "240 yazdım, neden 288 oldu?" diye düşünürsün.

margin 16 16 16 16 border 4 4 4 4 padding 20 20 20 20 içerik (content) width: 240 kenarlıktan kenarlığa: 4 + 20 + 240 + 20 + 4 = 288
Şekil 20.4 Kutu modeli: dıştan içe margin, border, padding ve içerik. Geliştirici araçları da bu çizimi kullanır.

İçeriden dışarıya:

  1. İçerik (content): yazı ya da resim. width normalde yalnızca bunun genişliğidir.
  2. Padding (iç boşluk): içerikle kenarlık arası; zemin rengi buraya da yayılır.
  3. Border (kenarlık): kutunun çizgisi.
  4. Margin (dış boşluk): kenarlığın dışında, komşulara olan boşluk; her zaman saydamdır.

Genişliği hesaplamak

deneme.html · <style> içine
.kutu {    width: 240px;    padding: 20px;    border: 4px solid goldenrod;    margin: 16px;}

Bu kutu ekranda kaç piksel? 240 değil. Tarayıcı width'i yalnızca içeriğe uygular, padding ve kenarlığı iki yandan üstüne ekler: 4 + 20 + 240 + 20 + 4 = 288 piksel. Margin bu toplama girmez; kutunun etrafındaki boşluktur (onunla birlikte kapladığı yer 320 piksel).

Kısa yazımlar

YazımAnlamı
padding: 20pxdört yan 20 piksel
padding: 10px 20pxüst ve alt 10, sağ ve sol 20
padding: 10px 20px 30px 40pxüst, sağ, alt, sol: üstten başlayıp saat yönünde
padding-top: 10pxyalnız üst (-right, -bottom, -left da var)

margin da böyle yazılır. Kenarlık üç parçalıdır: border: 4px solid goldenrod → kalınlık, çizgi türü (solid düz, dashed kesik, dotted noktalı), renk. border-radius: 12px köşeleri yuvarlar.

box-sizing: border-box

Her kutuda toplama yapmak yorucu ve hataya açık. box-sizing: border-box yazınca width kenarlık dahil bütün kutunun genişliği olur; padding ve kenarlık içeriden düşülür. Örnekteki <div>, Ders 19'da semantik etiketlerin yanında adını duyduğun anlamsız genel kutu: article gibi bir şey anlatmaz, yalnızca stil vermek için kullanılır.

deneme.html · <style> içine
.kutu {    width: 240px;    padding: 20px;    border: 4px solid goldenrod;    margin-bottom: 16px;} .ic-dahil {    box-sizing: border-box;}
deneme.html · <body> içine
<div class="kutu">Varsayılan: ekranda 288 piksel</div><div class="kutu ic-dahil">border-box: ekranda 240 piksel</div>
127.0.0.1:5500/deneme.html

İkinci kutuda içerik 240 − 2 × 20 − 2 × 4 = 192 piksele indi, ama kutunun tamamı yazdığın gibi 240. Bu yüzden hemen her projenin CSS'i şu kuralla başlar:

stil.css
* {    box-sizing: border-box;}

* evrensel seçicidir: bütün öğeleri seçer. Bu kuralı stil.css'in en üstüne yaz.

Kartın kutusu

Şimdi kartın kendisi. stil.css'e ekle:

stil.css
.kart {    max-width: 320px;    margin: 0 auto;    padding: 24px;    background-color: #1e2328;    border: 2px solid #c8aa6e;    border-radius: 12px;}
  • max-width: 320px: "en fazla 320 piksel". Geniş ekranda 320 olur, dar ekranda sığacak kadar daralır; width yazsaydın taşardı.
  • margin: 0 auto: üst ve alt 0, sağ ve sol auto, yani "kalan boşluğu iki yana eşit paylaştır": kart ortaya gelir. Bunun için kartın sayfadan dar olması gerekir; max-width bunu sağlar.

Kutuyu geliştirici araçlarında görmek

  1. Kartın yazısız bir yerine (kenarına yakın boşluğa) sağ tıkla, İncele'yi seç (İngilizce: Inspect). Elements panelinde o öğe seçili gelir.
  2. <article class="kart" id="ahri"> satırının üstüne fareyle gel: sayfada margin turuncu, kenarlık sarı, padding yeşil, içerik mavi boyanır; yanındaki kutucuk öğenin boyutunu ve birkaç stilini gösterir.
  3. Sağdaki Styles sekmesinin en altına in ya da Computed sekmesine geç (Türkçe arayüzde Stiller ve Hesaplandı): yukarıdaki şekle benzeyen iç içe kutular orada. Bir sayıya çift tıklarsan değiştirebilirsin.
Lacivert sayfada Ahri kartı. Kartın iki yanında turuncu margin alanları, kenarında ince sarı kenarlık, içinde yeşil padding şeridi ve mavi içerik alanı var. Altta açılan kutucukta article#ahri.kart, 320 × 351.14, Color #F0E6D2, Font 16px Segoe UI, Background #1E2328, Margin 0px 64px, Padding 24px yazıyor.
Şekil 20.5 Gerçek Chromium ekran görüntüsü: Elements panelinde kartın üstüne gelince sayfa böyle boyanır.

Görüntüdeki kart dersin sonundaki hâliyle çekildi (gövdenin iki yanında 16'şar piksel iç boşluk var); senin sayfanda sayılar pencerenin genişliğine göre farklı çıkar. İki yandaki turuncu alanlar margin: 0 auto'nun bıraktığı boşluk: 480 piksellik pencerede gövdenin iç boşluklarından sonra kalan 448 pikselin 320'sini kart alıyor, artan 128 iki yana 64'er paylaşılıyor.

Kutucuktaki 320 × 351.14 kutunun kenarlık dahil boyutu; kutucuk hep bunu gösterir. border-box kullandığımız için bu genişlik, max-width'e yazdığın 320'nin ta kendisi.

Birimler: px, rem, %, vw, vh

Şu ana kadar hep px yazdın. Öbür birimler başka bir şeye göre ölçer:

BirimNeye göreEn iyi nerede
pxsabit; ekrandaki CSS pikseliince kenarlık, küçük ayrıntılar
remkök yazı boyu (varsayılan 16 px): 1.5rem = 24 pxyazı boyları ve boşluklar
%ebeveyn; genişlikte ebeveynin içerik genişliğiesnek genişlikler
vwpencere genişliğinin %1'ipencereye göre genişlik
vhpencere yüksekliğinin %1'iekranı dolduran giriş bölümleri

rem: kullanıcının ayarına saygı

rem (root em), kök öğenin, yani <html>'in yazı boyudur. Varsayılanı 16 piksel: 1rem 16, 1.5rem 24, 0.875rem 14 piksel. Hesap için 16'ya böl: 32 piksel = 2rem.

Neden uğraşalım? Görme güçlüğü olan biri Chrome'da Ayarlar → Görünüm → Yazı tipi boyutu'nu Büyük yapınca kök yazı 16'dan 20 piksele çıkar. rem ile yazdıkların onunla büyür, px ile yazdıkların yerinde sayar. (Sayfayı yakınlaştırmak, yani Ctrl basılıyken fare tekerleğini çevirmek, ikisini de büyütür; fark bu ayarda çıkar.) Ayarın yeri Chrome sürümüne göre biraz değişmiş olabilir; bulamazsan ayarlarda "yazı tipi boyutu" diye ara.

Kartı rem'e çevir; bu arada gövdenin 8 piksellik varsayılan margin'ini sıfırlayıp yerine rem cinsinden padding ver:

stil.css
body {    margin: 0;    padding: 2rem 1rem;    background-color: #0a1428;    color: #f0e6d2;    font-family: "Segoe UI", Arial, sans-serif;    line-height: 1.6;} .kart {    max-width: 320px;    margin: 0 auto;    padding: 1.5rem;    background-color: #1e2328;    border: 2px solid #c8aa6e;    border-radius: 12px;} .ad {    font-family: "Cinzel", serif;    font-size: 2rem;} .rol {    font-size: 0.875rem;    text-transform: uppercase;}

Kenarlık (2px) ve köşe (12px) px kalabilir; yazı büyüdü diye çizgi kalınlaşmasın. max-width de şimdilik px kalsın; mobil uyum Ders 21'de.

%: ebeveyne göre

width: 50% "ebeveynimin içerik genişliğinin yarısı": 400 piksellik kutunun içinde 200 piksel. Kartın düğmesine width: 100% vereceğiz, kartın içini boydan boya doldursun. Yüzdenin neye göre ölçtüğü özelliğe bağlıdır: width, padding ve margin'de ebeveynin genişliği, font-size'da ebeveynin yazı boyu (font-size: 50% ebeveyninin yazısının yarısı).

vw ve vh: pencereye göre

50vw pencere genişliğinin yarısı, 100vh pencerenin tam yüksekliğidir; pencereyle birlikte değişirler.

deneme.html · <style> içine
.cubuk {    background-color: teal;    color: white;    margin-bottom: 8px;} .sabit {    width: 200px;} .yuzde {    width: 50%;} .pencere {    width: 50vw;}
deneme.html · <body> içine
<div class="cubuk sabit">200px</div><div class="cubuk yuzde">50%</div><div class="cubuk pencere">50vw</div>
127.0.0.1:5500/deneme.html

Önizleme penceresi küçük bir tarayıcıdır; vw onun genişliğine göre hesaplanır. 50% çubuğu biraz kısa, çünkü yüzde gövdenin içine (gövdenin iki yandaki 8 piksellik margin'inin arasına), vw ise pencerenin tamamına göre ölçer. Tarayıcını daraltıp genişlet: ilk çubuk yerinde durur, diğer ikisi değişir.

Hangi kural kazanır? Kalıtım, özgüllük ve sıra

Bir öğeye birden çok kural uygulanabilir. Biri color: dimgray, öbürü color: crimson derse ne olur? Tarayıcı bunu her seferinde aynı kurallarla çözer; CSS'in adındaki cascading (basamaklı) bu kurallar zincirinin adıdır.

Kalıtım: ebeveynden çocuğa geçenler

body'ye color yazınca kartın içindeki bütün yazılar krem rengi oldu, çünkü yazıyla ilgili özellikler (color, font-family, font-size, font-weight, line-height, text-align, text-transform) ebeveynden çocuğa kalıtımla geçer. Kutuyla ilgili olanlar (background-color, border, padding, margin, width) geçmez; yoksa kartın kenarlığı içindeki her paragrafa da çizilirdi.

deneme.html · <style> içine
.kart {    color: teal;    font-family: Georgia, serif;    border: 2px solid goldenrod;    padding: 8px;}
deneme.html · <body> içine
<div class="kart">    <p>Bu paragraf rengi ve yazı tipini karttan aldı, kenarlığını almadı.</p></div>
127.0.0.1:5500/deneme.html

İki istisna seni bir gün mutlaka şaşırtacak:

  • Bağlantılar mavi kalır. Tarayıcının varsayılan stillerinde a için doğrudan bir renk kuralı var ve öğeye yazılmış her kural kalıtımla gelen değeri yener. Çözüm: .kart a { color: inherit; }. inherit "bu özelliği ebeveyninden al" demek.
  • Form öğeleri yazı tipini almaz. button, input, select ve textarea'ya tarayıcı kendi yazı tipini verir (Windows'ta Chrome'da 13,33 piksellik Arial; textarea'da Arial yerine eş aralıklı bir yazı tipi). Düğmen küçük ve farklı görünüyorsa sebep bu; çözüm font: inherit;.
deneme.html · <style> içine
body {    color: teal;    font-family: Georgia, serif;    font-size: 20px;} .duzgun {    font: inherit;    color: inherit;}
deneme.html · <body> içine
<p>Gövde metni. <a href="#">Bu bağlantı</a> mavi kaldı.</p><button>Varsayılan düğme</button><button class="duzgun">inherit ile düğme</button>
127.0.0.1:5500/deneme.html

Özgüllük: hangi seçici daha özel?

İki kural aynı öğeye aynı özelliği farklı değerle veriyor:

deneme.html · <style> içine
.kart p {    color: dimgray;} .rol {    color: crimson;}
deneme.html · <body> içine
<article class="kart">    <p class="rol">Büyücü · Orta koridor</p>    <p>Dokuz kuyruklu bir tilki.</p></article>
127.0.0.1:5500/deneme.html

.rol sonra yazıldığı hâlde rol satırı gri kaldı: tarayıcı önce sıraya değil özgüllüğe bakar ve .kart p, .rol'dan daha özeldir.

Özgüllük üç sütunlu bir puandır; seçicinin parçalarını sayarsın: ID sütununa # ile başlayanlar, Sınıf sütununa .kart gibi noktalı sınıflar ve :hover gibi sözde sınıflar, Etiket sütununa p, li gibi etiket adları. * ve boşluk puan eklemez; virgülle ayrılmış seçicilerin her biri ayrı puanlanır. Puanı bu sırayla, aralarına tire koyarak yazacağız: ID-sınıf-etiket.

SeçiciSayılanPuan
p1 etiket0-0-1
.rol1 sınıf0-1-0
.kart p1 sınıf, 1 etiket0-1-1
.kart .rol2 sınıf0-2-0
.dugme:hover1 sınıf, 1 sözde sınıf0-2-0
#ahri p1 ID, 1 etiket1-0-1
*hiçbir şey0-0-0

Puanlar soldan sağa, sütun sütun karşılaştırılır:

seçici ID SINIF ETİKET .rol 0 1 0 etikette 1 > 0 .kart p 0 1 1 ✓ kazanır .a .b .c .d .e 0 5 0 ID'de 1 > 0 #ahri 1 0 0 ✓ kazanır
Şekil 20.6 Önce ID sütununa bakılır; eşitse sınıfa, o da eşitse etikete. Soldaki sütunda önde olan, sağdaki sütunlar ne olursa olsun kazanır.

Rol satırını kırmızı yapmak için ya .rol'u güçlendirirsin (.kart .rol, 0-2-0, .kart p'yi yener) ya da bütün paragrafları boyayan .kart p'ye gerçekten gerek var mı diye düşünürsün. Çoğu zaman ikincisi daha temizdir.

style niteliği ve !important

style niteliğine yazılan bildirim bütün seçicileri yener. Sonuna !important eklenen bildirim (color: red !important;) özgüllüğe bakmaz, style'ı bile yener.

İkisinden de uzak dur: bir kuralı yenemiyorsan çözüm büyük silah değil, sade seçicilerdir. Stil için sınıf kullan, CSS'te ID kullanma. !important dolu bir projede CSS çoktan kontrolden çıkmıştır.

Sıra: eşitlikte sonra yazılan kazanır

Özgüllük de eşitse dosyada daha aşağıda yazılan kural kazanır:

CSS
.rol {    color: crimson;} .rol {    color: teal;}

İki seçici de 0-1-0; rol satırı teal olur. Sıra dosyalar arasında da geçerlidir: <head> bölümünde iki CSS dosyası bağladıysan, eşitlikte sonra bağlanan dosyadaki kural kazanır. Bu yüzden dışarıdan aldığın hazır CSS dosyalarını önce, kendi dosyanı en son bağlarsın: son sözü senin dosyan söyler.

Toparlarsak tarayıcı, bir özelliğin değerini şu sırayla seçer:

  1. Önem: !important işaretli bildirim kazanır.
  2. Özgüllük: style niteliği her seçiciyi yener; seçiciler arasında puanı yüksek olan kazanır.
  3. Sıra: Hâlâ eşitlerse en son yazılan kazanır.
  4. Kalıtım: Öğeye bu özelliği veren hiçbir kural yoksa ve özellik kalıtımla geçenlerdense değer ebeveynden gelir. Hiçbiri yoksa özelliğin başlangıç değeri kullanılır.

Tarayıcının varsayılan kuralları bu yarışta hep en altta kalır: senin yazdığın kural, ne kadar zayıf bir seçiciyle yazılmış olursa olsun, onları yener.

Geliştirici araçlarında CSS denemek

Kod yaz, kaydet, sayfayı yenile, bak, yeniden yaz: bu döngü yavaş. Geliştirici araçlarında CSS'i doğrudan tarayıcıda, anında değiştirerek deneyebilirsin. "Bu kural neden çalışmıyor?" sorusunun cevabı da orada.

  1. İncelemek istediğin öğeye sağ tıkla ve İncele'yi seç (İngilizce: Inspect). Klavyeden: Ctrl+Shift+C, sonra sayfada öğeye tıkla.
  2. Sağdaki Styles sekmesi o öğeye uyan bütün kuralları gösterir, en güçlüsü en üstte. Her kuralın sağında hangi dosyanın kaçıncı satırından geldiği yazar (stil.css:13); tıklarsan o satıra gidersin. Seçicinin üstüne fareyle gelince özgüllük puanını da gösterir: Specificity: (0,2,0).
  3. Bir değerin üstüne tıklayıp değiştir: 1.5rem yerine 3rem yaz, sayfa anında değişir. Sayısal değerlerde ↑ ve ↓ 1'er, Shift ile birlikte 10'ar artırıp azaltır.
  4. Bir bildirimin üstüne gelince solunda bir onay kutusu çıkar. Kutuyu boşaltırsan bildirim kapanır ve üstü çizilir: "Bu satır olmasa ne olurdu?" sorusunun en hızlı cevabı.
  5. Bir kuralın içinde boş bir yere tıklarsan yeni bir bildirim yazabilirsin. En üstteki element.style kutusuna yazmak, öğenin style niteliğine yazmakla aynıdır.
  6. :hov düğmesine tıklayıp :hover kutusunu işaretlersen öğe, fare üstündeymiş gibi kalır; hover rengini rahatça ayarlarsın.

Aşağıdaki görüntü gerçek bir Styles sekmesi. Sayfa kartın kısa bir kopyası; stil.css'ine bilerek iki yazım hatası koyduk (9. ve 10. satırlar), sonra rol satırına sağ tıklayıp İncele dedik. Bu dosyayı yazman gerekmiyor; aynı ipuçlarını Görev 5'te kendi sayfanda arayacaksın.

stil.css
body {    background-color: #0a1428;    color: #f0e6d2;    font-family: "Segoe UI", Arial, sans-serif;} .kart p {    color: dimgray;    padding: 20;    backround-color: #1e2328;} .kart .rol {    color: crimson;}
Geliştirici araçlarının Styles sekmesi. Üstte Filter kutusu ve :hov, .cls düğmeleri, altında boş element.style. Sonra stil.css:13'teki .kart .rol kuralı: color: crimson. Sonra stil.css:7'deki .kart p kuralı: color: dimgray satırının üstü çizili; padding: 20 satırının başında turuncu uyarı üçgeni var ve yalnız 20'nin üstü çizili; backround-color: #1e2328 satırının başında uyarı üçgeni var ve bütün satırın üstü çizili. Sonra user agent stylesheet etiketli p kuralı: display: block, margin-block-start: 1em, margin-block-end: 1em ve birkaç satır daha. En altta Inherited from body başlığı ve stil.css:1'deki body kuralı: background-color soluk, color üstü çizili, font-family normal.
Şekil 20.7 Gerçek Chromium ekran görüntüsü: rol satırı (p.rol) seçiliyken Styles sekmesi. Kurallar güçlüden zayıfa sıralı, her birinin sağında dosya adı ve satır numarası var.

Görüntüde şunları bul; her biri bir ipucu:

  • Üstü çizili bildirim (color: dimgray): ezilmiş. Daha özgül bir kural (.kart .rol, 0-2-0) aynı özelliği vermiş ve kazanmış. Onay kutusuyla kendin kapattığın bildirimler de böyle çizilir.
  • Turuncu uyarı üçgeni: tarayıcı bildirimi anlamamış ve atmış. Özellik adı yanlışsa (backround-color) bütün satırın, yalnızca değer yanlışsa (padding: 20) yalnızca değerin üstü çizilir. Üçgenin üstüne gelince sebebi yazar: Unknown property name (bilinmeyen özellik adı) ya da Invalid property value (geçersiz değer).
  • user agent stylesheet: tarayıcının varsayılan kuralları. Paragrafların üstündeki ve altındaki boşluk buradan gelir: margin-block-start ve margin-block-end, üst ve alt margin'in başka bir yazımı (1em yazı boyu kadar demek). display özelliğini Ders 21'de öğreneceksin.
  • Inherited from body: ebeveynden kalıtımla gelenler. Soluk yazılan background-color kalıtımla geçmez; color geçerdi ama öğenin kendi kuralı onu ezdi; font-family geçti ve kullanılıyor.
  • Aradığın kural listede hiç yoksa seçici o öğeyi yakalamıyordur ya da dosya hiç gelmemiştir.

Geliştirici araçların Türkçe açılıyorsa aynı yerlerde şu adları görürsün:

İngilizceTürkçe arayüzde
Styles / ComputedStiller / Hesaplandı
user agent stylesheetkullanıcı aracısı stil sayfası
Inherited fromDevralındığı kaynak
Unknown property nameÖzellik adı bilinmiyor
Invalid property valueGeçersiz özellik değeri
SpecificityBelirginlik

Kartın son hâli

Şimdiye kadarki parçaları birleştir. stil.css'in son hâli aşağıda: satır satır yaz, sonra geliştirici araçlarında onay kutularıyla tek tek kapatıp aç ve her satırın neyi değiştirdiğini gör. Sonuç, dersin başındaki ikinci önizleme.

stil.css — sampiyon-karti — Visual Studio Code
stil.css
* {    box-sizing: border-box;} body {    margin: 0;    padding: 2rem 1rem;    background-color: #0a1428;    color: #f0e6d2;    font-family: "Segoe UI", Arial, sans-serif;    line-height: 1.6;} .kart {    max-width: 320px;    margin: 0 auto;    padding: 1.5rem;    background-color: #1e2328;    border: 2px solid #c8aa6e;    border-radius: 12px;} .ad {    margin: 0;    color: #c8aa6e;    font-family: "Cinzel", serif;    font-size: 2rem;} .rol {    margin-top: 0;    color: hsl(40 20% 65%);    font-size: 0.875rem;    text-transform: uppercase;} .dugme {    width: 100%;    padding: 0.75rem;    border: 0;    border-radius: 8px;    background-color: hsl(175 90% 41%);    color: #0a1428;    font: inherit;    font-weight: 700;    cursor: pointer;} .dugme:hover {    background-color: hsl(175 90% 50%);}
Ln 1, Col 1Spaces: 4UTF-8CSS

Yeni gördüklerin:

  • .ad ve .rol'daki margin: 0 ve margin-top: 0: tarayıcının başlığa ve paragrafa verdiği varsayılan boşlukları kaldırır; başlık ile rol satırı birbirine yaklaşır.
  • Düğmenin zemini hsl(175 90% 41%), hover rengi hsl(175 90% 50%): yalnızca açıklık değişti. Ton ve doygunluk aynı kaldığı için renk, "aynı rengin açığı" gibi görünür. Düğme yazısının zemine kontrastı 8,6'ya 1.
  • border: 0: tarayıcının düğmeye çizdiği varsayılan kenarlığı kaldırır.
  • font: inherit; yazı ayarlarının hepsini karttan alır; alttaki font-weight: 700 yalnızca kalınlığı değiştirir. İki satırın yerini değiştirirsen font: inherit kalınlığı da ebeveyninkine geri çevirir ve yazı incelir. Sıra kuralının küçük bir örneği.

Sık hatalar: CSS sessizce görmezden gelir

JavaScript'teki gibi programı durduran bir hata yok: sayfa her durumda açılır, yalnızca bir şey eksik ya da yanlış görünür. Console'da kırmızı bir satır yalnızca dosya hiç bulunamadığında çıkar (404). Bu yüzden ilk adım hep aynı: öğeye sağ tıkla, İncele'yi seç, Styles sekmesine bak. Bir hata aldığında buraya ya da bütün derslerin hatalarının toplandığı hata rehberine bak.

Sık hataNoktalı virgülü unutmak: alttaki satır da çalışmıyor

Ne zaman çıkar? Bir bildirimin sonundaki ; unutulunca. VS Code bir alt satırdan başlayarak birkaç yerin altını kırmızıyla çizer. İlk çizginin üstüne fareyle gelince semi-colon expected ("noktalı virgül bekleniyordu") yazar; aşağıdaki { expected gibi öbür çizgiler aynı hatanın yan etkisidir.

CSS✗ Yanlış
.bozuk {    color: white    background-color: purple;    padding: 16px;}
CSS✓ Doğru
.dogru {    color: white;    background-color: purple;    padding: 16px;}
127.0.0.1:5500/deneme.html

Tarayıcı bir bildirimi ; görene kadar okur. Bozuk kuralda color özelliğinin değeri white background-color: purple olmuş: böyle bir renk yok, bildirim bütünüyle atılır. Sonuçta yazı rengi de zemin de gider, yalnızca padding çalışır. Geliştirici araçlarında iki satır tek satıra kaynamış görünür:

Styles sekmesinde stil.css:1'deki .bozuk kuralı. İlk satırın başında turuncu uyarı üçgeni var: color: white background-color: purple; ve değer kısmının üstü çizili. İkinci satır padding: 16px.
Şekil 20.8 Gerçek Chromium ekran görüntüsü: bozuk kural Styles sekmesinde. background-color diye ayrı bir satır yok; o, color'ın üstü çizili değerinin içinde kalmış.

Nasıl düzelir? white'tan sonra ; koy. VS Code'un ilk çizgisi eksiğin kendisini değil, okumanın takıldığı yeri gösterir; eksik ;'yi o çizginin hemen üst satırının sonunda ara. Düzeltince öbür çizgiler de kaybolur.

Sık hataJavaScript yorumu // kullanmak

Ne zaman çıkar? Bir kuralın üstüne JavaScript alışkanlığıyla // ile not yazınca. CSS'te // yorum değildir; VS Code satırın altını çizer ve at-rule or selector expected der.

CSS✗ Yanlış
// başlığın rengih1 {    color: crimson;}

Tarayıcı // işaretlerini de seçicinin parçası sanır, seçiciyi geçersiz bulur ve bütün kuralı atar: başlık siyah kalır. Bir kuralın içinde // color: crimson; yazarsan da o satır geçersiz sayılıp atlanır.

Nasıl düzelir? CSS'te yorum /* ... */ ile yazılır: /* başlığın rengi */. VS Code'da satırı seçip menüden Edit → Toggle Line Comment dersen, dosya CSS olduğu için doğru yorum işaretini kendisi koyar.

Sık hataSınıf seçicisinde noktayı unutmak

Ne zaman çıkar? .kart yazacağına kart yazınca. Hiçbir uyarı çıkmaz, VS Code da sesini çıkarmaz: kart geçerli bir seçicidir, yalnızca anlamı farklıdır.

CSS✗ Yanlış
kart {    background-color: #1e2328;}

Noktasız kart, bir etiket seçicisidir: tarayıcı sayfada <kart> adında bir etiket arar, bulamaz ve kuralı hiçbir öğeye uygulamaz. Geliştirici araçlarında kartı incelediğinde bu kural Styles sekmesinde hiç görünmez.

Nasıl düzelir? Sınıf için nokta, kimlik için #: .kart. Styles sekmesinde aradığın kural yoksa ilk şüphelin seçicidir.

Sık hataBirimi unutmak: padding: 20

Ne zaman çıkar? Sıfırdan farklı bir uzunluğu birimsiz yazınca: padding: 20, width: 300. Ya da birimle sayının arasına boşluk koyunca: 20 px. VS Code bunu çizmez.

deneme.html · <style> içine
.kutu {    border: 2px solid goldenrod;    margin-bottom: 8px;} .birimsiz {    padding: 20;} .birimli {    padding: 20px;}
127.0.0.1:5500/deneme.html

20 ne? Piksel mi, rem mi, yüzde mi? Tarayıcı tahmin etmez, bildirimi atar; birinci kutunun hiç iç boşluğu yok. Geliştirici araçlarında 20 değerinin üstü çizili ve yanında uyarı simgesi görürsün. Tek istisna 0: sıfırın birimi önemsiz olduğu için margin: 0 yazılabilir.

Nasıl düzelir? Birimi sayıya bitişik yaz: 20px. Bir tuzak daha: sayfanın başında <!doctype html> yoksa tarayıcı eski sayfalarla uyumlu "tuhaflık moduna" (quirks mode) geçer ve padding: 20'yi kabul eder. Hata o sayfada gizlenir, doctype'lı sayfada ortaya çıkar. Doctype'ı hep yaz.

Sık hataStil hiç gelmiyor: <link>'teki yol yanlış (404)

Ne zaman çıkar? <link>'teki yol, dosyanın gerçek yeriyle uyuşmayınca. Sayfa açılır ama hiç stil yoktur: beyaz zemin, Times New Roman.

Örnek: stil.css'i düzenli olsun diye css adında bir klasöre taşıdın ama index.html'deki satırı güncellemedin:

HTML✗ Yanlış
<link rel="stylesheet" href="stil.css">

Console sekmesinde kırmızı bir satır çıkar; metni, kullandığın sunucuya göre değişir. Live Server dosyayı bulamayınca "böyle bir dosya yok" diyen küçük bir HTML sayfası gönderir. Tarayıcı stil beklerken HTML gelince Ders 18'de gördüğün mesajı verir:

Console · LIVE SERVER
Refused to apply style from 'http://127.0.0.1:5500/stil.css' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.

npx serve'de mesaj sorunu doğrudan söyler: sunucu 404, yani "bulunamadı" demiş.

Console · npx serve
Failed to load resource: the server responded with a status of 404 (Not Found)

Mesaj hangisi olursa olsun asıl kanıt Network sekmesinde: stil.css satırı kırmızıdır, başında ✕ işareti, Status sütununda 404 yazar. Sayfanın kendisi ise 200 ile gelmiştir:

Geliştirici araçlarının Network sekmesi. Üstte Keep log kutusu boş, Disable cache kutusu işaretli. Tabloda iki satır: localhost, durum 200, tür document; stil.css, durum 404, tür stylesheet, başlatan (index):7. stil.css satırının başında kırmızı çarpı var ve yazıları kırmızı. En altta 2 requests yazıyor.
Şekil 20.9 Gerçek Chromium ekran görüntüsü: npx serve ile açılan sayfanın Network sekmesi. Sayfanın satırı bu yüzden localhost adını taşıyor; Live Server'da orada index.html görürsün. Üstte Disable cache işaretli; araçlar açık kaldıkça önbellek kullanılmaz.

npx serve kullanıyorsan isteği terminalde de görürsün:

Terminal — PowerShell
PS C:\kod\sampiyon-karti> npx serve... HTTP  11.10.2026 16:10:45 ::1 GET /stil.cssHTTP  11.10.2026 16:10:45 ::1 Returned 404 in 3 ms

Sayfayı sunucusuz, dosyaya çift tıklayarak açtıysan Console'daki mesaj Failed to load resource: net::ERR_FILE_NOT_FOUND olur.

Nasıl düzelir? Yolu index.html'in yerine göre yeniden yaz: href="css/stil.css". Dosya adını harfi harfine denetle (stil.css mi still.css mi?) ve adın stil.css.txt olmadığından emin ol. Network sekmesinde satır 200 olunca stil gelir.

Sık hataDeğişiklik görünmüyor: önbellek

Ne zaman çıkar? CSS'i değiştirdin, kaydettin, sayfayı yeniledin; ekranda hâlâ eski görünüm var. Hata mesajı yok.

Sebepler, bakma sırasına göre:

  1. Dosya kaydedilmedi. VS Code sekmesinde dosya adının yanında ● var mı? Ctrl+S.
  2. Başka bir dosyayı düzenliyorsun. Klasörde iki ayrı stil.css olabilir (biri css klasöründe). Styles sekmesinde kuralın yanındaki dosya adına ve satır numarasına bak; hangi dosyanın geldiğini o söyler.
  3. Kural geldi ama ezildi. Styles sekmesinde bildirimin üstü çiziliyse önbellek değil, özgüllük sorunudur.
  4. Tarayıcı eski kopyayı gösteriyor. Tarayıcı stil.css'in eski kopyasını önbellekten kullanıyor olabilir. Bilgisayarındaki yerel sunucuda az olur, yayına aldığın sitede sık olur: örneğin GitHub Pages tarayıcıya "bu dosyayı 10 dakika boyunca önbellekten kullanabilirsin" der.

Nasıl düzelir? Ctrl+F5 ya da Ctrl+Shift+R ile sayfayı önbelleği atlayarak yenile. Geliştirici araçları açıkken Network sekmesindeki Disable cache kutusunu işaretlersen araçlar açık kaldıkça önbellek hiç kullanılmaz. Yayındaki sitede ziyaretçilerin de yeni dosyayı hemen alması için bağlantının sonuna bir sürüm ekleyebilirsin: href="stil.css?v=2". Tarayıcı bunu yeni bir adres sayar ve dosyayı yeniden indirir.

Sık hataKural yazılmış ama uygulanmıyor: özgüllük

Ne zaman çıkar? Bir kural yazdın, seçici doğru, dosya geliyor; ama değer uygulanmıyor. Geliştirici araçlarında bildiriminin üstü çizili.

CSS✗ Yanlış
#ahri p {    color: dimgray;} .vurgu {    color: crimson;}

<p class="vurgu"> kartın içindeyse gri kalır: #ahri p (1-0-1), .vurgu'yu (0-1-0) sırası ne olursa olsun yener. Styles sekmesinde .vurgu içindeki color bildiriminin üstü çizilidir; onu ezen kural hemen üstünde durur.

Nasıl düzelir? Ezen kuralı bul ve gereğinden güçlüyse sadeleştir: CSS'te id yerine sınıf kullan, bütün paragrafları değil yalnızca gerekenleri seç. !important ile "kazanmaya" çalışma; bir sonraki çakışmada daha büyüğüne ihtiyacın olur.

Sık hataUnknown property: 'backround-color'

Ne zaman çıkar? Bir özelliğin adını yanlış yazınca: backround-color, colour, JavaScript alışkanlığıyla backgroundColor. VS Code satırın altını sarıyla çizer ve bu uyarıyı gösterir.

CSS✗ Yanlış
.kart {    backround-color: #1e2328;}

Tarayıcı bu özelliği tanımaz ve bildirimi atar. Geliştirici araçlarında bütün bildirimin üstü çizilidir ve yanında uyarı simgesi vardır.

Nasıl düzelir? Adı düzelt: background-color. Yazarken VS Code'un önerdiği adların üstüne Enter'a basarsan bu hatayı hiç yapmazsın.

Görevler

Görevleri sampiyon-karti klasöründe, yeni dosyalarda yap. İlk dört görev aynı sayfa üstünde ilerler: bir eşya dükkânı. dukkan.html'i aşağıdaki gibi yaz; görevlerde yalnızca <head> bölümüne ve CSS'e dokunacaksın. İçindeki <span>, Ders 19'da adını duyduğun anlamsız satır içi kap: metnin bir parçasına sınıf verebilmek için kullanılır, <div>'in satır içi kardeşidir.

dukkan.html
<!doctype html><html lang="tr"><head>    <meta charset="utf-8">    <meta name="viewport" content="width=device-width, initial-scale=1">    <title>Eşya dükkânı</title></head><body>    <h1>Eşya dükkânı</h1>    <p class="altin">Altının: 1250</p>    <ul class="esyalar">        <li class="esya">Uzun Kılıç <span class="fiyat">350</span></li>        <li class="esya">Doran'ın Kalkanı <span class="fiyat">450</span></li>        <li class="esya pahali">Sonsuzluk Kılıcı <span class="fiyat">3450</span></li>    </ul>    <p class="not">Fiyatlar altın cinsinden.</p>    <button class="satin-al">Satın al</button></body></html>
Görev 1

Dükkânı bağla ve boya

dukkan.css adında bir dosya oluştur ve dukkan.html'e bağla. Sonra:

  1. Sayfanın zemini #10131a, yazı rengi #e8e6e3 olsun.
  2. Yazı tipi Segoe UI olsun; yoksa Arial, o da yoksa sistemin düz harfli genel ailesi.
  3. Satır yüksekliği yazı boyunun 1,5 katı olsun.
  4. Satın al düğmesinin yazı tipi sayfanınkiyle aynı olsun.

Bitirdiğinde sayfan şöyle görünmeli:

127.0.0.1:5500/dukkan.html

Sonra bağlantıyı bilerek boz: href'teki adı dukan.css yap, sayfayı yenile ve Console ile Network sekmelerinde ne gördüğüne bak. Ardından düzelt.

İpucu 1

<link> satırı <head> bölümünün içine gider; iki niteliği var: rel ve href.

İpucu 2

İlk üç madde tek bir body kuralına sığar: background-color, color, font-family, line-height.

İpucu 3

Düğme yazı tipini gövdeden kalıtımla almaz. Ona font: inherit; ver.

Çözümü göster

dukkan.html'in <head> bölümüne, <title> satırının altına:

HTML
<link rel="stylesheet" href="dukkan.css">
dukkan.css
body {    background-color: #10131a;    color: #e8e6e3;    font-family: "Segoe UI", Arial, sans-serif;    line-height: 1.5;} .satin-al {    font: inherit;}

Bozuk bağlantıda Console'da kırmızı bir satır çıkar: Live Server'da Refused to apply style from '…/dukan.css' because its MIME type ('text/html')…, npx serve'de Failed to load resource: … 404 (Not Found). Network'te dukan.css satırında 404 yazar ve sayfa beyaz zemine, Times New Roman'a döner.

Satır yüksekliği: 16 piksellik yazıda 1,5 × 16 = 24 piksel; geliştirici araçlarının Computed sekmesinde line-height: 24px görürsün. Düğmeyi incelersen yazı tipinin "Segoe UI", Arial, sans-serif ve boyunun 16 piksel olduğunu görürsün; font: inherit olmadan 13,33 piksellik Arial olurdu.

Görev 2

Seçicilerle boya

dukkan.css'e devam et. Her maddeyi tek bir kuralla yap:

  1. Başlık (h1) ve altın satırı (.altin) aynı renkte olsun: #c8aa6e. İkisi için tek kural yaz.
  2. Fiyatlar kalın olsun.
  3. Pahalı eşyanın yazısı tomato renginde olsun.
  4. Yalnızca pahalı eşyanın fiyatının altı çizili olsun (text-decoration: underline). Öbür fiyatlara dokunma.
  5. Fare bir eşyanın üstüne gelince eşyanın zemini hsl(220 25% 20%) olsun.

Sınır denemesi: Sonsuzluk Kılıcı hem esya hem pahali sınıfında. Fare üstüne gelince hem tomato rengini korumalı hem zemini değişmeli. .not paragrafı hiçbir kuraldan etkilenmemeli. Beklenen sonuç:

127.0.0.1:5500/dukkan.html
Fareyi eşyaların üstünde gezdir: zemin koyulaşır, pahalı eşya tomato rengini korur.
İpucu 1

Virgülle iki seçiciyi tek kurala bağlarsın: h1, .altin.

İpucu 2

Dördüncü madde için boşluklu (torun) seçici: önce pahalı eşya, sonra onun içindeki fiyat.

İpucu 3

Hover için sözde sınıf: .esya:hover.

Çözümü göster

Önceki kuralların altına:

dukkan.css
h1,.altin {    color: #c8aa6e;} .fiyat {    font-weight: 700;} .pahali {    color: tomato;} .pahali .fiyat {    text-decoration: underline;} .esya:hover {    background-color: hsl(220 25% 20%);}

Pahalı eşyanın fiyatı tomato rengini kendi kuralı olmadan, .pahali'dan kalıtımla aldı. .esya:hover yalnızca zemini değiştirdiği, .pahali yalnızca rengi değiştirdiği için ikisi çakışmaz, toplanır. .not paragrafı hiçbir seçiciye uymadığı için gövdenin rengiyle kaldı.

Görev 3

Kutuları hesapla

Her eşya kendi kutusunda dursun. .esya için: genişlik 260 piksel; üstte ve altta 12, sağda ve solda 16 piksel iç boşluk; 2 piksellik #3c3c41 renkli düz kenarlık; altında 8 piksellik dış boşluk; 8 piksellik yuvarlak köşeler.

  1. Önce box-sizing yazmadan dene. Bir eşyanın ekrandaki genişliğini kâğıt üstünde hesapla, sonra geliştirici araçlarında eşyanın üstüne gelerek doğrula.
  2. Dosyanın en üstüne box-sizing: border-box kuralını ekle. Genişlik şimdi kaç? İçeriğe kaç piksel kaldı?
  3. Sınır denemesi: padding'in sağ ve sol değerini 16'dan 140'a çıkar. Eşya şimdi kaç piksel genişlikte, neden 260 değil? Denedikten sonra 16'ya geri al.

İkinci maddeyi bitirdiğinde sayfan şöyle görünmeli:

127.0.0.1:5500/dukkan.html
İpucu 1

Kısa yazım: padding: 12px 16px üst ve alt 12, sağ ve sol 16 demek.

İpucu 2

Varsayılan hesap: kenarlık + padding + width + padding + kenarlık.

İpucu 3

border-box'ta içerik = width − padding'ler − kenarlıklar. Bu sonuç sıfırın altına düşerse içerik sıfır olur ve kutu, padding'le kenarlığın toplamından küçük olamaz.

Çözümü göster
dukkan.css
* {    box-sizing: border-box;}
dukkan.css
.esya {    width: 260px;    padding: 12px 16px;    border: 2px solid #3c3c41;    margin-bottom: 8px;    border-radius: 8px;}
  1. box-sizing yokken: 2 + 16 + 260 + 16 + 2 = 296 piksel. Geliştirici araçlarındaki kutucukta li.esya 296 × … yazar.
  2. border-box ile: 260 piksel. İçeriğe 260 − 2 × 16 − 2 × 2 = 224 piksel kalır.
  3. 140 ile: 2 + 140 + 140 + 2 = 284 piksel, 260'tan büyük. Padding ile kenarlık 260'a sığmıyor, içerik sıfıra iniyor ve kutu 284 piksel oluyor. İçeriğe yer kalmadığı için yazı her sözcükte alt satıra kırılıyor ve sözcükler sağdaki iç boşluğun üstüne taşıyor. border-box, kutuyu en az "padding + kenarlık" genişliğinde tutar.
Görev 4

rem ve yüzde

Dükkânın yazı boylarını rem'e çevir ve satın al düğmesini esnek yap:

  1. h1 40 piksel, eşyalar 18 piksel, .not 12 piksel olsun; ama px yazmak yok, rem kullan.
  2. Satın al düğmesi, gövdenin içerik genişliğinin yarısı kadar geniş olsun.
  3. Chrome'da Ayarlar → Görünüm → Yazı tipi boyutu'nu Büyük yap ve dükkâna dön. h1 şimdi kaç piksel? Geliştirici araçlarının Computed sekmesinde doğrula. Bitince ayarı eski hâline (Orta) getir.

Sınır denemesi: Büyük yazıda eşya kutularının genişliği de değişti mi? Bundan ne sonuç çıkarırsın?

Bir de düğmenin width: 50% değerini geçici olarak 50vw yap: düğme biraz genişler. Neden? Denedikten sonra 50%'ye geri al.

Varsayılan yazı boyutunda (Orta) sayfan şöyle görünmeli:

127.0.0.1:5500/dukkan.html
İpucu 1

rem = piksel ÷ 16. Örneğin 24 piksel = 1.5rem.

İpucu 2

width: 50% ebeveynin içerik genişliğinin yarısıdır; düğmenin ebeveyni body.

İpucu 3

Büyük ayarında kök yazı boyu 20 piksel olur; rem değerlerini 20 ile çarp.

Çözümü göster

dukkan.css'in son hâli:

dukkan.css
* {    box-sizing: border-box;} body {    background-color: #10131a;    color: #e8e6e3;    font-family: "Segoe UI", Arial, sans-serif;    line-height: 1.5;} h1 {    font-size: 2.5rem;} .satin-al {    width: 50%;    font: inherit;} h1,.altin {    color: #c8aa6e;} .fiyat {    font-weight: 700;} .pahali {    color: tomato;} .pahali .fiyat {    text-decoration: underline;} .esya:hover {    background-color: hsl(220 25% 20%);} .esya {    width: 260px;    padding: 12px 16px;    border: 2px solid #3c3c41;    margin-bottom: 8px;    border-radius: 8px;    font-size: 1.125rem;} .not {    font-size: 0.75rem;}
  • 40 ÷ 16 = 2.5rem, 18 ÷ 16 = 1.125rem, 12 ÷ 16 = 0.75rem.
  • Büyük ayarında kök yazı 20 piksel olur: h1 2,5 × 20 = 50 piksel, eşyalar 22,5, .not 15 piksel. px ile yazsaydın hiçbiri değişmezdi.
  • Sınır denemesinin cevabı: eşya kutularının genişliği değişmedi, çünkü px ile yazıldı (260). Kutular yalnızca içlerindeki yazı büyüdüğü için biraz uzadı. Büyük ayarında adlar hâlâ tek satıra sığıyor, ama Çok büyük'te (kök 24 piksel) her eşya adı iki satıra kırılır. Yazıyla birlikte büyümesi gereken genişlikleri de rem ile vermeyi düşün.
  • 50vw pencerenin tamamının yarısı, 50% ise gövdenin içerik genişliğinin yarısı. Gövdenin iki yandaki 8 piksellik margin'i düşüldüğü için 50% biraz dar kalır: 1000 piksellik pencerede düğme 492 piksel, 50vw ile 500 piksel olur.
Görev 5

Hata avı: maç sonucu

skor.html ve skor.css dosyalarını aşağıdaki gibi yaz. CSS'te dört sessiz hata var. Tarayıcı hiçbirinde mesaj vermiyor; VS Code yalnızca birini fark ediyor (onun yüzünden iki yerin altını çiziyor). Geliştirici araçlarını kullanarak dördünü de bul ve düzelt.

skor.html
<!doctype html><html lang="tr"><head>    <meta charset="utf-8">    <meta name="viewport" content="width=device-width, initial-scale=1">    <title>Maç sonucu</title>    <link rel="stylesheet" href="skor.css"></head><body>    <section class="sonuc" id="mac">        <h2 class="baslik">Zafer</h2>        <p class="sure">Süre: 31:42</p>        <p class="kda">Lux · 7 / 2 / 15</p>    </section></body></html>
skor.css✗ Yanlış
body {    background-color: #0a1428;    color: #f0e6d2    font-family: "Segoe UI", Arial, sans-serif;} .sonuc {    max-width: 360px;    padding: 24;    border: 2px solid #c8aa6e;} baslik {    color: #0ac8b9;} #mac p {    color: #a09b8c;} .kda {    color: #f0e6d2;    font-weight: 700;}

Bu hâliyle sayfa şöyle görünüyor:

127.0.0.1:5500/skor.html

Dördünü de düzelttiğinde ise şöyle görünmeli: lacivert zeminde krem rengi, Segoe UI yazı; sonuç kutusunun içinde 24 piksel boşluk; Zafer başlığı camgöbeği (#0ac8b9); süre satırı soluk gri (#a09b8c); KDA satırı krem rengi ve kalın.

127.0.0.1:5500/skor.html
İpucu 1

En göze batan belirti: Zafer başlığı lacivert zeminde neredeyse görünmüyor ve yazıların hepsi Times New Roman. body kuralına bak. VS Code'un ilk çizdiği satır 4; hatanın kendisi bir üst satırın sonunda.

İpucu 2

Zafer başlığını incele: Styles sekmesinde senin yazdığın bir renk kuralı hiç görünmüyorsa seçici o öğeyi yakalamıyordur. Sonuç kutusunu incele: padding değerinin yanında ne var?

İpucu 3

KDA satırı kalın ama gri. Demek ki .kda kuralı çalışıyor, yalnızca rengi ezilmiş. Styles sekmesinde üstü çizili color bildirimini ve onu ezen kuralı bul; iki seçicinin puanını hesapla.

Çözümü göster
skor.css✓ Doğru
body {    background-color: #0a1428;    color: #f0e6d2;    font-family: "Segoe UI", Arial, sans-serif;} .sonuc {    max-width: 360px;    padding: 24px;    border: 2px solid #c8aa6e;} .baslik {    color: #0ac8b9;} .sure {    color: #a09b8c;} .kda {    color: #f0e6d2;    font-weight: 700;}
  1. 3. satır: #f0e6d2'dan sonra ; eksikti. color ile font-family birlikte atılıyordu: bütün yazılar Times New Roman'a, kendi renk kuralı çalışmayan Zafer başlığı da tarayıcının varsayılanı olan siyaha dönmüştü. Siyahın lacivert zemine kontrastı 1,1'e 1: neredeyse görünmez.
  2. 9. satır: padding: 24 birimsizdi ve atılıyordu. 24px olmalı.
  3. 13. satır: baslik noktasızdı; sayfada <baslik> diye bir etiket aradı. .baslik olmalı.
  4. 17. satır: #mac p (1-0-1), .kda'yı (0-1-0) eziyordu. Bütün paragrafları kimlikle boyamak yerine yalnızca süre satırını sınıfıyla seçtik: .sure. Artık .kda'nın rengiyle çakışan bir kural yok.

Kendini sına

Soru 1

Ahri başlığı hangi renkte görünür?

CSS
#ahri .ad {    color: crimson;} .kart h1 {    color: teal;} h1.ad {    color: goldenrod;}
HTML
<article class="kart" id="ahri">    <h1 class="ad">Ahri</h1></article>
Cevabı göster

crimson. Puanlar: #ahri .ad 1-1-0, .kart h1 0-1-1, h1.ad 0-1-1. ID sütununda tek 1 olan ilk kural, gerisine bakılmadan kazanır. İlk kural olmasaydı öbür ikisi eşit olurdu (0-1-1) ve sonra yazılan h1.ad kazanırdı: goldenrod.

Soru 2

Bu kutu ekranda kaç piksel genişlikte? box-sizing: border-box eklenince ne olur?

CSS
.kutu {    width: 250px;    padding: 10px 20px;    border: 1px solid gray;    margin: 8px;}
Cevabı göster

Varsayılanda 1 + 20 + 250 + 20 + 1 = 292 piksel. Dikey padding (10) genişliği etkilemez; margin (8) kutunun dışındaki boşluktur, genişliğe girmez. border-box ile kutu 250 piksel olur, içeriğe 250 − 40 − 2 = 208 piksel kalır.

Soru 3

.kart p, .kart, p ve p.kart seçicileri neyi seçer?

Cevabı göster
  • .kart p: kart sınıflı bir öğenin içindeki bütün paragraflar (boşluk: torun).
  • .kart, p: kart sınıflı öğeler ve sayfadaki bütün paragraflar (virgül: iki ayrı seçici).
  • p.kart: kart sınıfı olan paragraflar (bitişik: aynı öğede iki koşul).

Soru 4

Bu kuraldaki bildirimlerden hangileri uygulanır?

CSS
.rol {    color: crimson    font-size: 1.25rem;    margin: 0;}
Cevabı göster

Yalnızca margin: 0. crimson'dan sonra ; olmadığı için tarayıcı color'ın değerini crimson font-size: 1.25rem diye okur; geçersiz olduğu için bildirimi bütünüyle atar. Böylece color da font-size da gider. margin: 0 ayrı bir bildirim olarak sağlam kalır.

Soru 5

Yazı boylarını neden px yerine rem ile yazmalısın?

Cevabı göster

rem, kullanıcının tarayıcıdaki yazı tipi boyutu ayarına uyar. Görme güçlüğü olan biri ayarı büyüttüğünde kök yazı boyu 16'dan 20 piksele çıkar; rem ile yazılmış her şey onunla büyür. px ile yazılanlar yerinde sayar ve o kişi sayfayı rahat okuyamaz.

Soru 6

Hangileri kalıtımla ebeveynden çocuğa geçer: color, border, font-family, padding, line-height, background-color?

Cevabı göster

color, font-family ve line-height: yazıyla ilgili olanlar. border, padding ve background-color geçmez. background-color geçiyormuş gibi görünebilir, çünkü çocuğun zemini varsayılan olarak saydamdır ve ebeveynin zemini arkadan görünür; ama çocuğun kendi zemini yoktur.

Soru 7

hsl(120 100% 25%) hangi renk? Aynı rengin daha açık bir tonunu nasıl yazarsın?

Cevabı göster

Ton 120 yeşildir, doygunluk tam, açıklık düşük: koyu yeşil. Tarayıcı bunu rgb(0, 128, 0) olarak saklar, yani green adlı renkle aynıdır. Daha açık bir ton için yalnızca son sayıyı artır: hsl(120 100% 40%).

Soru 8

stil.css'te bir rengi değiştirdin, kaydettin, sayfayı yeniledin; ekran değişmedi. Neleri, hangi sırayla denetlersin?

Cevabı göster
  1. Dosya gerçekten kaydedildi mi (VS Code sekmesinde ● var mı)?
  2. Sayfa doğru dosyayı mı yüklüyor? Network sekmesinde stil.css 200 mü? Styles sekmesinde kuralın yanındaki dosya adı ve satır numarası, düzenlediğin dosyayla aynı mı?
  3. Kural öğeye uyuyor mu, uyuyorsa ezilmiş mi? Styles sekmesinde kural hiç yoksa seçici yanlış; üstü çiziliyse daha özgül bir kural kazanıyor.
  4. Hepsi doğruysa önbellek: Ctrl+F5 ile önbelleği atlayarak yenile.

Kayıt noktası

Kartı ve görev dosyalarını kaydet. VS Code terminalinde, C:\kod\sampiyon-karti klasöründeyken:

Bir sonraki derste kutuları yan yana ve ızgara hâlinde dizmeyi (flexbox ve grid) ve sayfayı telefona uydurmayı öğreneceksin; bu kartı çoğaltıp her ekrana uyan bir şampiyon listesi kuracaksın.

İşaret yalnızca bu tarayıcıda saklanır, kimseye gönderilmez.