C
Bölüm 2: CSS Seçicileri ve Özellik Yönetimi
Genel Bakış

Bölüm 2: CSS Seçicileri ve Özellik Yönetimi

15 Haziran 2025
6 dk okuma süresi
css-seciciler-ozellik-yonetimi

CSS Seçicilerine Giriş

CSS seçicileri, hangi HTML öğelerine stil vereceğinizi belirleyen güçlü araçlardır. Doğru seçiciyi kullanmak, etkili ve sürdürülebilir CSS yazmanın anahtarıdır.

Temel Seçici Türleri

1. Element Seçicileri (Type Selectors)

HTML etiket adını kullanarak stil verir:

h1 {
    color: blue;
    font-size: 2em;
}
 
p {
    line-height: 1.6;
    margin-bottom: 15px;
}
 
a {
    color: #007acc;
    text-decoration: none;
}

HTML:

<h1>Bu başlık mavi olacak</h1>
<p>Bu paragraf 1.6 satır aralığına sahip olacak</p>
<a href="#">Bu link mavi ve altı çizgisiz olacak</a>

2. Class Seçicileri

Nokta (.) ile başlar ve class özelliği olan öğeleri seçer:

.highlight {
    background-color: yellow;
    padding: 10px;
}
 
.btn {
    background-color: #007acc;
    color: white;
    padding: 10px 20px;
    border: none;
    border-radius: 5px;
}
 
.text-center {
    text-align: center;
}

HTML:

<p class="highlight">Bu paragraf sarı arka plana sahip</p>
<button class="btn">Mavi buton</button>
<div class="text-center">Ortalanmış metin</div>
Ipucu

En İyi Uygulama: Class seçicileri en çok kullanılan seçici türüdür. Yeniden kullanılabilir ve sürdürülebilir kod için class kullanın.

3. ID Seçicileri

Diyez (#) ile başlar ve id özelliği olan öğeyi seçer:

#header {
    background-color: #333;
    color: white;
    padding: 20px;
}
 
#main-content {
    max-width: 1200px;
    margin: 0 auto;
}
 
#footer {
    background-color: #f1f1f1;
    text-align: center;
    padding: 15px;
}

HTML:

<header id="header">Ana Başlık</header>
<main id="main-content">Ana İçerik</main>
<footer id="footer">Alt Bilgi</footer>
Uyarı

Dikkat: ID’ler benzersiz olmalıdır. Bir sayfada aynı ID sadece bir kez kullanılabilir. Genel stil verme için class kullanın.

4. Universal Seçici

Yıldız (*) ile belirtilir ve tüm öğeleri seçer:

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

Kombinasyon Seçicileri

1. Descendant Seçici (Boşluk)

Bir öğenin içindeki tüm alt öğeleri seçer:

.sidebar p {
    font-size: 14px;
    color: #666;
}
 
#header a {
    color: white;
    text-decoration: none;
}

HTML:

<div class="sidebar">
    <p>Bu paragraf küçük ve gri olacak</p>
    <div>
        <p>Bu da küçük ve gri olacak (derinlemesine seçim)</p>
    </div>
</div>

2. Child Seçici (>)

Sadece doğrudan alt öğeleri seçer:

.menu > li {
    display: inline-block;
    margin-right: 20px;
}

HTML:

<ul class="menu">
    <li>Ana Menü 1</li>  <!-- Seçilir -->
    <li>Ana Menü 2       <!-- Seçilir -->
        <ul>
            <li>Alt Menü</li>  <!-- Seçilmez -->
        </ul>
    </li>
</ul>

3. Adjacent Sibling Seçici (+)

Hemen sonraki kardeş öğeyi seçer:

h2 + p {
    font-weight: bold;
    margin-top: 0;
}

HTML:

<h2>Başlık</h2>
<p>Bu paragraf kalın olacak</p>  <!-- Seçilir -->
<p>Bu paragraf normal olacak</p>  <!-- Seçilmez -->

4. General Sibling Seçici (~)

Sonraki tüm kardeş öğeleri seçer:

h2 ~ p {
    color: #666;
}

Özellik Seçicileri (Attribute Selectors)

HTML özelliklerine göre seçim yapar:

/* href özelliği olan öğeler */
[href] {
    color: blue;
}
 
/* Belirli özellik değeri */
[type="text"] {
    border: 1px solid #ccc;
    padding: 5px;
}
 
/* Özellik değeri ile başlayanlar */
[href^="https"] {
    color: green;
}
 
/* Özellik değeri ile bitenler */
[href$=".pdf"] {
    background: url(pdf-icon.png) no-repeat left;
    padding-left: 20px;
}
 
/* Özellik değeri içerenler */
[title*="important"] {
    font-weight: bold;
}

HTML:

<a href="https://example.com">Güvenli link (yeşil)</a>
<a href="document.pdf">PDF dosyası (ikon ile)</a>
<input type="text" placeholder="Metin girişi">
<div title="This is important">Önemli içerik (kalın)</div>

Pseudo-class Seçicileri

Öğelerin belirli durumlarını seçer:

Kullanıcı Etkileşimi

/* Link durumları */
a:link { color: blue; }
a:visited { color: purple; }
a:hover { color: red; }
a:active { color: green; }
 
/* Form durumları */
input:focus {
    border-color: #007acc;
    outline: none;
    box-shadow: 0 0 5px rgba(0, 122, 204, 0.3);
}
 
button:hover {
    background-color: #0056b3;
    transform: translateY(-1px);
}
 
input:disabled {
    background-color: #f5f5f5;
    cursor: not-allowed;
}

Yapısal Pseudo-classlar

/* İlk ve son öğeler */
li:first-child {
    font-weight: bold;
}
 
