Paylaştığınız
müfredat dosyasını satır satır inceleyerek,
istediğiniz kurallar doğrultusunda (süreler, "Önizleme"
yazıları, ders/saat bilgileri ve anlamsız satırlar temizlenerek) baştan sona
detaylı bir eğitim rehberi olarak tasarladım.
Dosyanın
kapsamı ve proje uygulama bölümü oldukça uzun olduğu için, içeriğin hiçbir
detayını kaybetmemek ve tam istediğiniz gibi özet yapmadan, bol örnek ve
uygulamalarla ilerlemek adına bu kılavuzu iki ana parçaya böldüm.
Bu
ilk bölümde, HTML5'in temellerini, editörleri, metin biçimlendirmeyi, stilleri,
tabloları ve formları tüm detaylarıyla ele alıyoruz.
🎯
"Öğrenecekleriniz" Bölümünün Açıklaması
Bu
kursun temel amacı, modern web geliştirme dünyasının kapılarını tamamen
sıfırdan başlayarak aralamaktır. Eğitim boyunca internetin ve web sitelerinin
arkasındaki ana mekanizma olan World Wide Web (W3)
mimarisini kavrayacaksınız. Web sitelerinin temel iskeletini oluşturan HTML
sistemini, en temel etiketlerden ileri düzey elemanlara kadar öğreneceksiniz.
Kursun
en büyük avantajlarından biri, henüz stil dili olan CSS veya programlama dili
olan JavaScript bilmeseniz bile, sadece HTML etiketlerinin kendi yeteneklerini
ve style özniteliğini (attribute)
kullanarak metinleri gelişmiş şekilde biçimlendirebilecek, tablolar, dinamik
kullanıcı formları ve hatta görsel olarak zengin, modern web siteleri
inşa edebilecek seviyeye geleceksiniz.
📘 BÖLÜM 1:
HTML5 Giriş ve Geliştirme Ortamları
1. Web'in ve HTML'in Temelleri
Web
geliştirici olma yolundaki ilk adım, kodların nerede ve nasıl çalıştığını
anlamaktır.
World Wide Web (W3) Nedir?
Dünya
çapındaki bilgisayarların birbirine bağlanarak bilgi paylaşmasını sağlayan
devasa bir ağ sistemidir. İnternet üzerindeki sayfalar, resimler ve videolar bu
sistem sayesinde adreslenir (URL) ve birbirine köprülerle (link) bağlanır.
HTML (HyperText Markup Language) Nedir?
HTML
bir programlama dili değil, bir hiper metin işaretleme dilidir. Web
sayfalarının iskeletini, yapısını ve tarayıcıya hangi içeriğin nerede
duracağını söyleyen kurallar bütününü oluşturur.
2. Kod Editörleri (Kullanım ve Dosya Oluşturma)
HTML
kodları yazmak için karmaşık programlara ihtiyacınız yoktur. Bilgisayarınızdaki
basit metin düzenleyiciler bile işinizi görür.
Microsoft Notepad
Windows
ile yerleşik gelen en basit metin editörüdür.
Notepad++
Notepad'in
gelişmiş, kod renklendirme özelliğine sahip ücretsiz bir alternatifidir.
Kodlarınızı renklendirerek hata yapmanızı engeller.
Visual Studio Code
(VS Code)
Günümüzde
profesyonel web geliştiricilerin en çok tercih ettiği modern, genişletilebilir
ve ücretsiz kod editörüdür. Otomatik tamamlama (IntelliSense)
ve canlı önizleme gibi eklentileriyle kodlama
sürecini çok hızlandırır.
3. İlk HTML Sayfa Yapısı ve Elemanları
Bir
web sayfasının tarayıcı tarafından doğru okunabilmesi için standart bir şablona
ihtiyacı vardır.
Basit Bir HTML Dokümanı Şablonu
<!DOCTYPE
html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<title>İlk Web Sayfam</title>
</head>
<body>
<h1>Merhaba Dünya!</h1>
<p>Bu
benim ilk HTML5 sayfamdır.</p>
</body>
</html>
HTML Elemanı (Tag/Etiket) Mantığı
HTML
etiketleri genellikle bir açılış etiketı, içerik ve
kapanış etiketinden oluşur.
İnternet Tarayıcılarının Rolü
Chrome,
Edge, Safari veya Firefox gibi tarayıcılar yazdığınız
HTML kodlarını doğrudan kullanıcıya göstermez. Bu kodları okur, yorumlar ve
görsel bir web sayfası haline getirerek ekrana yansıtır.
📗 BÖLÜM 2:
Temel HTML Etiketleri ve Metin Biçimlendirme
1. Başlıklar, Paragraflar ve Temel Yapılar
HTML Başlıkları (<h1> - <h6>)
Web
sayfanızdaki başlıkların önem sırasını belirtir. <h1> en büyük ve en önemli
başlığı temsil ederken, <h6>
en küçük başlıktır.
<h1>Ana Başlık (Sayfada 1
adet olmalı)</h1>
<h2>Alt Başlık</h2>
<h3>Daha Küçük Alt Başlık</h3>
HTML Paragrafları (<p>)
Düz
metinleri ve açıklamaları gruplamak için kullanılır. Her <p> etiketi otomatik olarak alt
satırdan başlar ve altına boşluk bırakır.
Satır Atlatma (<br>) ve Yatay
Çizgi (<hr>)
<p>İstanbul'un havası bugün çok güzel.<br>Yarın ise yağmur bekleniyor.</p>
<hr>
<p>Bu yeni bir konunun başlangıcıdır.</p>
2. Multimedya ve Bağlantılar
HTML Linkleri (<a>)
Kullanıcıları
başka bir web sayfasına veya aynı sayfa içinde başka bir yere yönlendirmek için
kullanılır. En önemli özniteliği href (bağlantı adresi) kısmıdır.
<a href="https://google.com" target="_blank">Google'a Git</a>
<!-- target="_blank"
linkin yeni sekmede açılmasını sağlar -->
HTML Görselleri (<img>)
Sayfaya
resim eklemek için kullanılır. Kapanış etiketi yoktur. src (resim yolu) ve alt (resim yüklenemezse görünecek alternatif metin)
özniteliklerini alır.
<img src="manzara.jpg" alt="Dağ
ve Deniz Manzarası"
width="500">
HTML Ses (<audio>) ve Video (<video>) Dünyası
Web
sayfanıza harici bir oynatıcıya ihtiyaç duymadan doğrudan medya yerleştirmenizi
sağlar.
<!-- Ses Oynatıcı -->
<audio controls>
<source src="sarki.mp3" type="audio/mpeg">
Tarayıcınız ses ögesini desteklemiyor.
</audio>
<!-- Video Oynatıcı -->
<video width="400" controls>
<source src="tanitim.mp4" type="video/mp4">
Tarayıcınız video ögesini desteklemiyor.
</video>
(Not:
controls özniteliği oynat, durdur ve
ses açma butonlarını ekrana getirir.)
3. Gelişmiş Metin Biçimlendirme Elemanları
Yazılarınızı
sadece görsel olarak değil, tarayıcılara ve arama motorlarına anlamsal (semantic) olarak da tanıtmak için bu etiketleri kullanırız.
|
Etiket |
Görevi |
Tarayıcı
Görünümü |
|
<b> |
Kalın
Yazı (Sadece görsel) |
Kalın |
|
<strong> |
Kalın
Yazı (Önemli vurgu) |
Önemli
Kalın |
|
<i> |
Eğik/İtalik
Yazı (Sadece görsel) |
İtalik |
|
<em> |
Vurgulu
İtalik Yazı (Anlamsal vurgu) |
Vurgulu
İtalik |
|
<small> |
Daha
küçük yazı boyutu |
Küçük
Metin |
|
<mark> |
Arka
planı fosforlu sarı boyalı yazı |
Vurgulanmış |
|
<del> |
Üstü
çizili yazı (Silinmiş veri) |
|
|
<ins> |
Altı
çizili yazı (Yeni eklenmiş veri) |
Eklenmiş |
|
<sub> |
Alt
simge (Örn: Kimyasal formüller) |
H2O |
|
<sup> |
Üst
simge (Örn: Matematiksel üsler) |
23
= 8 |
🎨 BÖLÜM 3:
CSS Olmadan Tasarım (Styles & Comments)
1. HTML Style Attribute (Stil
Özniteliği)
CSS
dosyası oluşturmadan, doğrudan HTML etiketlerinin içine style="..." yazarak renk, yazı boyutu ve
hizalama gibi temel tasarımsal değişiklikleri yapabilirsiniz.
Uygulamalı Stil Örnekleri
<!-- Arka Plan Rengi Değiştirme -->
<div style="background-color: lightblue; padding: 20px;">
<!--
Yazı Rengi Değiştirme -->
<h2 style="color: darkred;">Stilli Başlık</h2>
<!--
Yazı Tipi (Font) Değiştirme -->
<p
style="font-family: 'Courier New', sans-serif;">Bu yazı fontu farklıdır.</p>
<!--
Yazı Boyutu Değiştirme -->
<p
style="font-size:
24px;">Bu
yazı oldukça büyüktür.</p>
<!--
Yazı Hizalama -->
<p
style="text-align: center;">Bu metin sayfaya ortalanmıştır.</p>
</div>
2. HTML Yorum Satırı (<!-- ... -->)
Kodlarınızı
yazarken kendinize veya ekip arkadaşınıza notlar bırakmak için kullanılır.
Yorum satırları tarayıcı tarafından okunur ancak web sayfasında ziyaretçilere
gösterilmez.
<!-- Bu bir yorum satırıdır. Tarayıcı bu kısmı es geçer. -->
<p>Bu metin ekranda görünecektir.</p>
📋 BÖLÜM 4:
Listeler ve Gelişmiş Tablo Yapıları
1. HTML Listeleri
Sırasız Listeler (<ul>)
Maddelerin
başında nokta veya benzeri simgeler bulunur. Sıralama önemli olmadığında
kullanılır (Örn: Alışveriş listesi).
<ul>
<li>Elma</li>
<li>Armut</li>
<li>Muz</li>
</ul>
Sıralı Listeler (<ol>)
Maddelerin
başında 1, 2, 3 gibi sayısal veya harfsel bir düzen
bulunur. Adım adım ilerleyen durumlarda kullanılır (Örn:
Yemek tarifi).
<ol>
<li>Fırını 180
dereceye ayarlayın.</li>
<li>Malzemeleri karıştırın.</li>
<li>Keki fırına verin.</li>
</ol>
2. HTML Tabloları (<table>)
Verileri
satırlar ve sütunlar halinde düzenli bir şekilde göstermek için kullanılır.
Temel Tablo Bileşenleri:
💻 Uygulama:
Gelişmiş Seviye Tablo Yapısı (Öğrenci Not Tablosu)
<table border="1" style="border-collapse: collapse; width: 100%; text-align: left;">
<thead>
<tr
style="background-color: #f2f2f2;">
<th>Öğrenci Adı</th>
<th>Vize Notu</th>
<th>Final Notu</th>
<th>Durum</th>
</tr>
</thead>
<tbody>
<tr>
<td>Ahmet Yılmaz</td>
<td>75</td>
<td>85</td>
<td style="color: green;
font-weight: bold;">Geçti</td>
</tr>
<tr>
<td>Elif Kaya</td>
<td>40</td>
<td>50</td>
<td style="color: red;
font-weight: bold;">Kaldı</td>
</tr>
</tbody>
</table>
📝 BÖLÜM 5:
HTML Form Yapısı ve Kullanıcı Etkileşimi
Formlar,
web sitenizin ziyaretçilerinden bilgi (ad, e-posta, şifre, mesaj) toplamanızı
sağlayan en kritik yapılardır.
1. Form Elemanları ve Görevleri
2. Input Kontrol Tipleri
💻 Uygulama:
Detaylı Kullanıcı Kayıt Formu Projesi
Tüm
form elemanlarını pekiştireceğimiz kapsamlı bir kayıt formu yapalım:
<fieldset>
<legend style="font-weight: bold;
color: blue;">Yeni Üye Kayıt Formu</legend>
<form action="/kaydet_sunucu" method="POST">
<!--
Ad Soyad Girişi -->
<p>
<label for="adSoyad">Adınız ve Soyadınız:</label><br>
<input type="text" id="adSoyad" name="kullanici_ad" placeholder="Örn: Can Demirok" required>
</p>
<!--
E-posta Girişi -->
<p>
<label for="eposta">E-posta Adresiniz:</label><br>
<input type="email" id="eposta" name="kullanici_email" placeholder="ornek@alanadi.com" required>
</p>
<!--
Şifre Girişi -->
<p>
<label for="sifre">Şifre Belirleyin:</label><br>
<input type="password" id="sifre" name="kullanici_sifre" required>
</p>
<!--
Tekli Seçim: Cinsiyet (Radio Button)
-->
<p>
<label>Cinsiyetiniz:</label><br>
<input type="radio" id="erkek" name="cinsiyet" value="E">
<label for="erkek">Erkek</label>
<input type="radio" id="kadin" name="cinsiyet" value="K">
<label for="kadin">Kadın</label>
</p>
<!-- Çoklu Seçim: İlgi Alanları (Checkbox)
-->
<p>
<label>İlgi Alanlarınız (Birden fazla
seçebilirsiniz):</label><br>
<input type="checkbox" id="html5" name="ilgiler" value="HTML">
<label for="html5">HTML5 Geliştirme</label><br>
<input type="checkbox" id="tasarim" name="ilgiler" value="Tasarim">
<label for="tasarim">UI/UX Tasarım</label>
</p>
<!--
Uzun Metin Kutusu: Biyografi -->
<p>
<label for="biyo">Kendinizden Kısaca Bahsedin:</label><br>
<textarea id="biyo" name="kullanici_biyo" rows="4" cols="40" placeholder="Yazılım geçmişiniz..."></textarea>
</p>
<!--
Formu Gönderme Butonu -->
<p>
<input type="submit" value="Kayıt İşlemini Tamamla" style="background-color: green; color: white;
padding: 10px 20px; border:
none; cursor: pointer;">
</p>
</form>
</fieldset>
🏗️ BÖLÜM 6:
İleri Düzey HTML Yapı Taşları (<div> & <span>)
Web
sayfalarındaki içerikleri mantıksal kutulara bölmek ve daha sonra onları
şekillendirmek için iki temel etiket kullanırız.
1. <div> Tagı (Block-level Element)
Sayfada
blok düzeyinde alanlar oluşturur. Yani içine yazıldığı alanı tamamen
kaplar ve kendisinden sonra gelen her şeyi bir alt satıra zorlar. Web
sitelerinin Header, Sidebar,
Footer gibi ana bölümlerini kutulamak için
kullanılır.
2. <span> Tagı (Inline Element)
Satır
içi bir
etiketidir. Sadece içindeki metnin kapladığı alan kadar yer kaplar, yeni bir
satır başlatmaz. Bir paragraf içindeki tek bir kelimenin rengini veya stilini
değiştirmek istediğinizde idealdir.
💻
Karşılaştırmalı Canlı Uygulama
<!-- DIV Örneği: İki ayrı blok oluşturur -->
<div style="background-color: yellow; padding: 10px; margin-bottom: 10px;">
Bu birinci DIV bloğudur. Satırı tamamen
kaplar.
</div>
<div style="background-color: orange; padding: 10px;">
Bu ikinci DIV bloğudur. Alt satırdan
başlar.
</div>
<br><hr><br>
<!-- SPAN Örneği: Aynı satır içinde biçimlendirme yapar -->
<p>
Web sitemizde gezinirken lütfen
<span style="color: red;
font-weight: bold;">Kullanıcı Sözleşmesini</span>
dikkatlice
okuyunuz. Bu kırmızı alan bir span ile ayrılmıştır.
</p>
Harika!
HTML5 teorik yapısını, etiketleri, tabloları ve formları eksiksiz bir şekilde
tamamladığımıza göre, şimdi kursun en büyük ve en önemli kısmına geçiyoruz: 8
saat 48 dakikalık dev "MP3 İndirme Platformu" Proje Uygulaması.
Bu
bölümde, CSS ve JavaScript kullanmadan, sadece saf HTML5 yeteneklerini,
gelişmiş etiketleri (<div>, <span>), çoklu ortam öğelerini (<audio>), gelişmiş formları ve
tabloları
harmanlayarak modern bir müzik portalı inşa edeceğiz.
Müfredat
listesindeki tüm adımları, süreleri ve anlamsız ifadeleri temizleyerek, satır
satır mantığını açıklayarak, bol kod örneği ve tam
tasarımlarla projenin sonuna kadar eksiksiz ilerliyoruz.
🚀 BÖLÜM 7:
Büyük Proje Uygulaması – MP3 İndirme Platformu
1. Proje Hazırlığı ve Materyal Temini
Bir
web sitesi yapmaya başlamadan önce, projenin klasör yapısını kurmalı ve
kullanacağımız tüm materyalleri (ses dosyaları, sanatçı resimleri, ikonlar)
organize etmeliyiz.
2. Ana Sayfa İskeletinin İnşası (Home Page)
Web
sitemizin giriş sayfası üç ana bölümden oluşur: Üst bilgi (Header),
Ana içerik (Main Content) ve Alt bilgi (Footer).
🏷️ Home Page - Header (Üst Menü ve Logo Alanı)
Header bölümünde sitemizin adı (Logo) ve kullanıcıların sayfalar
arasında geçiş yapmasını sağlayacak bir navigasyon menüsü (Navigation
Bar) yer alır. CSS kullanmadığımız için elemanları yan yana getirmek veya
hizalamak için style niteliğindeki display: flex; veya alternatif HTML
hizalamalarını kullanacağız.
<!-- Home Page - Header
Bölümü -->
<header style="background-color: #2c3e50; color: white; padding:
20px; display: flex; justify-content: space-between; align-items: center;">
<!--
Logo Alanı -->
<div
style="font-size:
24px; font-weight: bold;">
🎵 MuZikDünyası<span
style="color: #e74c3c;">.com</span>
</div>
<!--
Navigasyon Çubuğu (Navigation Bar) -->
<nav>
<a
href="index.html" style="color: white;
text-decoration: none; margin-right: 15px; font-weight: bold;">Ana Sayfa</a>
<a
href="trendler.html" style="color: #bdc3c7; text-decoration: none; margin-right: 15px;">Trendler</a>
<a
href="turkce.html" style="color: #bdc3c7; text-decoration: none; margin-right: 15px;">Türkçe Pop</a>
<a
href="yabanci.html" style="color: #bdc3c7; text-decoration: none; margin-right: 15px;">Yabancı Hit</a>
<a
href="sanatcilar.html" style="color: #bdc3c7; text-decoration: none; margin-right: 15px;">Sanatçılar</a>
<a
href="iletisim.html" style="color: #bdc3c7; text-decoration: none; font-weight: bold; background-color: #e74c3c; padding: 5px
10px; border-radius: 3px;">İletişim</a>
</nav>
</header>
📑 Home Page -
Main Content (Ana İçerik Alanı)
Ana
içerik bölümü sitemizin gövdesidir. Burada hoş geldiniz mesajı, öne çıkan
albümler ve popüler müzik listeleri sergilenir. Yapıyı bloklara bölmek için <div> etiketlerini etkili bir
şekilde kullanıyoruz.
<!-- Home Page - Main Content Bölümü
-->
<main style="padding: 30px; font-family: Arial, sans-serif; background-color:
#f9f9f9;">
<!--
Bölüm 1: Karşılama ve Tanıtım -->
<div
style="text-align: center; margin-bottom: 40px; background-color:
#ffffff; padding: 30px; border-radius:
8px; box-shadow: 0px 2px 5px rgba(0,0,0,0.1);">
<h1 style="color: #2c3e50; font-size:
32px;">Sınırsız
MP3 Dinleme ve İndirme Platformuna Hoş Geldiniz</h1>
<p
style="color: #7f8c8d; font-size: 16px;">En güncel şarkıları, albümleri ve
sanatçı profillerini tek bir tıkla keşfedin. Tamamen yasal ve yüksek kaliteli
ses deneyimi!</p>
</div>
<!--
Bölüm 2: Haftanın Popüler Şarkıları Listesi (Tablo Yapısıyla) -->
<div
style="margin-bottom: 40px;">
<h2 style="color: #2c3e50; border-left: 5px solid #e74c3c; padding-left: 10px; margin-bottom:
20px;">🔥
Haftanın En Çok İndirilenleri</h2>
<table border="0" style="width: 100%; border-collapse:
collapse; background-color:
white; box-shadow: 0px 2px
5px rgba(0,0,0,0.05);">
<thead>
<tr
style="background-color: #34495e; color: white; text-align: left;">
<th style="padding: 12px;">Sıra</th>
<th style="padding: 12px;">Şarkı Adı</th>
<th style="padding: 12px;">Sanatçı</th>
<th style="padding: 12px;">Dinle</th>
<th style="padding: 12px;">İşlem</th>
</tr>
</thead>
<tbody>
<tr
style="border-bottom: 1px solid
#eee;">
<td style="padding: 12px; font-weight: bold;">1</td>
<td style="padding: 12px;">Ateş ve Barut</td>
<td style="padding: 12px;">Murat Boz</td>
<td style="padding: 12px;"><audio controls style="height: 30px;"><source src="sesler/murat-boz.mp3" type="audio/mpeg"></audio></td>
<td style="padding: 12px;"><a
href="sesler/murat-boz.mp3" download style="color: #27ae60; font-weight: bold; text-decoration: none;">📥 MP3 İndir</a></td>
</tr>
<tr
style="border-bottom: 1px solid
#eee;">
<td style="padding: 12px; font-weight: bold;">2</td>
<td style="padding: 12px;">Shape of You</td>
<td style="padding: 12px;">Ed Sheeran</td>
<td style="padding: 12px;"><audio controls style="height: 30px;"><source src="sesler/ed-sheeran.mp3" type="audio/mpeg"></audio></td>
<td style="padding: 12px;"><a
href="sesler/ed-sheeran.mp3" download style="color: #27ae60; font-weight: bold; text-decoration: none;">📥 MP3 İndir</a></td>
</tr>
</tbody>
</table>
</div>
</main>
👣 Home Page - Footer (Alt Bilgi Alanı)
Telif
hakkı bildirimleri, sosyal medya bağlantı simgeleri ve kısa site bilgilerinin
yer aldığı, sayfanın en alt kapanış kısmıdır.
<!-- Home Page - Footer
Bölümü -->
<footer style="background-color: #2c3e50; color: #bdc3c7; text-align: center; padding: 20px; font-size:
14px; margin-top: 20px;">
<p>© 2026 MuZikDünyası.com - Tüm Hakları
Saklıdır.</p>
<p>
<a
href="#" style="color: #e74c3c; text-decoration: none; margin: 0 10px;">Kullanım Şartları</a>
|
<a
href="#" style="color: #e74c3c; text-decoration: none; margin: 0 10px;">Gizlilik Politikası</a>
|
<a
href="iletisim.html" style="color: #e74c3c; text-decoration: none; margin: 0 10px;">Bize Ulaşın</a>
</p>
</footer>
3. Navigasyon Sayfalarının Detaylı Tasarımı
📞 Navigation Bar - Contact (İletişim Sayfası)
Kullanıcıların
site yönetimiyle iletişime geçebileceği, istek parça gönderebileceği, Bölüm
5'te öğrendiğimiz gelişmiş form yapısını içeren iletisim.html sayfasıdır.
<!-- iletisim.html İçerik Bloğu -->
<div style="max-width: 600px; margin: 30px auto; background: white; padding: 25px; border-radius: 8px; box-shadow: 0
2px 10px rgba(0,0,0,0.1); font-family:
sans-serif;">
<h2 style="color: #2c3e50; border-bottom: 2px solid #e74c3c;
padding-bottom: 10px;">📩 İletişim & İstek Parça Formu</h2>
<form action="#" method="POST">
<p>
<label for="isim" style="font-weight: bold;">Adınız Soyadınız:</label><br>
<input type="text" id="isim" name="isim" style="width: 100%; padding:
8px; margin-top: 5px; box-sizing:
border-box;" required>
</p>
<p>
<label for="email" style="font-weight: bold;">E-posta Adresiniz:</label><br>
<input type="email" id="email" name="email" style="width: 100%; padding:
8px; margin-top: 5px; box-sizing:
border-box;" required>
</p>
<p>
<label for="konu" style="font-weight: bold;">Mesaj Konusu:</label><br>
<select id="konu" name="konu" style="width: 100%; padding:
8px; margin-top: 5px;">
<option value="istek">İstek Şarkı Bildirimi</option>
<option value="hata">Hatalı/Kırık Link Bildirimi</option>
<option value="reklam">Reklam ve İş Birliği</option>
</select>
</p>
<p>
<label for="mesaj" style="font-weight: bold;">Mesajınız / Şarkı Talebiniz:</label><br>
<textarea id="mesaj" name="mesaj" rows="5" style="width: 100%; padding:
8px; margin-top: 5px; box-sizing:
border-box;" required></textarea>
</p>
<p>
<input type="submit" value="Mesajı Gönder" style="background-color: #e74c3c; color: white; border:
none; padding: 10px 20px;
font-weight: bold; cursor: pointer; border-radius: 4px;">
</p>
</form>
</div>
🎤 Navigation Bar - Artists & Profiles
(Sanatçılar ve Profil Sayfaları)
Ziyaretçilerin
sanatçıları liste halinde görebileceği (sanatcilar.html) ve bir sanatçıya tıkladığında açılacak biyografi ve albüm
listesini içeren profil tasarımlarıdır.
Sanatçılar
Listesi Alanı (sanatcilar.html - Görsel Izgara Tasarımı)
<div style="padding: 20px; font-family: Arial, sans-serif;">
<h2 style="color: #2c3e50; text-align: center; margin-bottom: 30px;">⭐ Popüler Sanatçılar</h2>
<!--
Yan Yana Sanatçı Kartları Bloğu -->
<div
style="display: flex; justify-content: center; gap: 30px; flex-wrap: wrap;">
<!--
Sanatçı Kartı 1 -->
<div
style="width: 200px; text-align: center; background: white; padding: 15px; border-radius:
8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1);">
<img src="resimler/murat-boz.jpg" alt="Murat
Boz"
style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;">
<h3 style="margin: 10px 0 5px 0; color: #2c3e50;">Murat Boz</h3>
<p
style="color: #7f8c8d; font-size: 13px;">Türkçe Pop</p>
<a
href="murat-boz-profil.html" style="display: inline-block; background-color: #34495e;
color: white; text-decoration: none; padding: 6px 12px; font-size: 12px; border-radius:
4px; margin-top: 5px;">Profile Git</a>
</div>
<!--
Sanatçı Kartı 2 -->
<div
style="width: 200px; text-align: center; background: white; padding: 15px; border-radius:
8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1);">
<img src="resimler/ed-sheeran.jpg" alt="Ed
Sheeran" style="width: 120px; height: 120px; border-radius:
50%; object-fit: cover;">
<h3 style="margin: 10px 0 5px 0; color: #2c3e50;">Ed Sheeran</h3>
<p
style="color: #7f8c8d; font-size: 13px;">Yabancı Pop / Pop Rock</p>
<a
href="ed-sheeran-profil.html" style="display: inline-block; background-color: #34495e;
color: white; text-decoration: none; padding: 6px 12px; font-size: 12px; border-radius:
4px; margin-top: 5px;">Profile Git</a>
</div>
</div>
</div>
Örnek
Sanatçı Detay Profili Sayfası (murat-boz-profil.html)
<div style="padding: 30px; font-family: sans-serif; max-width: 800px; margin: 0 auto; background: white; border-radius: 8px; box-shadow: 0
2px 8px rgba(0,0,0,0.1);">
<!--
Üst Banner Alanı -->
<div
style="display: flex; align-items: center; gap: 20px; border-bottom: 2px solid #eee; padding-bottom:
20px;">
<img src="resimler/murat-boz.jpg" alt="Murat
Boz"
style="width: 150px; height: 150px; border-radius: 10px; object-fit: cover;">
<div>
<h1 style="margin: 0; color:
#2c3e50;">Murat
Boz</h1>
<p
style="color: #7f8c8d; font-style: italic;">Doğum: 7 Mart 1980 | Tür: Türkçe Pop</p>
<p
style="font-size:
14px; color: #34495e; line-height:
1.5;">Murat
Boz, Türk şarkıcı, söz yazarı ve oyuncu. 2000'lerin başından itibaren çıkardığı hit
parçalarla Türk pop müziğinin en önemli isimlerinden biri haline gelmiştir.</p>
</div>
</div>
<!--
Sanatçıya Ait Şarkı Panelleri -->
<h3 style="color: #e74c3c; margin-top: 25px;">🎵 Sanatçının Popüler Parçaları</h3>
<!--
Şarkı Oynatma Panelleri alt alta listelenir -->
<div
style="background:
#f8f9fa; padding: 15px; border-radius:
6px; display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px;">
<span><strong>1. Ateş ve Barut</strong> (Süre: 3:45)</span>
<audio controls style="height: 32px;"><source src="sesler/murat-boz.mp3" type="audio/mpeg"></audio>
<a
href="sesler/murat-boz.mp3" download style="background:
#27ae60; color: white; padding: 5px 10px; text-decoration:
none; border-radius: 4px;
font-size: 12px;">İndir</a>
</div>
</div>
4. Kategori Bazlı Şarkı Listeleme Sayfaları
📈 Navigation Bar - Trends (Trend Şarkılar Sayfası)
Dünya
genelinde ve platformda anlık olarak yükselişte olan, en çok aranan 10 popüler
parçanın sıralı liste (<ol>)
mantığıyla estetik bir şekilde sunulduğu trendler.html sayfasıdır.
🇹🇷 Navigation Bar - Turkish Songs (Türkçe Şarkılar
Sayfası)
Sadece
yerel sanatçıların, Türkçe pop, rap, rock tarzındaki
parçalarının süzülerek listelendiği, indirme butonlarının yeşil temalı aksiyon
butonlarıyla tasarlandığı kategoridir.
🗺️ Navigation Bar - Foreign Songs (Yabancı Şarkılar
Sayfası)
Billboard
listeleri başta olmak üzere küresel hit müziklerin, yabancı albüm kapaklarının
ve telifsiz önizleme ses dosyalarının yer aldığı
kategoridir.
5. 🛠️ Uygulama:
Şarkı İndirme Panelleri (Song Download
Panels)
Kullanıcı
deneyimini en üst seviyeye çıkarmak adına, platformdaki tüm şarkı dinleme ve
indirme butonlarını standart, temiz ve göze hoş gelen bağımsız kart (panel)
tasarımlarına dönüştürüyoruz.
<!-- Tekli Şarkı İndirme Paneli Şablonu (Kapsamlı Örnek) -->
<div style="background: white; border: 1px solid #e0e0e0; border-radius: 6px; padding:
15px; display: flex; align-items: center; justify-content: space-between; margin-bottom: 15px; font-family:
Arial, sans-serif;">
<!--
Sol Taraf: Albüm Resmi ve Şarkı Bilgisi -->
<div
style="display: flex; align-items: center; gap: 15px;">
<div
style="width: 50px; height: 50px;
background-color: #e74c3c; color:
white; display: flex; align-items: center; justify-content: center; border-radius: 4px; font-weight: bold; font-size:
20px;">
🎼
</div>
<div>
<h4 style="margin: 0; color:
#2c3e50; font-size: 16px;">Geri Dönüş Olsa</h4>
<p
style="margin: 3px 0 0 0; color:
#7f8c8d; font-size: 13px;">Murat Boz • Albüm: Janti</p>
</div>
</div>
<!--
Orta Taraf: Canlı Önizleme Oynatıcı -->
<div>
<audio controls style="height: 35px;">
<source src="sesler/murat-boz-2.mp3" type="audio/mpeg">
Tarayıcınız ses ögesini
desteklemiyor.
</audio>
</div>
<!--
Sağ Taraf: İndirme Butonu -->
<div>
<a
href="sesler/murat-boz-2.mp3" download="Murat Boz - Geri Donus
Olsa.mp3"
style="background-color: #27ae60; color: white; text-decoration: none; padding: 8px 16px; border-radius: 4px; font-size: 14px; font-weight: bold; display:
inline-block; transition:
background 0.2s;">
📥 Güvenli İndir (MP3)
</a>
</div>
</div>
6. 📝 Navigation Bar - Recently Added Album [ÖDEV PROJESİ]
Müfredatımızın
son bölümü, öğrendiğiniz tüm bu bilgileri birleştirerek kendi başınıza yapmanız
beklenen bir Uygulama Ödevidir.
🎯 Ödevin
Amacı ve Talimatlar:
Sitenin
navigasyon barına bağlanacak son-eklenenler.html adında yeni bir sayfa
oluşturun. Bu sayfada platforma sistemsel olarak en son yüklenmiş 3 yeni
albümü tanıtacaksınız.
Paylaştığınız
ders müfredatını en ince ayrıntısına kadar, hiçbir konuyu atlamadan ve özet
geçmeden satır satır ele alarak kapsamlı bir
eğitim rehberine dönüştürüyoruz. İstediğiniz gibi süreleri, "Önizleme" yazılarını, "ders"
istatistiklerini ve anlamsız satırları temizleyerek tamamen kod örneklerine,
teorik açıklamalara ve pratik uygulamalara odaklanıyoruz.
Müfredat
çok uzun ve detaylı olduğu için, kaliteden ödün vermemek adına bu içeriği parça
parça işleyeceğiz. İlk bölümde kursun temel vaatlerini ve ilk ana modül
olan HTML Temelleri (HTML Fundamentals) kısmını eksiksiz şekilde
tasarlıyoruz.
🌟
"Öğrenecekleriniz" Bölümünün Detaylı Açıklaması
Bu
kurs, sıfırdan başlayarak profesyonel bir web geliştirici (Frontend
Developer) olmanız için tasarlanmıştır. Bu bölümde vadedilen yetkinliklerin
analizi şöyledir:
🛠️ BÖLÜM 1:
Web Geliştirmeye Giriş ve İlk Sayfa
Web Geliştirmeye Üst Düzey Bakış (A High-Level Overview of Web Development)
Web
geliştirme temel olarak ikiye ayrılır: Frontend
(Kullanıcının gördüğü arayüz) ve Backend
(Sunucu ve veri tabanı işlemleri). Biz bu müfredatta web sitelerinin yüzünü,
yani Frontend dünyasını inşa ediyoruz.
Kod Editörünün Kurulması (Setting Up Our Code
Editor)
Dünya
standartlarında en popüler kod editörü olan Visual Studio
Code (VS Code)
programını kullanacağız. Kod yazarken hız kazanmak için içerisindeki Emmet kısayollarından ve sayfayı kaydettiğimiz an
tarayıcıda otomatik güncellenmesini sağlayan Live Server eklentisinden
yararlanacağız.
İlk Web Sayfanız! (Your Very First Webpage!)
Bir
web sayfasının çalışabilmesi için bilgisayarımıza dosya uzantısının .html olduğunu söylememiz gerekir.
<!-- index.html -->
Merhaba
Dünya! Bu benim ilk web sayfam.
Tarayıcı
bu dosyayı okuduğunda ekrana direkt bu yazıyı basar. Ancak profesyonel
standartlarda bu şekilde ham yazı yazılmaz, HTML standartlarına uyulur.
🏗️ BÖLÜM 2:
HTML Temelleri (HTML Fundamentals)
HTML Belge Yapısı (HTML Document Structure)
Her
HTML dosyası belirli bir hiyerarşik şablonla başlamak zorundadır. Bu şablon
tarayıcıya sayfa hakkında teknik bilgiler verir.
Kod
Tasarımı ve Uygulama:
<!DOCTYPE
html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,
initial-scale=1.0">
<title>Benim Modern Portfolyom</title>
</head>
<body>
<!--
Kullanıcının göreceği tüm içerikler buraya yazılır -->
<h1>Web Siteme Hoş Geldiniz</h1>
</body>
</html>
Metin Elemanları (Text Elements)
HTML'de başlıklar ve paragraflar anlamsal önem sırasına göre
dizilir.
Kod
Tasarımı ve Uygulama:
<h1>Ana Başlık (Sayfada sadece 1
adet olmalıdır)</h1>
<h2>Alt Başlık (Önemli kategoriler
için)</h2>
<h3>Alt Kategorinin Başlığı</h3>
<h4>Daha Küçük Başlık</h4>
<h5>Yan Başlık</h5>
<h6>En Küçük Başlık</h6>
<p>Bu bir paragraf etiketidir. Web sitenizdeki tüm
düz yazılar, açıklamalar ve blog içerikleri bu etiket kullanılarak yazılır.
Paragraflar kendiliğinden alt satıra geçer ve altlarında hafif bir boşluk bırakırlar.</p>
<p>Yazı içinde <strong>kalın yazmak istediğimiz alanları</strong> strong
içine alırız. Vurgulamak istediğimiz yerleri ise <em>eğik
(italik) yani em etiketleriyle</em> belirtiriz.</p>
Daha Fazla Metin Elemanı: Listeler (More
Text Elements: Lists)
Web
tasarımında menüler, özellik listeleri veya maddelendirmeler için iki tür liste
kullanılır: Sıralı (<ol>)
ve Sırasız (<ul>).
Kod
Tasarımı ve Uygulama:
<!-- Sırasız Liste (Genelde menüler ve madde işaretleri için) -->
<h3>Alışveriş Listesi</h3>
<ul>
<li>Süt</li>
<li>Yumurta</li>
<li>Ekmek</li>
</ul>
<!-- Sıralı Liste (Aşamalı işlemler veya sıralamalar için) -->
<h3>Yemek Tarifi Adımları</h3>
<ol>
<li>Soğanları küp küp
doğrayın.</li>
<li>Tencereye yağı ekleyip soğanları
pembeleşene kadar kavurun.</li>
<li>Salçayı ve suyu ekleyip kaynamaya
bırakın.</li>
</ol>
Görseller ve Öznitelikler (Images and Attributes)
HTML
etiketlerine ek özellikler kazandıran yapılara Attribute
(Öznitelik) denir. Resim eklemek için kullandığımız <img> etiketinin kapanış ortağı
yoktur (Self-closing) ve çalışmak için iki zorunlu attribute ister: src (kaynak yolu) ve alt (alternatif metin).
Kod
Tasarımı ve Uygulama:
<img src="https://unsplash.com"
alt="Laptop önünde çalışan bir web geliştirici"
width="600"
height="400">
Bağlantılar - Linkler (Hyperlinks)
Sayfalar
arası geçiş yapmak veya dış bir web sitesine yönlendirme sağlamak için <a> (Anchor)
etiketi kullanılır. En önemli attribute'u href (Hedef adres) yapısıdır.
Kod
Tasarımı ve Uygulama:
<!-- Dış bağlantı ve yeni sekmede açma -->
<a href="https://google.com" target="_blank">Google'a Git (Yeni Sekme)</a>
<!-- Sayfa içi iç bağlantı (Sayfa tasarımında aşağı kaydırma için)
-->
<a href="#iletisim-bolumu">İletişime Kaydır</a>
<!-- E-posta veya Telefon Tetikleme -->
<a href="mailto:info@kodlama.com">Bize E-posta Gönder</a>
<a href="tel:+905555555555">Bizi Ara</a>
Sayfamızı Yapılandırma ve Semantik HTML (Structuring
our Page & Semantic HTML)
Eski
web tasarımında her yer <div> (anlamsız kutu) etiketleriyle dolduruluyordu. Modern HTML5
ile beraber, arama motorlarının sitenin neresinde ne olduğunu anlaması için Semantik
(Anlamsal) Etiketler geldi.
Yapısal
Mimari Tasarımı:
<header>
<!--
Sitenin en üst kısmı: Logo ve Navigasyon Menüsü -->
<nav>
<ul>
<li><a
href="#">Anasayfa</a></li>
<li><a
href="#">Hizmetler</a></li>
<li><a
href="#">Blog</a></li>
</ul>
</nav>
</header>
<main>
<!--
Sitenin ana ve özgün içeriği burada yer alır -->
<section>
<!--
Birbiriyle ilişkili içeriklerin toplandığı genel bölümler -->
<h2>Hakkımızda</h2>
<p>Geliştirme
ekibimiz profesyonel çözümler üretir.</p>
</section>
<section>
<h2>Son Blog Yazıları</h2>
<article>
<!--
Tek başına anlam ifade eden bağımsız yazılar, haberler veya kartlar -->
<h3>HTML5'in
Gücü</h3>
<p>Semantik
kod yazarak SEO skorlarınızı uçurun...</p>
</article>
</section>
<aside>
<!--
Ana içerikle dolaylı yoldan ilişkili yan menü, reklamlar veya kategoriler
-->
<h3>Kategoriler</h3>
<p>Yazılım,
Tasarım, Yaşam</p>
</aside>
</main>
<footer>
<!--
Sitenin en alt kısmı: Telif hakları, sosyal medya linkleri ve iletişim
bilgileri -->
<p>© 2026 Tüm Hakları Saklıdır.</p>
</footer>
🏆 HTML
UYGULAMA PROJESİ (Challenge #1 & #2 Birleşimi)
Şu
ana kadar öğrendiğimiz tüm HTML bilgilerini bir araya getirerek anlamlı,
semantik ve eksiksiz bir Blog Makale Sayfası inşa ediyoruz.
Kodların
Tamamı:
<!DOCTYPE
html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,
initial-scale=1.0">
<title>Teknoloji Blogu | Geliştirici
Günlükleri</title>
</head>
<body>
<header>
<h1>CodeCraft
Teknoloji Blogu</h1>
<nav>
<ul>
<li><a
href="#makale">Makaleyi Oku</a></li>
<li><a
href="#yazar">Yazar Hakkında</a></li>
<li><a
href="#bulten">Bültene Abone Ol</a></li>
</ul>
</nav>
</header>
<main>
<article id="makale">
<header>
<h2>Neden Web Geliştirici
Olmalısınız?</h2>
<p>Yayınlanma
Tarihi: <strong>4 Eylül 2026</strong> | Yazar: <em>Ahmet
Yılmaz</em></p>
</header>
<p>Günümüz
dijital dünyasında web siteleri ve uygulamaları hayatımızın merkezinde yer
alıyor. Bu ekosistemi inşa eden <strong>Web Geliştiricilerine (Web Developers)</strong> olan ihtiyaç her geçen gün
artıyor.</p>
<img src="https://unsplash.com" alt="Kod
satırları gösteren bilgisayar ekranı" width="1000">
<h3>Web Geliştirmenin 3
Temel Taşı</h3>
<p>Bir
web projesi geliştirirken aşağıdaki teknolojiler senkronize şekilde
çalışır:</p>
<ul>
<li><strong>HTML5:</strong> Sayfa yapısını ve içeriğini belirler.</li>
<li><strong>CSS3:</strong> Görsel tasarımı ve düzeni ayarlar.</li>
<li><strong>JavaScript:</strong> Sayfayı etkileşimli hale getirir.</li>
</ul>
<h3>Öğrenme Sürecinde Dikkat Edilmesi
Gerekenler</h3>
<ol>
<li>Hergün
düzenli olarak kod yazın ve pratik yapın.</li>
<li>Başkalarının yazdığı açık kaynaklı
kodları inceleyin.</li>
<li>Hata yapmaktan korkmayın, hata çözmek
sizi geliştirir.</li>
</ol>
<p>Daha
detaylı bilgi edinmek için <a href="https://mozilla.org" target="_blank">MDN Web Docs</a>
dökümanlarını inceleyebilirsiniz.</p>
</article>
<hr>
<section id="yazar">
<h3>Yazar Hakkında</h3>
<p>Ahmet
Yılmaz, 10 yılı aşkın süredir sektörde aktif olarak
Frontend mimarileri üzerine çalışan bir kıdemli
yazılım geliştiricidir.</p>
</section>
<section id="bulten">
<h3>Yeni Yazılardan Haberdar Olun</h3>
<p>E-posta
listemize katılarak haftalık içerikleri kaçırmayın.</p>
<!--
Form elemanları bir sonraki aşamalarda derinleşecektir -->
<a
href="mailto:bulten@codecraft.com">Kayıt İçin Bize Yazın</a>
</section>
</main>
<footer>
<p>© 2026 CodeCraft.
Geleceği Kodlayanlar Topluluğu.</p>
</footer>
</body>
</html>
Harika!
HTML iskeletimizi kusursuz bir şekilde kurduğumuza göre, şimdi bu iskelete ruh,
renk ve şekil vereceğimiz CSS Temelleri (CSS Fundamentals) bölümüne
satır satır geçiş yapıyoruz.
Müfredattaki
tüm teorik başlıkları, tarayıcı arka plan mekanizmalarını ve pratik geliştirici
becerilerini yine sürelerden ve anlamsız satırlardan arındırarak en detaylı
haliyle, örnek uygulamalarla tasarlıyoruz.
🎨 BÖLÜM 3:
CSS Temelleri (CSS Fundamentals)
CSS'e Giriş (Introduction to CSS)
CSS
(Cascading Style Sheets),
HTML ile yazdığımız düz metin ve elemanların tarayıcıda nasıl görüneceğini
belirleyen stil dilidir. Bir CSS kuralı iki ana parçadan oluşur: Seçici (Selector) ve Bildirim Bloku (Declaration
Block).
/* CSS Anatomisi */
secici {
ozellik:
deger;
}
Satır İçi, Dahili ve Harici CSS (Inline,
Internal and External CSS)
CSS
kodlarını HTML sayfamıza entegre etmenin 3 farklı yolu vardır. Profesyonel
projelerde kod karmaşasını önlemek için Harici CSS yöntemi zorunludur.
1.
Satır İçi (Inline) CSS:
Doğrudan
HTML etiketinin içine style attribute'u yazılarak uygulanır.
Sadece tek bir elemana anlık müdahale için kullanılır, bakımı çok zordur.
<h1 style="color: blue;
font-size: 24px;">Satır
İçi Stillendirilmiş Başlık</h1>
2.
Dahili (Internal) CSS:
HTML
dosyasının <head> bölümünün içine <style> etiketleri açılarak yazılır.
Sadece o HTML sayfasına özel stiller için tercih edilir.
<head>
<style>
p {
color: green;
line-height: 1.6;
}
</style>
</head>
3.
Harici (External) CSS (En Profesyonel Yöntem):
Stiller
tamamen bağımsız bir .css
uzantılı dosyada (örneğin style.css) toplanır. HTML sayfasının <head> kısmına <link> etiketiyle bağlanır. Bu
sayede bir CSS dosyasıyla yüzlerce HTML sayfasını aynı anda stillendirebilirsiniz.
<!-- index.html içindeki bağlantı -->
<head>
<link rel="stylesheet" href="style.css">
</head>
Metin Stillendirme (Styling Text)
Web
tasarımında okunabilirlik en önemli unsurdur. CSS ile metinlerin boyutunu,
kalınlığını, yazı tipini ve satır boşluklarını tam yetkiyle yönetebiliriz.
Kod
Tasarımı ve Uygulama:
/* style.css */
p
{
font-family: 'Helvetica', Arial, sans-serif;
/* Yazı tipi ailesi */
font-size: 18px; /* Yazı boyutu */
font-weight: 400; /* Yazı kalınlığı (400=Normal, 700=Bold)
*/
line-height:
1.6; /* Satırlar arası boşluk oranı */
text-align:
justify; /* Metni iki yana yaslama */
text-transform:
capitalize; /* Her kelimenin ilk harfini büyük yapma */
letter-spacing:
0.5px; /* Harfler arası boşluk */
}
Seçicileri Birleştirme, Class ve ID Seçicileri (Combining Selectors, Class and ID Selectors)
HTML
elemanlarını hedef alırken nokta atışı yapabilmek için farklı seçici türlerini
ve bunları birleştirmeyi bilmemiz gerekir.
1.
Element Seçici:
Doğrudan
etiket adını hedef alır. Sayfadaki tüm o etiketleri etkiler.
h2
{ color: darkred; }
2.
Class (Sınıf) Seçici (Önemli):
Aynı
stilleri birden fazla elemana uygulamak istediğimizde kullanılır. HTML'de class="..." tanımlanır, CSS'te başına nokta (.) konularak çağrılır.
<!-- HTML -->
<div class="card-box">Kart İçeriği</div>
<div class="card-box">Başka Bir Kart</div>
/* CSS */
.card-box {
background-color: #f4f4f4;
border:
1px solid #ddd;
}
3.
ID Seçici:
Sayfada
sadece tek bir benzersiz elemana özel stil vermek veya JavaScript ile
yakalamak için kullanılır. HTML'de id="..." tanımlanır, CSS'te başına kare (#) konularak çağrılır.
<!-- HTML -->
<footer id="main-footer">Alt Bilgi</footer>
/* CSS */
#main-footer
{
background-color: #333;
color:
white;
}
4.
Seçicileri Birleştirme (Kombinatörler):
Bir
elemanın altındaki başka bir elemanı hedeflemek veya birden fazla seçiciye aynı
stili vermek için kullanılır.
/* Gruplama: Hem h1
hem h2 hem de p elemanlarına aynı yazı tipini uygula */
h1,
h2, p {
font-family: sans-serif;
}
/* Torun (Descendant) Seçici: Sadece .article-container içindeki
p etiketlerini etkile */
.article-container p {
color:
#555;
}
Renklerle Çalışmak (Working With Colors)
CSS'te renk tanımlamanın modern web tasarımında kullanılan 3 ana
yöntemi vardır:
Kod
Tasarımı ve Uygulama:
.card {
color:
#2c3e50; /* Koyu Gri-Mavi Hex Kodu */
background-color: rgba(52,
152, 219, 0.2); /*
%20 şeffaflıkta açık mavi background */
border-color:
rgb(46, 204, 113); /*
Saf yeşil */
}
Pseudo-classes (Yalancı
Sınıflar) ve Hiperlinklerin Stillendirilmesi
Elemanların
belirli durumlarına (örneğin üzerine gelindiğinde, tıklandığında veya kaçıncı
eleman olduğuna) stil vermek için Yalancı Sınıflar kullanılır. Bağlantı
etiketleri (<a>)
bunun en net örneğidir.
Kod
Tasarımı ve Uygulama:
/* Linkin ilk, yalın
hali */
a:link
{
color:
#3498db;
text-decoration:
none; /*
Alt çizgiyi kaldır */
}
/* Ziyaret edilmiş
link durumu */
a:visited {
color:
#9b59b6;
}
/* Fare ile linkin
üzerine gelindiğinde (Hover Durumu) */
a:hover {
color:
#2980b9;
text-decoration:
underline; /*
Alt çizgiyi geri getir */
}
/* Linke tıklandığı an
(Active Durumu) */
a:active {
color:
red;
}
/* Liste
elemanlarından sadece İLKİNE stil vermek */
li:first-child {
font-weight: bold;
}
/* Liste
elemanlarından sadece SONUNCUSUNA stil vermek */
li:last-child {
border-bottom:
none;
}
Geliştirici Becerisi: Chrome DevTools
Kullanımı (Using Chrome DevTools)
Bir
web geliştiricinin en büyük silahı tarayıcı geliştirici araçlarıdır. Tarayıcıda
boş bir yere sağ tıklayıp "İncele" (Inspect)
dediğinizde açılan panelde şunları yapabilirsiniz:
📐 BÖLÜM 4:
Gelişmiş CSS Teorisi ve Kutu Modeli (CSS Box Model)
CSS Teorisi 1: Seçici Çakışmaları ve Öncelik Sıralaması (Specificity)
Tarayıcı,
aynı HTML elemanına birden fazla yerden farklı stiller tanımlandığında
hangisini uygulayacağına Öncelik Puanına (Specificity)
bakarak karar verir.
Puanlama
Hiyerarşisi (Zayıftan Güçlüye):
Eğer
puanlar tamamen eşitse, CSS dosyasında en altta (en son) yazılan kod
geçerli olur.
CSS Teorisi 2: Kalıtım ve Evrensel Seçici (Inheritance & The Universal Selector)
Bazı
CSS özellikleri (özellikle yazı tipi, renk ve satır yükseklikleri gibi metin
özellikleri) üst elemandan (Parent) alt elemana
(Child) otomatik olarak miras kalır. Buna Kalıtım (Inheritance)
denir. Genişlik, yükseklik, margin ve padding gibi yapısal özellikler ise asla miras kalmaz.
Kod
Tasarımı ve Uygulama:
/* Evrensel Seçici:
Sayfadaki istisnasız TÜM elemanları seçer */
*
{
margin:
0;
padding: 0;
box-sizing:
border-box; /*
İlerleyen maddede detaylandırılacak kritik kural */
}
/* Kalıtım Örneği: Body'e verilen yazı tipi altındaki tüm p, h1, span
etiketlerine geçer */
body
{
font-family: 'Segoe
UI', sans-serif;
color:
#333;
}
CSS Teorisi 3 & 4: CSS Kutu Modeli ve Kutu Türleri (The CSS Box Model & Types of Boxes)
Tarayıcı
gözünde, web sayfasındaki her bir HTML elemanı dört katmandan oluşan
dikdörtgen bir kutudur.
+-----------------------------------+
| MARGIN |
| +-------------------------+ |
| |
BORDER | |
| |
+---------------+ | |
| |
| PADDING |
| |
| |
| +-------+ |
| |
| |
| |CONTENT| |
| |
| |
| +-------+ |
| |
| |
+---------------+ | |
| +-------------------------+ |
+-----------------------------------+
Kutu
Türleri (Display Property):
Ölçülendirme, Boşluklar ve Sayfa Ortalama (Dimensions, Margins, Paddings and Centering)
Kutu
modelini yönetirken değerleri tek tek (top, right, bottom, left) verebileceğimiz
gibi Shorthand (Kısa Yazım) yöntemiyle
de tanımlayabiliriz.
Kod
Tasarımı ve Uygulama:
.container {
width:
1200px; /* Sabit genişlik */
max-width:
95%; /* Mobil uyumluluk için koruma bariyeri */
height:
auto; /* İçeriğe göre dinamik yükseklik */
/*
Shorthand Saat Yönü Kuralı: Üst | Sağ | Alt | Sol */
padding:
20px 15px 20px 15px;
/*
Shorthand İkili Kural: Üst-Alt | Sağ-Sol */
padding:
20px 15px;
/*
Sayfayı Yatayda Kusursuz Ortalamanın Formülü:
Üst ve alt boşluğu serbest bırak, sağ ve
solu tarayıcıya otomatik paylaştır. */
margin:
40px auto;
border:
2px solid #222;
}
CSS Teorisi 5: Mutlak Konumlandırma (Absolute
Positioning)
Elemanları
normal sayfa akışından kopararak, en yakın konumlandırılmış üst kapsayıcısına
göre serbestçe piksel piksel yerleştirmek için
kullanılır. Bir elemana absolute verebilmek için, onu saran kutuya relative verilmelidir.
Kod
Tasarımı ve Uygulama:
/* Kapsayıcı Kutu */
.card-parent {
position:
relative; /*
Kilit nokta: Yavru kutuya referans noktası olur */
width:
300px;
height:
400px;
background-color: white;
}
/* Kartın sağ üst
köşesine iğnelemek istediğimiz "İndirim" Rozeti */
.badge-child {
position:
absolute;
top: 15px; /*
Yukarıdan 15px aşağıda */
right:
15px; /* Sağdan 15px içeride */
background-color: red;
color:
white;
padding:
5px 10px;
}
Pseudo-elements (Yalancı
Elemanlar)
HTML'e fazladan etiket eklemeden, CSS aracılığıyla bir elemanın
önüne (::before) veya arkasına (::after) hayali dekoratif
kutular/tasarımlar eklememizi sağlar. Mutlaka bir content: ""; kuralı yazılmalıdır.
Kod
Tasarımı ve Uygulama:
/* Başlıkların altına
dekoratif kırmızı bir çizgi ekleme uygulaması */
.main-title {
position:
relative;
padding-bottom:
10px;
}
.main-title::after {
content:
""; /*
Boş da olsa yazılması zorunludur */
position:
absolute;
bottom:
0;
left:
0;
width:
60px;
height:
4px;
background-color: red; /* Kırmızı şerit çizgi */
}
Geliştirici Becerileri: Arama Motorlarını Kullanma ve
Debugging
🏆 CSS
UYGULAMA PROJESİ (Challenge #1, #2 ve #3 Birleşimi)
Bölüm
2'de yazdığımız HTML yapısını, az önce öğrendiğimiz tüm CSS kurallarıyla (Box
model, Kalıtım, Seçiciler, Yalancı elemanlar ve Konumlandırma) profesyonel,
modern bir Blog Kart Modülüne dönüştürüyoruz.
Uygulamanın
Tam CSS Kodları:
/* 1. Evrensel Ayarlar
ve Sıfırlama */
*
{
margin:
0;
padding:
0;
box-sizing:
border-box;
}
body
{
font-family: 'Segoe
UI', Tahoma,
Geneva, Verdana, sans-serif;
background-color: #f0f3f5;
color:
#333;
line-height:
1.6;
padding:
40px 20px;
}
/* 2. Ana Kart
Kapsayıcısı */
.blog-card {
position:
relative; /*
Badge konumlandırması için */
background-color: #ffffff;
max-width:
450px;
margin:
0 auto; /* Sayfada ortalama */
border-radius:
12px; /* Köşe
yumuşatma */
box-shadow:
0 8px 24px rgba(0,
0, 0, 0.1); /*
Yumuşak gölge */
overflow:
hidden; /*
Taşmaları engelle */
}
/* 3. Görsel Alanı */
.card-image {
width:
100%;
height:
250px;
object-fit:
cover; /*
Resmin oranını bozmadan kutuya sığdırır */
display:
block;
}
/* 4. Mutlak
Konumlandırılmış Rozet (Badge) */
.category-badge {
position:
absolute;
top: 20px;
right:
20px;
background-color: #e74c3c;
color:
white;
font-size: 12px;
font-weight: bold;
text-transform:
uppercase;
padding:
6px 14px;
border-radius:
20px;
letter-spacing:
1px;
}
/* 5. Kart İçerik
Alanı */
.card-content {
padding:
30px;
}
.card-title {
font-size: 22px;
color:
#2c3e50;
margin-bottom:
12px;
position:
relative;
padding-bottom:
10px;
}
/* Başlığın altına
dekoratif çizgi */
.card-title::after {
content:
"";
position:
absolute;
bottom:
0;
left:
0;
width:
40px;
height:
3px;
background-color: #3498db;
}
.card-text {
color:
#666;
font-size: 15px;
margin-bottom:
20px;
}
/* 6. Buton ve Link
Ayrımı */
.read-more-btn {
display:
inline-block; /*
Genişlik/boşluk alabilmesi için */
background-color: #3498db;
color:
white !important; /* Renk kalıtımını
ezmek için */
text-decoration:
none;
padding:
10px 20px;
border-radius:
6px;
font-weight: 600;
transition:
background-color 0.3s ease; /* Yumuşak geçiş efekti */
}
/* Hover
Efekti */
.read-more-btn:hover {
background-color: #2980b9;
}
Harika!
CSS'in temel taşlarını ve kutu modelini tamamen
kavradığımıza göre, modern web geliştiriciliğinin en heyecan verici ve en çok
kullanılan alanına geçiyoruz: Düzen Mimarlığı (Layouts:
Floats, Flexbox, and CSS Grid Fundamentals).
Bu
bölümde, web sayfalarını yan yana dizmenin eski ve zorlu yollarından
başlayarak, günümüz dünyasını yöneten devrimsel tek boyutlu (Flexbox) ve iki boyutlu (CSS Grid) sistemleri satır satır, tüm detaylarıyla ve pratik uygulamalarıyla
tasarlıyoruz.
📐 BÖLÜM 5:
Düzen Tasarımı (Layouts)
Sayfa Düzeni Oluşturmanın 3 Yolu (The
3 Ways of Building Layouts)
Web
tasarım tarihinde elemanları yan yana dizmek ve büyük web sayfaları inşa etmek
için üç ana dönem ve yöntem olmuştur:
Eski Nesil Düzen: Floats ve
Temizleme (Using Floats & Clearing
Floats)
Bir
elemana float: left veya float: right dendiğinde, o eleman normal
sayfa akışından sola veya sağa doğru kayar. Yanındaki elemanlar onun etrafını
sarar.
En
Büyük Sorun (Collapse): Kapsayıcı kutu, içerisindeki
float uygulanmış elemanların yüksekliğini algılayamaz
ve yüksekliği 0
piksele düşer (çökme yaşanır). Bunun çözülmesi için float
akışının temizlenmesi (clearing) gerekir.
Kod
Tasarımı ve Uygulama (Eski Düzen Yapısı):
/* clearfix
yöntemi: Çökmeyi önlemek için kapsayıcıya uygulanır */
.clearfix::after {
content:
"";
display:
block;
clear:
both; /*
Sola ve sağa kaydırılmış tüm float akışını sıfırlar
*/
}
.column-left {
float:
left;
width:
30%;
background-color: #f4f4f4;
}
.column-right {
float:
right;
width:
65%;
background-color: #e0e0e0;
}
Kutuların
Gizli Kahramanı: box-sizing: border-box
Eski
sistemlerde bir kutuya width: 50% verip üzerine padding: 20px eklediğinizde, kutunun gerçek genişliği %50 + 40px olurdu ve yan yana durması
gereken kutular aşağı patlardı. box-sizing: border-box; kuralı tarayıcıya şunu
söyler: "Verdiğim genişlik değerinin içine padding
ve border'ı da dahil et, kutuyu dışarı doğru
büyütme!" Evrensel seçicide (*) kullanılmasının sebebi budur.
Modern Devrim: Flexbox Temelleri (Introduction to Flexbox)
Flexbox, elemanları tek bir eksen üzerinde (yatayda veya dikeyde)
zahmetsizce hizalamak, dağıtmak ve sıralamak için kullanılır. Bir kutuyu flex yapmak için kapsayıcısına display: flex; yazılır.
Flexbox Ekseni Mantığı:
En
Önemli Flexbox Özellikleri ve Görevleri:
Kod
Tasarımı ve Uygulama:
.flex-container {
display:
flex;
flex-direction:
row;
/* Elemanları yan yana
diz */
justify-content:
space-between; /*
Elemanların arasına eşit boşluk dağıt, köşelere yasla */
align-items:
center;
/* Elemanları dikeyde
tam ortala */
gap:
20px;
/* Her eleman arasına
20px boşluk bırak */
background-color: #ffffff;
padding:
20px;
}
/* Kapsayıcının
içindeki esnek yavrular (Flex Items)
*/
.flex-item {
/*
flex property: grow (büyüme), shrink (küçülme)
ve basis (başlangıç genişliği) shorthand'idir.
*/
flex:
1; /* Tüm
elemanlar boş alanı eşit olarak paylaşır ve birlikte büyür */
background-color: #3498db;
color:
white;
padding:
15px;
}
İki Boyutlu Güç: CSS Grid Temelleri (Introduction
to CSS Grid)
Flexbox tek satırda harikalar yaratırken, tüm sayfa şablonunu (Grid
satırları ve sütunları) aynı anda yönetmek için CSS Grid kullanılır.
Kapsayıcıya display: grid; verilerek aktifleştirilir.
En
Önemli Grid Özellikleri:
Kod
Tasarımı ve Uygulama:
.grid-container {
display:
grid;
/*
repeat(3,
1fr) formülü: Yan yana eşit genişlikte 3 sütun oluşturur (1fr 1fr 1fr) */
grid-template-columns: repeat(3, 1fr);
grid-template-rows: auto auto; /* İki satır, yükseklik içeriğe göre */
gap:
30px; /* Satır
ve sütunlar arası boşluk */
}
/* Özel bir grid
elemanının yerini değiştirme ve genişletme */
.special-grid-item {
/*
1. sütundan başla, 3. sütunun başına kadar uzan (Yani 2 sütunluk yer kapla) */
grid-column: 1 / 3;
background-color: #2ecc71;
}
🏆 DÜZEN
MİMARLIĞI UYGULAMA PROJESİ (Challenge #1, #2 ve #3 Birleşimi)
Şu
ana kadar öğrendiğimiz Flexbox ve CSS Grid güçlerini
birleştirerek, gerçek dünya projelerinde sıkça karşımıza çıkan 3 Sütunlu
Özellikler Bölümü (Features Section)
ve Gelişmiş Navigasyon Barı tasarımını yapıyoruz.
HTML
Yapısı:
<div class="layout-wrapper">
<!--
FLEXBOX UYGULAMASI: Navigasyon Barı -->
<header class="main-header">
<div
class="logo">KODAKADEMİ</div>
<nav class="nav-menu">
<a
href="#">Kurslar</a>
<a
href="#">Hakkımızda</a>
<a
href="#">Topluluk</a>
<a
href="#" class="cta-nav-btn">Başla</a>
</nav>
</header>
<!--
CSS GRID UYGULAMASI: 3 Sütunlu Kart Düzeni -->
<main class="services-grid">
<div
class="service-card">
<h3>Frontend
Geliştirme</h3>
<p>HTML5,
CSS3, Flexbox ve Grid
mimarileriyle arayüz tasarlayın.</p>
</div>
<div
class="service-card special-card">
<h3>UI/UX Tasarım Çerçevesi</h3>
<p>Tipografi,
renk teorisi ve kullanıcı deneyimi kurallarını projelerinize entegre edin.</p>
</div>
<div
class="service-card">
<h3>Yayınlama ve Optimizasyon</h3>
<p>Netlify entegrasyonu, performans testleri ve Lighthouse analizleri yapın.</p>
</div>
</main>
</div>
CSS
Tasarımı:
*
{
margin:
0;
padding:
0;
box-sizing:
border-box;
}
body
{
font-family: 'Segoe
UI', sans-serif;
background-color: #f9fafb;
padding:
20px;
}
.layout-wrapper {
max-width:
1200px;
margin:
0 auto;
}
/* --- FLEXBOX NAV BAR
TASARIMI --- */
.main-header {
display:
flex;
justify-content:
space-between; /*
Logoyu sola, menüyü sağa yasla */
align-items:
center;
/* Dikeyde hizala */
background-color: #ffffff;
padding:
15px 30px;
border-radius:
8px;
box-shadow:
0 4px 6px rgba(0,0,0,0.05);
margin-bottom:
40px;
}
.logo
{
font-weight: 800;
letter-spacing:
1px;
color:
#1f2937;
}
.nav-menu {
display:
flex;
align-items:
center;
gap:
25px; /* Menü
elemanları arasındaki boşluk */
}
.nav-menu a {
text-decoration:
none;
color:
#4b5563;
font-weight: 500;
}
.cta-nav-btn {
background-color: #4f46e5;
color:
white !important;
padding:
8px 18px;
border-radius:
6px;
}
/* --- CSS GRID KART
DÜZENİ TASARIMI --- */
.services-grid {
display:
grid;
/*
Ekran genişliğine göre 3 eşit sütun oluşturur */
grid-template-columns: repeat(3, 1fr);
gap:
30px;
}
.service-card {
background-color: #ffffff;
padding:
30px;
border-radius:
10px;
border:
1px solid #e5e7eb;
box-shadow:
0 4px 6px rgba(0,0,0,0.02);
}
.service-card h3 {
color:
#1f2937;
margin-bottom:
12px;
}
.service-card p {
color:
#6b7280;
font-size: 15px;
}
/* Grid sistemi içinde
öne çıkan özel kart stili */
.special-card {
border-top:
4px solid #4f46e5;
box-shadow:
0 10px 15px rgba(79,
70, 229, 0.1);
}
Harika!
Kod yazma mekaniklerini (HTML ve CSS) ve sayfa düzeni mimarisini (Flexbox ve CSS Grid) tamamen kavradık. Şimdi, yazılan
kodların amatörce değil, dünya standartlarında profesyonel bir ajans elinden
çıkmış gibi görünmesini sağlayan en kritik modüle geçiyoruz: Web Tasarım
Kuralları ve Görsel Çerçeve (Web Design Rules and
Framework).
Bu
bölümde; bir web sitesine ruh katan tasarım teorilerini, tipografiyi, renk
psikolojisini, boşluk yönetimini ve kullanıcı deneyimini (UX) hiçbir detayı
atlamadan, pratik formüllerle satır satır işliyoruz.
🎨 BÖLÜM 6:
Web Tasarım Kuralları ve Görsel Çerçeve
Web Tasarım Kuralları 1: Tipografi ve Yazı Tipi Seçimi (Typography)
Yazı
tipi, sitenizin karakterini ve ses tonunu belirler. Doğru tipografi yönetimi
için şu kurallara uyulmalıdır:
Kod
Tasarımı ve Uygulama:
body
{
font-family: 'Inter', sans-serif;
font-size: 16px;
line-height:
1.6; /* 16px
* 1.6 = 25.6px satır yüksekliği */
color:
#333333;
}
h1,
h2, h3 {
font-family: 'Poppins', sans-serif;
font-weight: 700;
color:
#111111;
letter-spacing:
-0.5px; /*
Başlıkları daha toplu ve şık gösterir */
}
Web Tasarım Kuralları 2: Renk Teorisi ve Palet Oluşturma (Colors)
Rastgele
seçilen renkler sitenizin güvenilirliğini zedeler. Profesyonel bir renk paleti
şu formüle dayanır:
Kod
Tasarımı ve Uygulama (CSS Değişkenleri ile Palet Yönetimi):
:root {
--primary-bg: #f8fafc; /*
%60 Baskın (Arka Plan) */
--text-main:
#1e293b; /*
%30 İkincil (Metin ve Yapı) */
--accent-color:
#ff6b6b; /*
%10 Vurgu (Butonlar / Aksiyonlar) */
}
body
{
background-color: var(--primary-bg);
color:
var(--text-main);
}
.cta-button {
background-color: var(--accent-color);
color:
white;
}
Web Tasarım Kuralları 3 & 4: Görseller, İllüstrasyonlar
ve İkonlar (Images & Icons)
Kod
Tasarımı ve Uygulama (Görsel Üstü Karartma Katmanı):
.hero-image-container {
position:
relative;
background-image: url('hero-bg.jpg');
background-size: cover;
height:
500px;
}
/* Yalancı eleman ile
karartma perdesi oluşturma */
.hero-image-container::before {
content:
"";
position:
absolute;
top: 0;
left: 0; width: 100%;
height: 100%;
background-color: rgba(0,
0, 0, 0.5); /*
%50 siyah şeffaf katman */
}
Web Tasarım Kuralları 5 & 6: Gölgeler ve Köşe Yumuşatma
(Shadows & Border-radius)
Modern
web tasarımı "düz" (flat) olmaktan çıkıp
derinlik kazanan bir yapıya evrilmiştir.
Kod
Tasarımı ve Uygulama:
.modern-card {
border-radius:
12px;
/*
Profesyonel, gözü yormayan derinlik gölgesi */
box-shadow:
0 10px 30px rgba(0,
0, 0, 0.05);
background-color: #ffffff;
padding:
24px;
}
Web Tasarım Kuralları 7 & 8: Negatif Alan (Boşluk) ve
Görsel Hiyerarşi (Whitespace & Visual Hierarchy)
Web Tasarım Kuralları 9: Kullanıcı Deneyimi (UX) Esasları
Kullanıcı
deneyimi, sitenin sadece güzel görünmesi değil, kolayca kullanılabilmesidir.
🏆 GÖRSEL
TASARIM ÇERCEVESİ UYGULAMA PROJESİ (Bileşen ve Düzen Kalıpları)
Bu
bölümde öğrendiğimiz tüm tasarım kurallarını (Tipografi, 60-30-10 renk paleti,
yumuşak gölgeler, hiyerarşi ve UX tepkileri) uygulayarak sıfırdan lüks bir Fiyatlandırma
Kartı Bileşeni (Pricing Component) inşa ediyoruz.
HTML
Yapısı:
<section class="pricing-section">
<div
class="pricing-container">
<!--
Görsel Hiyerarşi: Üst Başlıklar -->
<span class="sub-title">Yatırım Planınız</span>
<h2 class="section-title">Büyümek İçin Doğru Planı Seçin</h2>
<!--
Profesyonel Fiyat Kartı -->
<div
class="pricing-card premium-plan">
<span class="badge">En Popüler</span>
<h3 class="plan-name">Profesyonel Paket</h3>
<p
class="plan-price">₺499<span>/aylık</span></p>
<ul class="plan-features">
<li><span
class="icon">✓</span> Sınırsız Proje Yayını</li>
<li><span
class="icon">✓</span> 7/24 Öncelikli Canlı Destek</li>
<li><span
class="icon">✓</span> Gelişmiş Lighthouse
Performans Analitiği</li>
<li><span
class="icon">✓</span> Özel Netlify
Alan Adı Entegrasyonu</li>
</ul>
<a
href="#" class="pricing-btn">Hemen Başla</a>
</div>
</div>
</section>
CSS
Tasarımı:
/* Tasarım Kuralları
Entegrasyonu */
*
{
margin:
0;
padding:
0;
box-sizing:
border-box;
}
body
{
font-family: 'Inter', sans-serif;
background-color: #f1f5f9; /*
%60 Baskın Renk (Açık Gri) */
color:
#0f172a; /* %30 İkincil Renk (Koyu Antrasit) */
padding:
100px 20px;
/* Whitespace
Uygulaması */
}
.pricing-container {
max-width:
500px;
margin:
0 auto;
text-align:
center;
}
/* Görsel Hiyerarşi
Kurgusu */
.sub-title {
color:
#4f46e5; /* Vurgu tonu */
font-weight: 700;
text-transform:
uppercase;
font-size: 13px;
letter-spacing:
1.5px;
display:
inline-block;
margin-bottom:
8px;
}
.section-title {
font-size: 32px;
font-weight: 800;
margin-bottom:
40px;
letter-spacing:
-0.5px;
}
/* Kart Tasarımı,
Gölgeler ve Köşeler */
.pricing-card {
background-color: #ffffff;
border-radius:
16px; /*
Yumuşak köşe */
padding:
40px;
text-align:
left;
position:
relative;
box-shadow:
0 20px 40px rgba(15,
23, 42, 0.06); /*
Ajans düzeyinde yumuşak gölge */
border:
1px solid rgba(15,
23, 42, 0.04);
}
/* Öne Çıkarma Kart
Dokunuşu */
.premium-plan {
border:
2px solid #4f46e5;
}
.badge {
position:
absolute;
top: -14px;
right:
30px;
background-color: #4f46e5; /*
%10 Vurgu Rengi */
color:
white;
font-size: 12px;
font-weight: 700;
padding:
6px 16px;
border-radius:
20px;
}
.plan-name
{
font-size: 20px;
color:
#475569;
margin-bottom:
12px;
}
.plan-price {
font-size: 48px;
font-weight: 800;
color:
#0f172a;
margin-bottom:
30px;
}
.plan-price span {
font-size: 16px;
color:
#64748b;
font-weight: 400;
}
/* Liste Yapısı ve
Boşluklar */
.plan-features {
list-style:
none;
margin-bottom:
40px;
}
.plan-features li {
font-size: 15px;
color:
#334155;
margin-bottom:
16px;
display:
flex;
align-items:
center;
}
.plan-features .icon {
color:
#10b981; /* Başarı yeşili */
font-weight: bold;
margin-right:
12px;
}
/* UX Geri Bildirimli
Buton Tasarımı (Fitts Kanunu Uyumlu) */
.pricing-btn {
display:
block;
text-align:
center;
background-color: #4f46e5; /*
Aksiyon Rengi */
color:
white;
text-decoration:
none;
font-weight: 600;
padding:
14px 24px; /*
Geniş tıklama alanı */
border-radius:
8px;
transition:
all 0.3s ease; /* Yumuşak UX geçişi */
}
/* Hover
Etkileşimi */
.pricing-btn:hover {
background-color: #3730a3;
transform:
translateY(-2px); /*
Hafif yukarı sıçrama efekti */
box-shadow:
0 8px 20px rgba(79,
72, 229, 0.2);
}
Harika!
Tasarım kurallarını koda dökmeyi öğrendiğimize göre, şimdi modern web
sitelerinde kullanıcıların karşısına çıkan en popüler ve profesyonel arayüz
elemanlarını sıfırdan inşa edeceğimiz Bileşenler ve Düzen Kalıpları
(Components and Layout Patterns) bölümüne geçiyoruz.
Müfredat
doğrultusunda Akordeon (Accordion), Karusel (Carousel/Slider),
Veri Tabloları (Table Components) ve web
sitelerinin giriş yüzü olan Hero Section mimarilerini tüm HTML/CSS kodları ve çalışma
mantıklarıyla birlikte satır satır tasarlıyoruz.
🛠️ BÖLÜM 7:
Bileşenler ve Düzen Kalıpları (Components & Layout
Patterns)
Web Tasarım Kuralları 10 - Parça 1:
Elemanlar ve Bileşenler (Components)
Bir
web sitesi tasarlanırken her sayfa sıfırdan çizilmez. Web arayüzü, tekrar
kullanılabilir Bileşenlerin (Components) bir araya gelmesiyle oluşur.
Şimdi bu bileşenleri en modern CSS teknikleriyle inşa edelim.
1. Akordeon Bileşeni Tasarımı (Building
an Accordion Component)
Sıkça
Sorulan Sorular (SSS) sayfalarında kullanılan, tıklandığında aşağı doğru açılan
kompakt yapılara akordeon denir. Sayfa alanından inanılmaz tasarruf sağlar.
HTML
Yapısı:
<div class="accordion">
<!--
Aktif/Açık olan Akordeon Öğesi -->
<div
class="accordion-item open">
<div
class="accordion-header">
<span class="number">01</span>
<h3 class="title">Kurs materyallerini nasıl
indirebilirim?</h3>
<span class="icon">↓</span>
</div>
<div
class="accordion-content">
<p>Kursun
ilk bölümünde yer alan "Kurs
Materyallerini İndirme" dersindeki bağlantıları kullanarak tüm kaynak kodları, resimleri
ve başlangıç dosyalarını bilgisayarınıza tek tıkla indirebilirsiniz.</p>
</div>
</div>
<!--
Kapalı Akordeon Öğesi -->
<div
class="accordion-item">
<div
class="accordion-header">
<span class="number">02</span>
<h3 class="title">Hiç kodlama bilmeyen biri bu kursa
katılabilir mi?</h3>
<span class="icon">↓</span>
</div>
<div
class="accordion-content">
<p>Kesinlikle
evet! Müfredatımız sıfırdan başlar ve sizi adım adım modern bir HTML/CSS
geliştiricisi haline getirecek şekilde tasarlanmıştır.</p>
</div>
</div>
</div>
CSS
Tasarımı:
.accordion {
max-width:
600px;
margin:
40px auto;
display:
flex;
flex-direction:
column;
gap:
24px;
}
.accordion-item {
background-color: #fff;
border-radius:
8px;
padding:
24px;
box-shadow:
0 4px 12px rgba(0,0,0,0.05);
border-top:
4px solid transparent;
transition:
all 0.3s;
}
.accordion-header {
display:
flex;
align-items:
center;
gap:
24px;
cursor:
pointer;
}
.accordion-item .number {
font-size: 24px;
font-weight: 700;
color:
#ced4da;
}
.accordion-item .title {
font-size: 18px;
font-weight: 600;
color:
#343a40;
flex:
1; /*
Başlığı orta alana yayar, ikonu sağa iter */
}
.accordion-item .icon {
font-size: 20px;
color:
#4f46e5;
transition:
transform 0.3s;
}
/* Gizli İçerik Alanı
*/
.accordion-content {
display:
none;
margin-top:
24px;
padding-left:
52px; /*
Numara hizasının boş bırakılması için */
color:
#6c757d;
line-height:
1.6;
}
/* --- AKTİF/AÇIK
DURUM STİLLERİ --- */
.accordion-item.open {
border-top:
4px solid #4f46e5;
}
.accordion-item.open .number,
.accordion-item.open .title {
color:
#4f46e5;
}
.accordion-item.open .accordion-content
{
display:
block; /*
İçeriği göster */
}
.accordion-item.open .icon {
transform:
rotate(180deg); /*
İkonu yukarı döndür */
}
2. Karusel (Slider)
Bileşeni Tasarımı (Building a Carousel Component)
Kullanıcı
yorumlarını (Testimonials) veya referansları yan yana
kaydırarak göstermek için kullanılan dinamik vitrin bileşenidir.
HTML
Yapısı:
<div class="carousel">
<!--
Sol Değiştirme Butonu -->
<button class="btn btn-left"><</button>
<!--
Aktif Yorum Kartı -->
<div
class="testimonial-slide">
<img src="https://unsplash.com" alt="Öğrenci
Resmi"
class="user-img">
<blockquote class="testimonial-text">
"Bu
kurs sayesinde hayatımda ilk defa sıfırdan bir web sitesi tasarlayıp yayına
aldım. Flexbox ve Grid mantığını o kadar net anlattı
ki, artık portfolyom için özgüvenle kod yazabiliyorum!"
</blockquote>
<p
class="user-name">Elif Serter</p>
<p
class="user-job">Junior Frontend Developer</p>
</div>
<!--
Sağ Değiştirme Butonu -->
<button class="btn btn-right">></button>
<!--
Sayfalama Noktaları (Dots) -->
<div
class="dots">
<button class="dot-item"> </button>
<button class="dot-item active"> </button>
<button class="dot-item"> </button>
</div>
</div>
CSS
Tasarımı:
.carousel {
max-width:
800px;
margin:
50px auto;
background-color: #4f46e5;
color:
white;
border-radius:
12px;
padding:
32px 80px; /*
Butonlara yer açmak için sağ ve soldan geniş boşluk */
position:
relative;
display:
flex;
flex-direction:
column;
align-items:
center;
text-align:
center;
}
.user-img {
width:
120px;
height:
120px;
border-radius:
50%;
object-fit:
cover;
border:
4px solid white;
margin-bottom:
24px;
}
.testimonial-text {
font-size: 18px;
font-style: italic;
line-height:
1.7;
margin-bottom:
16px;
}
.user-name {
font-weight: 700;
font-size: 16px;
}
.user-job {
font-size: 14px;
color:
#c7d2fe;
}
/* Navigasyon Okları (Absolute Konumlandırma) */
.btn {
position:
absolute;
top: 50%;
transform:
translateY(-50%);
background-color: white;
border:
none;
width:
40px;
height:
40px;
border-radius:
50%;
font-weight: bold;
color:
#4f46e5;
cursor:
pointer;
box-shadow:
0 4px 8px rgba(0,0,0,0.1);
}
.btn-left { left: 20px;
}
.btn-right { right: 20px;
}
/* Noktalar (Dots) */
.dots {
display:
flex;
gap:
12px;
margin-top:
32px;
}
.dot-item {
width:
12px;
height:
12px;
border-radius:
50%;
background-color: #c7d2fe;
border:
none;
cursor:
pointer;
}
.dot-item.active {
background-color: white;
width:
24px; /* Aktif
noktayı elips yaparak şıklaştırıyoruz */
border-radius:
6px;
}
3. Profesyonel Veri Tablosu Bileşeni (Building
a Table Component)
Fiyat
kıyaslamaları, özellik listeleri veya ham verileri düzenli göstermek için
semantik <table> mimarisi kullanılır.
HTML
Yapısı:
<table class="data-table">
<thead>
<tr>
<th>Paket Özelliği</th>
<th>Başlangıç Plânı</th>
<th>Profesyonel Paket</th>
</tr>
</thead>
<tbody>
<tr>
<td>Aylık Proje Yayını</td>
<td>5 Proje</td>
<td>Sınırsız Proje</td>
</tr>
<tr>
<td>Depolama Alanı</td>
<td>10 GB SSD</td>
<td>100 GB SSD</td>
</tr>
<tr>
<td>Öncelikli Destek</td>
<td>E-posta
ile</td>
<td>7/24 Canlı Destek</td>
</tr>
</tbody>
</table>
CSS
Tasarımı:
.data-table {
width:
100%;
max-width:
700px;
margin:
40px auto;
border-collapse:
collapse; /*
Kenarlıkların çift kat olmasını engeller */
font-size: 16px;
box-shadow:
0 4px 15px rgba(0,0,0,0.02);
border-radius:
8px;
overflow:
hidden;
}
.data-table th,
.data-table td {
padding:
16px 24px;
text-align:
left;
}
.data-table th {
background-color: #1e293b;
color:
white;
font-weight: 600;
}
.data-table td {
color:
#475569;
border-bottom:
1px solid #e2e8f0;
}
/* Zebra Çizgileri
Efekti: Çift sayıdaki satırların arka planını boyar */
.data-table tbody tr:nth-child(even) {
background-color: #f8fafc;
}
/* Satır Hover Efekti */
.data-table tbody tr:hover {
background-color: #f1f5f9;
}
Web Tasarım Kuralları 10 - Parça 2:
Düzen Kalıpları (Layout Patterns)
Bileşenlerimizi
tek tek ürettikten sonra, bunları büyük sayfa bloklarına yerleştiririz. Web
projelerinin en kritik düzen kalıbı Hero Section (Açılış/Giriş Ekranı) yapısıdır.
🚀 KAHRAMAN
ALANI UYGULAMASI (Building a Hero
Section)
Bir
web sitesine girildiğinde kullanıcının karşısına çıkan, sitenin ne yaptığını
özetleyen, büyük başlık ve ana aksiyon butonlarının (CTA) yer aldığı en üst
devasa bölümdür.
HTML
Yapısı:
<section class="hero-section">
<div
class="hero-container">
<!--
Sol Taraf: Metin İçerikleri (Flex veya Grid ile
yönetilir) -->
<div
class="hero-text-box">
<h1 class="hero-title">Her Gün Sağlıklı ve Harika Yemekler
Kapınızda</h1>
<p
class="hero-description">
Yılın 365
günü sağlığınızı korumanız için tasarlanmış, beslenme uzmanları onaylı abonelik
sistemimizle yemek yapma derdine son verin. Sizin için pişiriyor ve
getiriyoruz.
</p>
<div
class="hero-cta-box">
<a
href="#" class="btn-cta btn-full">Sağlıklı Beslenmeye Başla</a>
<a
href="#" class="btn-cta btn-outline">Daha Fazla Bilgi Edin ↓</a>
</div>
</div>
<!--
Sağ Taraf: Büyük Görsel -->
<div
class="hero-img-box">
<img src="https://unsplash.com" alt="Taze
ve sağlıklı yemek kasesi" class="hero-image">
</div>
</div>
</section>
CSS
Tasarımı:
.hero-section {
background-color: #fdf2e9; /*
Hafif sıcak/turuncu arka plan */
padding:
96px 0; /*
Whitespace kuralı gereği geniş üst-alt boşluk */
}
.hero-container {
max-width:
1200px;
margin:
0 auto;
padding:
0 32px;
/*
2 Sütunlu CSS Grid Tasarımı */
display:
grid;
grid-template-columns: 1fr
1fr;
gap:
96px;
align-items:
center; /*
Sağ ve solu dikeyde eşitle */
}
.hero-title {
font-size: 52px;
font-weight: 800;
line-height:
1.1;
color:
#333;
margin-bottom:
32px;
letter-spacing:
-1px;
}
.hero-description {
font-size: 20px;
line-height:
1.6;
color:
#555;
margin-bottom:
48px;
}
.hero-cta-box {
display:
flex;
gap:
16px;
}
/* CTA Buton
Tasarımları */
.btn-cta {
display:
inline-block;
text-decoration:
none;
font-size: 18px;
font-weight: 600;
padding:
16px 32px;
border-radius:
9px;
transition:
all 0.3s;
}
.btn-full {
background-color: #e67e22; /*
Ana Vurgu Rengi */
color:
white;
}
.btn-full:hover {
background-color: #cf711f;
}
.btn-outline {
background-color: white;
color:
#555;
border:
3px solid white;
}
.btn-outline:hover {
background-color: transparent;
border:
3px solid #e67e22;
color:
#e67e22;
}
/* Sağ Taraf Görsel
Alanı */
.hero-image {
width:
100%;
border-radius:
12px;
box-shadow:
0 24px 48px rgba(0,0,0,0.08);
}
Harika!
Temel bileşenleri ve düzen kalıplarını ustalıkla tamamladık. Şimdi, kurstaki
tüm teorik ve pratik birikimin nihai birleşme noktası olan, 10 saatten fazla
süren devasa web projesinin ilk aşamasına giriş yapıyoruz: Omnifood Projesi – Kurulum ve Masaüstü Sürümü (Omnifood Project – Setup and
Desktop Version).
Bu
bölümde; profesyonel bir web sitesinin hayata geçirilmesindeki 7 stratejik
adımı, küresel ölçülendirme standartlarını (rem ve max-width mantığını) ve projenin masaüstü sürümüne ait tüm arayüz
bölümlerini (Navigasyon, Izgara Sistemi, Yemekler, Kullanıcı Yorumları ve
Fiyatlandırma) en ince detayına kadar kodlayarak tasarlıyoruz.
🏬 BÖLÜM 8: Omnifood Projesi – Planlama, Kurulum ve Masaüstü Sürümü
Harika Bir Web Sitesi İçin 7 Adım (The
7 Steps to a Great Website)
Profesyonel
bir geliştirici, tasarıma doğrudan kod yazarak başlamaz. Müfredatta uygulanan
evrensel süreç şu 7 adımdan oluşur:
Responsive Ölçekleme
Esasları: rem ve max-width Mekanizması
Responsive (mobil uyumlu) tasarımların temelini atan en kritik kural,
sabit piksel (px) değerleri yerine esnek ölçü birimleri kullanmaktır.
Proje
Başlangıç Kurulum Kodları:
/* style.css
- Global Kurulum */
html
{
/*
16px değerinin %62.5'i 10px yapar. 1rem = 10px formülü
aktiftir. */
font-size: 62.5%;
box-sizing:
border-box;
}
*
{
margin:
0;
padding:
0;
box-sizing:
inherit;
}
body
{
font-family: "Rubik", sans-serif;
line-height:
1;
font-weight: 400;
color:
#444;
background-color: #fdf2e9;
}
Reusable (Yeniden
Kullanılabilir) Izgara Sistemi (Setting Up a Reusable Grid)
Proje
boyunca her bölümde sürekli 2'li, 3'lü veya 4'lü sütunlar kullanacağız. Bunları
her seferinde tekrar yazmamak için küresel yardımcı grid sınıfları
oluşturuyoruz.
/* Yeniden
Kullanılabilir Grid Altyapısı */
.grid
{
display:
grid;
column-gap:
6.4rem; /* 64px
Sütun Boşluğu */
row-gap:
9.6rem; /* 96px Satır Boşluğu */
}
/* Sayfayı ortalayan
ve taşmayı engelleyen ana kapsayıcı */
.container {
max-width:
120rem; /*
1200px */
margin:
0 auto;
padding:
0 3.2rem;
}
/* Sütun Çeşitleri */
.grid--2-cols
{ grid-template-columns: repeat(2, 1fr); }
.grid--3-cols
{ grid-template-columns: repeat(3, 1fr); }
.grid--4-cols
{ grid-template-columns: repeat(4, 1fr); }
Omnifood Projesi
Masaüstü Sürüm Mimari Tasarımı
Aşağıda,
Omnifood projesinin masaüstü görünümünün tüm iskelet
bölümlerini içeren HTML yapısı ve bu bölümleri kusursuz şekilde stillendiren CSS kod mimarisi yer almaktadır.
HTML
Yapısı (index.html):
<!-- Üst Navigasyon ve Header Bölümü
-->
<header class="header">
<a
href="#">
<span class="logo">OMNIFOOD</span>
</a>
<nav class="main-nav">
<ul class="main-nav-list">
<li><a
class="main-nav-link" href="#how">Nasıl Çalışır?</a></li>
<li><a
class="main-nav-link" href="#meals">Yemekler</a></li>
<li><a
class="main-nav-link" href="#testimonials">Yorumlar</a></li>
<li><a
class="main-nav-link" href="#pricing">Fiyatlandırma</a></li>
<li><a
class="main-nav-link nav-cta" href="#cta">Ücretsiz Dene</a></li>
</ul>
</nav>
</header>
<main>
<!--
Nasıl Çalışır Bölümü (How It Works) -->
<section class="section-how" id="how">
<div
class="container">
<span class="subheading">Uygulama Adımları</span>
<h2 class="heading-secondary">3 Basit Adımda Sağlığınız Kontrol
Altında</h2>
</div>
<div
class="container grid grid--2-cols">
<!--
Adım 01 Metin -->
<div
class="step-text-box">
<p
class="step-number">01</p>
<h3 class="heading-tertiary">Neleri sevdiğinizi (ve neleri
sevmediğinizi) bize söyleyin</h3>
<p
class="step-description">Yılın her günü beslenme uzmanlarımız ve
şeflerimiz sizin için çalışarak kişiselleştirilmiş haftalık yemek planları
hazırlar.</p>
</div>
<!--
Adım 01 Görsel -->
<div
class="step-img-box">
<img src="https://unsplash.com" class="step-img" alt="Yemek
seçimi yapan kullanıcı">
</div>
</div>
</section>
<!--
Yemekler Bölümü (Meals Section)
-->
<section class="section-meals" id="meals">
<div
class="container text-center">
<span class="subheading">Yemek Seçenekleri</span>
<h2 class="heading-secondary">Şeflerimizin Hazırladığı Popüler
Tarifler</h2>
</div>
<div
class="container grid grid--3-cols">
<!--
Yemek Kartı 01 -->
<div
class="meal-card">
<img src="https://unsplash.com" class="meal-img" alt="Avokado
Salatası">
<div
class="meal-content">
<span class="tag tag--vegetarian">Vejetaryen</span>
<p class="meal-title">Avokado ve Yumurtalı Salata</p>
<ul class="meal-attributes">
<li class="meal-attribute"><strong>400</strong> Kalori</li>
<li class="meal-attribute">NutriScore
® <strong>92</strong></li>
<li class="meal-attribute"><strong>4.8</strong> Derecelendirme (412)</li>
</ul>
</div>
</div>
<!--
Yemek Kartı 02 -->
<div
class="meal-card">
<img src="https://unsplash.com" class="meal-img" alt="Diyet
Pizza">
<div
class="meal-content">
<span class="tag tag--vegan">Vegan</span>
<span class="tag tag--paleo">Paleo</span>
<p class="meal-title">Kinoa Tabanlı Sebzeli Pizza</p>
<ul class="meal-attributes">
<li class="meal-attribute"><strong>550</strong> Kalori</li>
<li class="meal-attribute">NutriScore
® <strong>89</strong></li>
<li class="meal-attribute"><strong>4.9</strong> Derecelendirme (540)</li>
</ul>
</div>
</div>
<!--
Diyet Listesi Kategorileri -->
<div
class="diets-box">
<h3 class="heading-tertiary">Her Diyete Uygun Çözümler:</h3>
<ul class="list">
<li>✓ Glutensiz Diyetler</li>
<li>✓ Ketojenik Beslenme</li>
<li>✓ Laktozsuz Seçenekler</li>
<li>✓ Yüksek Proteinli Menüler</li>
</ul>
</div>
</div>
</section>
<!--
Kullanıcı Yorumları Bölümü (Testimonials) -->
<section class="section-testimonials" id="testimonials">
<div
class="testimonials-container">
<span class="subheading">Kullanıcı Deneyimleri</span>
<h2 class="heading-secondary">Bir Kez Deneyen Bir Daha
Bırakamıyor</h2>
<div
class="testimonials grid grid--2-cols">
<div
class="testimonial">
<blockquote class="testimonial-text">"Omnifood kelimenin tam anlamıyla hayatımı kurtardı! Artık
yemek düşünmek veya hazırlamak zorunda değilim. Hem sağlıklı besleniyorum hem
de zaman kazanıyorum."</blockquote>
<p class="testimonial-name">—
Can Tekin</p>
</div>
<div
class="testimonial">
<blockquote class="testimonial-text">"Beslenme
uzmanlarının onayından geçmiş yemeklerin bu kadar lezzetli olabileceğini hiç
tahmin etmezdim. Herkese şiddetle tavsiye ederim!"</blockquote>
<p class="testimonial-name">—
Melis Aksoy</p>
</div>
</div>
</div>
<!--
Sağ Taraf Galeri Görselleri Grid Yapısı -->
<div
class="gallery">
<figure class="gallery-item"><img
src="https://unsplash.com" alt="Yemek
fotoğrafı 1"></figure>
<figure class="gallery-item"><img
src="https://unsplash.com" alt="Yemek
fotoğrafı 2"></figure>
<figure class="gallery-item"><img
src="https://unsplash.com" alt="Yemek
fotoğrafı 3"></figure>
<figure class="gallery-item"><img
src="https://unsplash.com" alt="Yemek
fotoğrafı 4"></figure>
</div>
</section>
</main>
CSS
Tasarımı (style.css):
/* --- HEADER &
NAVİGASYON TASARIMI --- */
.header {
display:
flex;
justify-content:
space-between;
align-items:
center;
background-color: #fdf2e9;
height:
9.6rem; /* 96px
*/
padding:
0 4.8rem;
}
.logo
{
font-size: 2.2rem;
font-weight: 900;
color:
#e67e22;
letter-spacing:
2px;
}
.main-nav-list {
list-style:
none;
display:
flex;
align-items:
center;
gap:
3.2rem;
}
.main-nav-link:link,
.main-nav-link:visited {
text-decoration:
none;
color:
#333;
font-weight: 500;
font-size: 1.8rem;
transition:
all 0.3s;
}
.main-nav-link:hover,
.main-nav-link:active {
color:
#cf711f;
}
/* Aksiyon (CTA)
Navigasyon Butonu */
.main-nav-link.nav-cta:link,
.main-nav-link.nav-cta:visited {
padding:
1.2rem 2.4rem;
border-radius:
9px;
color:
white;
background-color: #e67e22;
}
.main-nav-link.nav-cta:hover,
.main-nav-link.nav-cta:active {
background-color: #cf711f;
}
/* --- ORTAK BAŞLIK VE
METİN TASARIMLARI --- */
.subheading {
display:
block;
font-size: 1.6rem;
font-weight: 600;
color:
#cf711f;
text-transform:
uppercase;
letter-spacing:
0.75px;
margin-bottom:
1.6rem;
}
.heading-secondary {
font-size: 4.4rem;
line-height:
1.2;
font-weight: 700;
color:
#333;
margin-bottom:
9.6rem;
}
.heading-tertiary {
font-size: 3.0rem;
line-height:
1.2;
font-weight: 700;
color:
#333;
margin-bottom:
3.2rem;
}
/* --- NASIL ÇALIŞIR
BÖLÜMÜ (SECTION HOW) --- */
.section-how {
padding:
9.6rem 0;
background-color: #fff;
}
.step-number {
font-size: 8.6rem;
font-weight: 600;
color:
#ddd;
margin-bottom:
1.2rem;
}
.step-description {
font-size: 1.8rem;
line-height:
1.8;
}
.step-img {
width:
65%;
border-radius:
20px;
box-shadow:
0 2.4rem 4.8rem rgba(0,0,0,0.06);
}
.step-img-box {
display:
flex;
align-items:
center;
justify-content:
center;
}
/* --- YEMEKLER BÖLÜMÜ
(SECTION MEALS) --- */
.section-meals {
padding:
9.6rem 0;
}
.meal-card {
background-color: white;
border-radius:
12px;
overflow:
hidden; /*
Resmin keskin köşeleri taşmasın diye */
box-shadow:
0 2.4rem 4.8rem rgba(0,0,0,0.08);
transition:
all 0.4s;
}
.meal-card:hover {
transform:
translateY(-1.2rem);
box-shadow:
0 3.2rem 6.4rem rgba(0,0,0,0.06);
}
.meal-img {
width:
100%;
height:
24rem;
object-fit:
cover;
}
.meal-content {
padding:
3.2rem 4.8rem 4.8rem 4.8rem;
}
.tag {
display:
inline-block;
padding:
0.4rem 0.8rem;
font-size: 1.2rem;
font-weight: 600;
text-transform:
uppercase;
color:
#fff;
border-radius:
100px;
margin-bottom:
1.2rem;
}
.tag--vegetarian {
background-color: #51cf66; }
.tag--vegan { background-color:
#94d82d; }
.tag--paleo {
background-color: #ffd43b; color:
#333; }
.meal-title {
font-size: 2.4rem;
font-weight: 600;
color:
#333;
margin-bottom:
3.2rem;
}
.meal-attributes {
list-style:
none;
display:
flex;
flex-direction:
column;
gap:
2.0rem;
font-size: 1.8rem;
}
.list {
list-style:
none;
display:
flex;
flex-direction:
column;
gap:
1.6rem;
font-size: 1.8rem;
}
/* --- KULLANICI
YORUMLARI & GALERİ GRİD BÖLÜMÜ --- */
.section-testimonials {
background-color: #fdf2e9;
display:
grid;
grid-template-columns: 55fr
45fr; /* Sol
ve sağ asimetrik grid dengesi */
align-items:
center;
}
.testimonials-container {
padding:
9.6rem;
}
.testimonial-text {
font-size: 1.8rem;
line-height:
1.8;
margin-bottom:
1.6rem;
}
.testimonial-name {
font-size: 1.6rem;
color:
#777;
}
/* Sağ Galeri Grid
Sistemi (2x2 Küp Düzenleme) */
.gallery {
display:
grid;
grid-template-columns: repeat(2, 1fr);
gap:
1.6rem;
padding:
1.6rem;
}
.gallery-item {
overflow:
hidden;
border-radius:
8px;
}
.gallery-item img {
width:
100%;
height:
100%;
object-fit:
cover;
display:
block;
transition:
transform 0.5s;
}
/* Profesyonel Hover Görsel Yakınlaşma Efekti */
.gallery-item img:hover {
transform:
scale(1.1);
}
Harika!
Omnifood projemizin masaüstü sürümünü kusursuz bir
şekilde ayağa kaldırdık. Şimdi projenin en kritik aşamalarından birine, yani
yazılan tüm bu devasa arayüzün mobil cihazlarda, tabletlerde ve küçük ekranlı
laptoplarda kusursuz görünmesini sağlayacak olan Responsive
Web Tasarımı (Omnifood Project – Responsive
Web Design) modülüne geçiyoruz.
Bu
bölümde; Media Query mekanizmasının çalışma prensiplerini, ekran kırılma
noktalarını (Breakpoints) profesyonelce seçmeyi ve en
önemlisi CSS ile Açılır-Kapanır Mobil Navigasyon Menüsü (Hamburger Menu)
yapımını satır satır tasarlıyoruz.
📱 BÖLÜM 9: Omnifood Projesi – Responsive Web
Tasarımı
Media Query Mekanizması Nasıl Çalışır? (How Media Queries Work)
Media
Query'ler, tarayıcının ekran genişliğini,
yüksekliğini veya çözünürlüğünü kontrol ederek sadece belirlenen şartlar
sağlandığında devreye giren CSS bloklarıdır.
/* Örnek Şablon: Ekran
genişliği 1200px ve altına düştüğünde buradaki kodlar çalışır */
@media (max-width: 120rem)
{
.container { max-width:
96rem; }
}
Profesyonel Kırılma Noktalarının Seçimi (How to Select Breakpoints)
Sektördeki
en büyük amatörlük, kodları popüler telefon modellerinin (iPhone 15, Samsung
S24 vb.) ekran piksellerine göre yazmaktır. Çünkü telefonlar sürekli değişir.
Doğru yöntem, tasarımın bozulduğu yerde (kırılma noktası) müdahale etmektir.
Omnifood projesinde tüm ekranları kapsayacak küresel standart
kırılma noktalarımız şunlardır:
Omnifood Projesi
Mobil Uyum ve Responsive Kod Mimarisi
Bölüm
8'de yazdığımız masaüstü kodların altına ekleyeceğimiz, projeyi tamamen mobil
uyumlu hale getiren Responsive CSS
Mimarisini tasarlıyoruz.
CSS
Tasarımı (responsive.css):
/*
==========================================================================
1. KÜÇÜK LAPTOPLAR VE BÜYÜK EKRANLAR (Max-width: 1344px / 84rem)
==========================================================================
*/
@media (max-width: 84rem)
{
.container {
max-width:
114rem;
}
}
/*
==========================================================================
2. YATAY TABLETLER -
LANDSCAPE TABLETS (Max-width: 1200px / 75rem)
==========================================================================
*/
@media (max-width: 75rem)
{
html {
/*
Yazı boyutunu 9px'e düşürüyoruz (9px / 16px = %56.25)
Böylece rem
kullanan tüm margin, padding
ve yazı boyutları otomatik küçülüyor! */
font-size: 56.25%;
}
.grid {
column-gap:
4.8rem;
row-gap:
6.4rem;
}
.heading-secondary { font-size: 3.6rem; }
.heading-tertiary { font-size: 2.4rem; }
}
/*
==========================================================================
3. DİKEY TABLETLER VE MOBİL MENÜ GEÇİŞİ (Max-width: 944px / 59rem)
==========================================================================
*/
@media (max-width: 59rem)
{
html {
font-size: 50%;
/* 1rem = 8px değerine çekildi */
}
/*
Üst menü düzenini bozup 3 sütunlu gridleri 2 sütuna çekiyoruz */
.grid--3-cols {
grid-template-columns: repeat(2, 1fr);
}
/*
Diyet kategorisi kutusunu tüm satıra yayıp ortalıyoruz */
.diets-box {
grid-column: 1 / -1;
justify-self:
center;
}
.section-testimonials {
grid-template-columns: 1fr;
/* Kullanıcı yorumları ve galeri alt alta
gelir */
}
.gallery
{
grid-template-columns: repeat(4, 1fr); /*
Galeri resimleri yan yana 4 tane sıralanır */
}
/*
----- 🛠️ MOBİL
NAVİGASYON İNŞASI ----- */
/*
Masaüstü menüsünü tamamen gizliyoruz */
.main-nav {
position:
absolute;
top: 0;
left:
0;
background-color: rgba(253,
242, 233, 0.95); /*
Arkayı hafif gösteren şık perde */
width:
100%;
height:
100vh; /* Tüm
ekranı kaplasın */
display:
flex;
align-items:
center;
justify-content:
center;
transition:
all 0.5s ease-in-out;
/*
CSS İLE GİZLEME FORMÜLÜ:
display: none yerine
bunları kullanıyoruz ki yumuşak geçiş (animation)
yapabilelim */
opacity:
0;
pointer-events:
none;
visibility:
hidden;
transform:
translateX(100%); /*
Sağ tarafa fırlatıp gizle */
}
.main-nav-list {
flex-direction:
column; /*
Linkleri alt alta diz */
gap:
4.8rem;
}
.main-nav-link:link,
.main-nav-link:visited {
font-size: 3.0rem;
/* Menü linklerini parmakla tıklanabilecek
kadar büyüt */
}
/*
----- 🍔
HAMBURGER BUTONU TASARIMI ----- */
/*
HTML'e ekleyeceğimiz açma/kapama butonu */
.btn-mobile-nav {
display:
block;
background: none;
border:
none;
cursor:
pointer;
z-index: 9999; /*
Her şeyin üstünde dursun */
}
/*
Hamburger İkon Çizgileri */
.icon-mobile-nav {
display:
block;
width:
4rem;
height:
0.4rem;
background-color: #333;
position:
relative;
transition:
all 0.3s;
}
/*
İkonun alt ve üst hayali çizgilerini oluşturuyoruz */
.icon-mobile-nav::before,
.icon-mobile-nav::after {
content:
"";
position:
absolute;
width:
4rem;
height:
0.4rem;
background-color: #333;
left:
0;
transition:
all 0.3s;
}
.icon-mobile-nav::before { top: -1.2rem;
} /* Üst çizgi */
.icon-mobile-nav::after { top: 1.2rem;
} /* Alt çizgi */
/*
----- 💥
AKTİF/AÇIK MOBİL MENÜ DURUMU ----- */
/*
JavaScript veya HTML kontrolü ile header sınıfına
"nav-open" eklendiğinde: */
.nav-open .main-nav {
opacity:
1;
pointer-events:
auto;
visibility:
visible;
transform:
translateX(0); /*
Menüyü ekrana geri getir */
}
/*
Hamburger ikonunu "X" işaretine dönüştürme sihri */
.nav-open .icon-mobile-nav
{
background-color: transparent; /* Orta çizgiyi yok et */
}
.nav-open .icon-mobile-nav::before {
top: 0;
transform:
rotate(45deg); /*
Üst çizgiyi kır */
}
.nav-open .icon-mobile-nav::after {
top: 0;
transform:
rotate(-45deg); /*
Alt çizgiyi ters kır */
}
}
/*
==========================================================================
4. KÜÇÜK TABLETLER (Max-width:
704px / 44rem)
==========================================================================
*/
@media (max-width: 44rem)
{
.grid--2-cols,
.grid--3-cols,
.grid--4-cols {
grid-template-columns: 1fr;
/* Tüm sütunları tek kolona düşürüyoruz */
}
.step-img-box:nth-child(2) {
grid-row: 1; /*
Mobilde resimlerin yazıların üstüne çıkması için sıralama ayarı */
}
.step-img {
width:
50%;
margin-bottom:
3.2rem;
}
}
/*
==========================================================================
5. AKILLI TELEFONLAR -
PHONES (Max-width: 544px / 34rem)
==========================================================================
*/
@media (max-width: 34rem)
{
.gallery
{
grid-template-columns: repeat(2, 1fr); /*
Küçük ekranlarda galeriyi 2x2 yapıyoruz */
}
}
Harika!
Mobil uyumluluk mimarimizi de tamamladığımıza göre, artık projemizin ve tüm
eğitim müfredatının büyük finaline geçiyoruz: Omnifood
Projesi – Efektler, Optimizasyonlar ve Yayına Alma (Omnifood
Project – Effects, Optimizations
and Deployment).
Bu
son bölümde; sayfaya işlevsellik katacak kısa bir JavaScript dokunuşunu,
kullanıcı deneyimini zirveye çıkaracak efektleri, performans testlerini ve
projemizi Netlify üzerinde dünya çapında canlıya
alma adımlarını satır satır tasarlayıp
tamamlıyoruz.
🚀 BÖLÜM 10:
Efektler, Optimizasyonlar ve Yayına Alma
JavaScript ile Mobil Menüyü Çalıştırmak (Making
the Mobile Navigation Work)
Bir
önceki bölümde CSS ile hazırladığımız .nav-open sınıfını, hamburger butonuna
tıklandığı an HTML iskeletimize dinamik olarak ekleyip çıkarmak için
tarayıcının yerleşik dilini (JavaScript) kullanıyoruz.
Kod
Tasarımı ve Uygulama (script.js):
// 1. Elemanları Seçme
const btnNavEl = document.querySelector(".btn-mobile-nav");
const headerEl = document.querySelector(".header");
// 2. Tıklama Olayını
(Event Listener) Dinleme
btnNavEl.addEventListener("click", function () {
//
toggle özelliği: nav-open
sınıfı varsa siler, yoksa ekler
headerEl.classList.toggle("nav-open");
});
Yumuşak Kaydırma Efekti (Implementing
Smooth Scrolling)
Kullanıcı
menüdeki linklere (Örn: "Yemekler")
tıkladığında sayfanın küt diye değil, yumuşak bir şekilde aşağı doğru kayması
modern UX için zorunludur.
Kod
Tasarımı ve Uygulama:
Bunun
için saf CSS kodu (html { scroll-behavior: smooth; }) kullanılabilir. Ancak eski
tarayıcılar ve bazı mobil sürümlerde tam kararlılık sağlamak için JavaScript
ile bağlantıları yakalamak profesyonel yöntemdir:
const allLinks = document.querySelectorAll("a:link");
allLinks.forEach(function (link) {
link.addEventListener("click", function (e) {
e.preventDefault();
// Tarayıcının varsayılan küt atlama
davranışını engelle
const href = link.getAttribute("href");
//
Sayfa tepesine pürüzsüz kaydırma (# linki için)
if (href === "#") window.scrollTo({ top:
0, behavior: "smooth" });
//
Belirli bir ID'ye sahip bölüme pürüzsüz kaydırma
if (href !== "#" && href.startsWith("#")) {
const sectionEl = document.querySelector(href);
sectionEl.scrollIntoView({ behavior:
"smooth" });
}
//
Linke tıklandıktan sonra mobil menüyü otomatik kapat
if (link.classList.contains("main-nav-link")) {
headerEl.classList.remove("nav-open");
}
});
});
Yapışkan Menü Barı (Implementing a
Sticky Navigation Bar)
Kullanıcı
sayfayı aşağı kaydırırken, menünün yukarıda kaybolup gitmesi yerine ekranın
tepesinde sabit (yapışkan) kalması, kullanıcının sitede kaybolmasını önler.
Sitede sarsıntı (flicker) olmaması için modern Intersection Observer API yöntemi tercih edilir.
Kod
Tasarımı ve Uygulama:
const sectionHeroEl = document.querySelector(".section-how"); //
Hero alanı geçildiğinde tetiklensin
const obs
= new IntersectionObserver(function (entries) {
const ent
= entries[0];
if (ent.isIntersecting
=== false) {
document.body.classList.add("sticky");
}
if (ent.isIntersecting
=== true) {
document.body.classList.remove("sticky");
}
},
{
root: null, // Tarayıcı ekranını
baz al
threshold: 0,
rootMargin: "-80px" //
Menü yüksekliği kadar kala devreye girsin
});
obs.observe(sectionHeroEl);
/* Sticky
CSS Sınıfı */
.sticky .header {
position:
fixed;
top: 0;
bottom:
0;
width:
100%;
height:
8rem;
background-color: rgba(255,
255, 255, 0.97);
box-shadow:
0 1.2rem 3.2rem rgba(0,
0, 0, 0.03);
z-index: 999;
}
/* Menü
sabitlendiğinde içeriğin yukarı zıplamasını önlemek için body'e
üst boşluk veriyoruz */
.sticky .section-how {
margin-top: 9.6rem; }
Performans, SEO ve Görsel Optimizasyonları (SEO and Image Optimizations)
Site
kodlaması bittikten sonra Google arama motorlarında üst sıralara çıkmak ve
sitenin saniyeler içinde açılmasını sağlamak için şu adımları tamamlıyoruz:
2. <meta name="description" content="Omnifood, yılın 365 günü sizi
sağlıklı besleyen, yapay zekâ destekli ve beslenme uzmanı onaylı lider yemek
abonelik servisidir.">
3. <link rel="icon" href="img/favicon.png" type="image/png">
Netlify ile Yayına
Alma ve Form Yönetimi (Deployment to Netlify)
Yazdığımız
bu harika projeyi bilgisayarımızdan çıkarıp tüm dünyanın erişimine sunuyoruz.
3. <form name="contact" method="POST" data-netlify="true">
4. <input type="email" name="email" placeholder="E-posta adresiniz" required>
5. <button type="submit">Abone Ol</button>
6. </form>