li:last-child {
    border-bottom: none;
}
 
/* Sıralı seçimler */
tr:nth-child(even) {
    background-color: #f9f9f9;
}
 
tr:nth-child(odd) {
    background-color: white;
}
 
/* Belirli pozisyonlar */
p:nth-child(3) {
    color: red;
}
 
/* Formül ile seçim */
li:nth-child(3n+1) {
    margin-left: 0;
}

Pseudo-element Seçicileri

Öğelerin belirli bölümlerini seçer:

/* İlk harfi büyüt */
p:first-letter {
    font-size: 3em;
    float: left;
    line-height: 1;
    margin: 0 5px 0 0;
}
 
/* İlk satırı vurgula */
p:first-line {
    font-weight: bold;
    color: #333;
}
 
/* İçerik öncesi ve sonrası ekleme */
.quote:before {
    content: '"';
    font-size: 1.5em;
    color: #007acc;
}
 
.quote:after {
    content: '"';
    font-size: 1.5em;
    color: #007acc;
}
 
/* Seçili metni stillendirme */
::selection {
    background-color: #007acc;
    color: white;
}

Seçici Öncelikleri (Specificity)

CSS’te hangi stilin uygulanacağını belirleyen önemlilik sırası:

Öncelik Sırası (Yüksekten düşüğe)

  1. Inline Styles (style="...")
  2. IDs (#id)
  3. Classes, Attributes, Pseudo-classes (.class, [attr], :hover)
  4. Elements and Pseudo-elements (div, ::before)

Specificity Hesaplama

/* Specificity: 0001 */
p { color: red; }
 
/* Specificity: 0010 */
.highlight { color: blue; }
 
/* Specificity: 0100 */
#main { color: green; }
 
/* Specificity: 0011 */
p.highlight { color: orange; }
 
/* Specificity: 0101 */
#main p { color: purple; }
Ipucu

İpucu: Karmaşık seçiciler yazmak yerine, açık ve anlaşılır class isimleri kullanın. Bu, kodunuzu daha sürdürülebilir yapar.

Pratik Örnek: Blog Kartı

/* Ana kart tasarımı */
.blog-card {
    border: 1px solid #e0e0e0;
    border-radius: 8px;
    overflow: hidden;
    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
    transition: transform 0.2s;
}
 
.blog-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 4px 8px rgba(0,0,0,0.15);
}
 
/* Resim alanı */
.blog-card img {
    width: 100%;
    height: 200px;
    object-fit: cover;
}
 
/* İçerik alanı */
.blog-card .content {
    padding: 20px;
}
 
.blog-card .title {
    font-size: 1.25em;
    font-weight: bold;
    margin-bottom: 10px;
    color: #333;
}
 
.blog-card .excerpt {
    color: #666;
    line-height: 1.5;
    margin-bottom: 15px;
}
 
/* Meta bilgiler */
.blog-card .meta {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 0.9em;
    color: #999;
}
 
.blog-card .author:before {
    content: "👤 ";
}
 
.blog-card .date:before {
    content: "📅 ";
}
 
/* Etiketler */
.blog-card .tags {
    margin-top: 10px;
}
 
.blog-card .tag {
    display: inline-block;
    background-color: #e3f2fd;
    color: #1976d2;
    padding: 3px 8px;
    border-radius: 12px;
    font-size: 0.8em;
    margin-right: 5px;
}
 
.blog-card .tag:hover {
    background-color: #1976d2;
    color: white;
}

HTML:

<article class="blog-card">
    <img src="blog-image.jpg" alt="Blog resmi">
    <div class="content">
        <h3 class="title">CSS Seçicileri Rehberi</h3>
        <p class="excerpt">
            CSS seçicilerinin gücünü keşfedin ve etkili stil sayfaları yazın.
        </p>
        <div class="meta">
            <span class="author">Furkan Çay</span>
            <span class="date">15 Haziran 2025</span>
        </div>
        <div class="tags">
            <span class="tag">CSS</span>
            <span class="tag">Web Tasarım</span>
            <span class="tag">Frontend</span>
        </div>
    </div>
</article>

En İyi Uygulamalar

1. Anlamlı Class İsimleri Kullanın

/* ❌ Kötü */
.red-text { color: red; }
.big-box { padding: 20px; }
 
/* ✅ İyi */
.error-message { color: red; }
.content-section { padding: 20px; }

2. Aşırı Spesifik Seçicilerden Kaçının

/* ❌ Kötü */
#header .nav ul li a.active { color: red; }
 
/* ✅ İyi */
.nav-link.active { color: red; }

3. Tutarlı İsimlendirme Kullanın

/* BEM metodolojisi örneği */
.card { }
.card__title { }
.card__content { }
.card--featured { }

Pratik Egzersiz

  1. Farklı seçici türlerini içeren bir CSS dosyası oluşturun
  2. Hover efektleri ekleyin
  3. Pseudo-classları kullanarak zebra tablo satırları oluşturun
  4. Özellik seçicileriyle form stillerini özelleştirin

Sıradaki Bölüm

Bir sonraki bölümde Kutu Modeli (Box Model) öğreneceksiniz. Bu, CSS layoutlarının temelini oluşturan kritik bir konudur.

Öğrendikleriniz:

  • ✅ Tüm CSS seçici türlerini
  • ✅ Seçici kombinasyonlarını
  • ✅ Pseudo-class ve pseudo-elementleri
  • ✅ Specificity kavramını
  • ✅ En iyi uygulamaları

CSS seçicilerinde ustalaştınız! Şimdi bu bilgileri kullanarak daha karmaşık stillendirmeler yapabilirsiniz! 🎯