HTML Layout Kullanımı
Yazar: Jane Doe • Tarih: 15 Kasım 2023
Bu makale, HTML layout prensiplerini detaylıca inceler.
Giriş
Web sayfalarının düzeni, kullanıcı deneyimi için kritik öneme sahiptir.
                Web tasarımında elementlerin yerleşimi ve düzeni, kullanıcı deneyimi açısından kritik bir öneme sahiptir. CSS'in display özelliği, elementlerin tarayıcı tarafından nasıl işleneceğini belirler. Bu özellik, yaygın olarak kullanılan block ve inline değerlerinin yanı sıra, bu ikisinin avantajlarını birleştiren inline-block değerini de sunar. Bu makalede, inline-block'un ne olduğunu, nasıl kullanıldığını ve web sayfalarınızda esnek düzenler oluşturmak için sunduğu faydaları detaylıca inceleyeceğiz.
Bir HTML elementine inline-block özelliklerini uygulamak için aşağıdaki CSS sözdizimi kullanılır:
.element-adi {
  display: inline-block;
}CSS'te elementler genellikle ya block seviyesinde ya da inline seviyesinde davranır:
Bir  Bir  Aşağıdaki örnekler,  Örnek 1: Temel Kutu Düzeni Üç adet  Bu örnekte, her bir  Örnek 2: Yatay Navigasyon Menüsü Bir navigasyon menüsündeki liste öğelerini ( Burada,  Örnek 3: Form Elemanlarını Düzenleme Form etiketlerini ( Bu örnekte, etiketler ve giriş alanları yan yana gelmiş ve etiketlere belirli bir genişlik verilerek giriş alanlarının daha düzenli görünmesi sağlanmıştır. Boşluk Sorunu (Whitespace Issue):  Dikey Hizalama ( Genişlik ve Yükseklik Kontrolü:  Tarayıcı Uyumluluğu:  Alternatif Düzen Modelleri: Karmaşık ve duyarlı (responsive) düzenler oluşturmak için block elementler: Tüm mevcut genişliği kaplar, yeni bir satırda başlar ve altındaki diğer elementleri de yeni bir satıra iter. Genişlik (width), yükseklik (height), üst/alt kenar boşluğu (margin-top, margin-bottom) ve dolgu (padding) değerleri uygulanabilir. Örnek: , .
    inline elementler: Sadece içeriği kadar yer kaplar, yeni bir satırda başlamaz ve diğer inline elementlerle aynı satırda yer alır. Genişlik ve yükseklik değerleri genellikle göz ardı edilir; üst/alt kenar boşluğu ve dolgu değerleri elementin düzenini etkilemez. Örnek: , , .
inline-block, bu iki davranışın en iyi yönlerini birleştirir:
    
inline element gibi diğer elementlerle aynı satırda yan yana durabilir.block element gibi genişlik (width), yükseklik (height), kenar boşluğu (margin) ve dolgu (padding) değerleri uygulanabilir.vertical-align özelliği ile dikey olarak hizalanabilir, bu da esnek düzenler oluşturmada büyük kolaylık sağlar.
Pratik Kullanım Örnekleri
inline-block'un farklı senaryolarda nasıl kullanılabileceğini göstermektedir.
div elementini yan yana konumlandırmak ve onlara belirli boyutlar vermek için inline-block kullanabiliriz.
/* CSS Kodu */
.kutu {
  display: inline-block;
  width: 150px;
  height: 100px;
  margin: 10px;
  padding: 20px;
  background-color: #f0f0f0;
  border: 1px solid #ccc;
  text-align: center;
  line-height: 100px; /* İçeriği dikey ortalamak için */
}.kutu elementi hem yan yana dizilmiş hem de kendine ait genişlik, yükseklik ve kenar boşluklarına sahip olmuştur.
) yatay olarak hizalamak için inline-block sıklıkla tercih edilir.
/* CSS Kodu */
nav ul {
  list-style: none; /* Liste işaretlerini kaldır */
  margin: 0;
  padding: 0;
  background-color: #333;
  overflow: hidden; /* float kullanıldığında parent'ı temizlemek için */
}
nav li {
  display: inline-block;
}
nav li a {
  display: block; /* Bağlantının tüm li alanını kaplaması için */
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}
nav li a:hover {
  background-color: #555;
} elementlerine display: inline-block; uygulanarak yan yana sıralanmaları sağlanmıştır.  etiketine ise display: block; verilerek tıklanabilir alanın genişletilmesi ve padding uygulamasının doğru çalışması sağlanmıştır.
) ve giriş alanlarını () yan yana hizalamak için de inline-block kullanılabilir.
/* CSS Kodu */
.form-grup label {
  display: inline-block;
  width: 90px;
  text-align: right;
  margin-right: 10px;
}
.form-grup input {
  display: inline-block;
  padding: 5px;
  margin-bottom: 10px;
}
Önemli Notlar ve İpuçları
    
                    inline-block elementler arasında HTML kodunda bırakılan boşluklar (satır sonları, boşluklar) tarayıcı tarafından küçük bir boşluk olarak yorumlanabilir. Bu istenmeyen boşlukları gidermek için CSS (font-size: 0; parent elementte, sonra çocukta tekrar ayarla), HTML (etiketleri birleştirme yorumları), veya nadiren margin-left: -4px; gibi teknikler kullanılabilir. Ancak modern yaklaşımlarda flexbox veya grid gibi alternatifler bu sorunu doğal olarak çözmektedir.vertical-align): inline-block elementler, inline elementler gibi davranarak vertical-align özelliği ile dikey olarak hizalanabilir. Bu, aynı satırdaki farklı yükseklikteki elementlerin üst, orta veya alt hizalanmasında oldukça kullanışlıdır.inline-block elementlere doğrudan width ve height değerleri atanabilir, bu da düzen kontrolünü önemli ölçüde artırır. Bu, inline elementlerde mümkün değildir.display: inline-block; özelliği oldukça eski bir özelliktir ve tüm modern tarayıcılar tarafından geniş çapta desteklenir. Bu nedenle, genel uyumluluk konusunda endişe etmenize gerek yoktur.inline-block hala geçerli bir seçenek olsa da, günümüzde flexbox ve CSS Grid gibi daha güçlü ve esnek düzen modelleri mevcuttur. Bu modern yaklaşımlar, özellikle boşluk sorunları gibi inline-block'un bazı sınırlamalarını aşar.
                İlişkisel veritabanı yönetim sistemlerinde (RDBMS) veriler genellikle normalize edilmiş birden fazla tabloda saklanır. Bu tablolar arasındaki ilişkileri kullanarak anlamlı bir veri kümesi elde etmek için birleştirme (JOIN) işlemleri kritik öneme sahiptir. Bu makale, SQL'deki en yaygın ve temel birleştirme türlerinden biri olan INNER JOIN operatörünün kullanımını, sözdizimini ve pratik örneklerini teknik bir bakış açısıyla detaylandırmaktadır.
INNER JOIN, iki veya daha fazla tablodan ortak bir kolondaki eşleşen değerlere dayanarak satırları birleştirir. Yalnızca her iki tabloda da bir eşleşme bulunduğunda satırları sonuç kümesine dahil eder.
SELECT
    kolon1,
    kolon2,
    ...
FROM
    tablo1
INNER JOIN
    tablo2 ON tablo1.ortak_kolon = tablo2.ortak_kolon;
SELECT kolon1, kolon2, ...: Sonuç kümesinde görüntülemek istediğiniz kolonları belirtir. Bu kolonlar birleştirilen tablolardan herhangi birine ait olabilir. Kolon adları çakışıyorsa, tablo_adı.kolon_adı formatında belirtilmelidir.
FROM tablo1: Birleştirme işlemine başlayacağınız ilk tabloyu belirtir. Bu genellikle "sol" tablo olarak adlandırılır.
INNER JOIN tablo2: tablo1 ile birleştirmek istediğiniz ikinci tabloyu (sağ tablo) belirtir.
ON tablo1.ortak_kolon = tablo2.ortak_kolon: Bu kısım, birleştirme koşulunu tanımlar. Her iki tablodaki hangi kolonların eşleşmesi gerektiğini belirtir. INNER JOIN yalnızca bu koşulun doğru olduğu satırları döndürür. Kolonlar genellikle tablolar arasındaki birincil ve yabancı anahtar ilişkilerini temsil eder.
Aşağıdaki örneklerde, bir eğitim veritabanı senaryosu üzerinden INNER JOIN kullanımını inceleyeceğiz. Veritabanımızda Ogrenciler ve Kayitlar adında iki tablo olduğunu varsayalım.
Ogrenciler Tablosu:
CREATE TABLE Ogrenciler (
    OgrenciID INT PRIMARY KEY,
    Ad VARCHAR(50),
    Soyad VARCHAR(50)
);
INSERT INTO Ogrenciler (OgrenciID, Ad, Soyad) VALUES
(1, 'Ayşe', 'Yılmaz'),
(2, 'Mehmet', 'Demir'),
(3, 'Zeynep', 'Kaya'),
(4, 'Ali', 'Can');
Kayitlar Tablosu:
CREATE TABLE Kayitlar (
    KayitID INT PRIMARY KEY,
    OgrenciID INT,
    KursAdi VARCHAR(100),
    FOREIGN KEY (OgrenciID) REFERENCES Ogrenciler(OgrenciID)
);
INSERT INTO Kayitlar (KayitID, OgrenciID, KursAdi) VALUES
(101, 1, 'Veritabanı Yönetimi'),
(102, 2, 'Programlamaya Giriş'),
(103, 1, 'Web Geliştirme'),
(104, 3, 'Veri Analizi');
Hangi öğrencinin hangi kursa kayıtlı olduğunu görmek için Ogrenciler ve Kayitlar tablolarını OgrenciID kolonu üzerinden birleştirelim.
SELECT
    O.Ad,
    O.Soyad,
    K.KursAdi
FROM
    Ogrenciler AS O
INNER JOIN
    Kayitlar AS K ON O.OgrenciID = K.OgrenciID;
Açıklama: Bu sorgu, Ogrenciler tablosundaki her OgrenciID ile Kayitlar tablosundaki eşleşen OgrenciID değerlerini bulur. Sonuç olarak, kayıtlı her öğrencinin adı, soyadı ve aldığı kursun adını listeler. AS O ve AS K takma adlar (aliases) kullanarak sorguyu daha okunabilir hale getirdik.
Şimdi üçüncü bir tablo, KursDetaylari ekleyelim ve bir öğrencinin aldığı kursun detaylarını (örneğin, ders saati) görmek isteyelim.
KursDetaylari Tablosu:
CREATE TABLE KursDetaylari (
    KursAdi VARCHAR(100) PRIMARY KEY,
    DersSaati INT,
    KrediSayisi INT
);
INSERT INTO KursDetaylari (KursAdi, DersSaati, KrediSayisi) VALUES
('Veritabanı Yönetimi', 45, 3),
('Programlamaya Giriş', 60, 4),
('Web Geliştirme', 50, 3),
('Veri Analizi', 75, 5);
Öğrencilerin hangi kurslara kayıtlı olduğunu ve bu kursların ders saatlerini listeleyen bir sorgu oluşturalım:
SELECT
    O.Ad,
    O.Soyad,
    K.KursAdi,
    KD.DersSaati
FROM
    Ogrenciler AS O
INNER JOIN
    Kayitlar AS K ON O.OgrenciID = K.OgrenciID
INNER JOIN
    KursDetaylari AS KD ON K.KursAdi = KD.KursAdi;
Açıklama: Bu sorgu, Ogrenciler, Kayitlar ve KursDetaylari tablolarını zincirleme bir şekilde birleştirir. İlk olarak öğrencilerle kayıtları, ardından kayıtlarla kurs detaylarını eşleştirerek her öğrencinin aldığı kursun adını ve ders saatini getirir.
Sadece 50 ders saatinden fazla olan kurslara kayıtlı öğrencileri görmek isteyelim:
SELECT
    O.Ad,
    O.Soyad,
    K.KursAdi,
    KD.DersSaati
FROM
    Ogrenciler AS O
INNER JOIN
    Kayitlar AS K ON O.OgrenciID = K.OgrenciID
INNER JOIN
    KursDetaylari AS KD ON K.KursAdi = KD.KursAdi
WHERE
    KD.DersSaati > 50;
Açıklama: Önceki sorguya bir WHERE koşulu eklenerek, sadece DersSaati 50'den büyük olan kurslara kayıtlı öğrenciler filtrelenmiştir. INNER JOIN işlemi tamamlandıktan sonra filtreleme uygulanır.
ON ve WHERE Koşulları: ON koşulu, tabloların nasıl birleştirileceğini tanımlarken, WHERE koşulu birleştirilmiş sonuç kümesini daha da filtrelemek için kullanılır. ON koşulundaki eşleşmeyen satırlar hiçbir zaman sonuç kümesine dahil edilmezken, WHERE koşulu birleştirme sonrası sonuçları etkiler.
Kolon Adı Çakışmaları ve Takma Adlar: Farklı tablolarda aynı ada sahip kolonlar varsa (örneğin, her iki tabloda da bir ID kolonu), sorguda bu kolonları belirtirken tablo adı ön eki (tablo_adı.kolon_adı) veya takma adlar (alias.kolon_adı) kullanmak zorunludur. Bu, "ambiguous column name" (belirsiz kolon adı) hatasını önler ve sorgunun okunabilirliğini artırır.
Performans İpuçları: Büyük tablolarda INNER JOIN performansı için birleştirme koşulunda kullanılan kolonlarda indekslerin bulunması kritik öneme sahiptir. İndeksler, veritabanı motorunun eşleşen satırları çok daha hızlı bulmasına yardımcı olur.
NULL Değerler: INNER JOIN, ON koşulunda NULL değerlerle eşleşme yapmaz. Eğer bir tabloda eşleşme kolonu NULL ise, bu satır INNER JOIN sonucunda yer almaz. NULL değerleri de dahil etmek isterseniz, LEFT JOIN veya RIGHT JOIN gibi farklı JOIN türlerini değerlendirmeniz gerekebilir.
Veri Bütünlüğü: INNER JOIN kullanırken, birleştirme koşulunda kullanılan kolonlardaki veri bütünlüğünün doğru olduğundan emin olun. Tutarsız veriler veya yanlış eşleşme koşulları hatalı veya eksik sonuçlara yol açabilir.
                Python'ın standart kütüphanesinin bir parçası olan math modülü, temel ve gelişmiş matematiksel fonksiyonlara erişim sağlar. Bu modül, bilimsel hesaplamalar, mühendislik uygulamaları ve karmaşık matematiksel problemlerin çözümü için vazgeçilmez bir araçtır. math modülü, çoğu durumda kayan noktalı sayılar (float) üzerinde işlem yapmak üzere tasarlanmıştır ve sabitler, trigonometrik fonksiyonlar, logaritmik fonksiyonlar, üs alma işlemleri ve daha fazlasını içerir.
math modülünü kullanmak için öncelikle onu Python programınıza dahil etmeniz gerekmektedir. Bu işlem, genellikle dosyanın başında import anahtar kelimesi kullanılarak yapılır. Modül dahil edildikten sonra, içerdiği fonksiyonlara ve sabitlere math. öneki ile erişilir.
import math
# Bir fonksiyona erişim
sonuc = math.sqrt(25)
# Bir sabite erişim
pi_degeri = math.pi
Yukarıdaki sözdizimi, math modülünün nasıl kullanılacağına dair temel prensipleri ortaya koymaktadır. Her bir bileşenin işlevi aşağıdaki gibidir:
import math: Bu ifade, Python'a math adlı modülü yüklemesini söyler. Modül yüklendikten sonra, içinde tanımlı tüm fonksiyonlar, sınıflar ve değişkenler programınızda kullanılabilir hale gelir.
math.fonksiyon_adı(argümanlar): Modül içindeki bir fonksiyona erişmek için kullanılır. math. öneki, fonksiyonun math modülüne ait olduğunu belirtir ve aynı ada sahip diğer fonksiyonlarla olası ad çakışmalarını önler. Örneğin, math.sqrt(25) ifadesi 25'in karekökünü hesaplar.
math.sabit_adı: Modül içinde tanımlanmış matematiksel sabitlere erişmek için kullanılır. Örneğin, math.pi sabiti pi (π) değerini, math.e sabiti Euler sayısını (e) temsil eder.
Aşağıdaki örnekler, math modülünün çeşitli fonksiyonlarının gerçek dünya senaryolarında nasıl kullanılabileceğini göstermektedir.
Örnek 1: Temel Sabitler ve Karekök Hesaplama
import math
# Pi ve Euler sabitlerini kullanma
print(f"Pi değeri: {math.pi}")
print(f"e değeri: {math.e}")
# Bir sayının karekökünü bulma
sayi = 144
karekok = math.sqrt(sayi)
print(f"{sayi}'nin karekökü: {karekok}")
# Bir sayının üssünü alma (2^3)
us_alma = math.pow(2, 3)
print(f"2 üzeri 3: {us_alma}")
Bu örnek, math.pi ve math.e gibi sabitlerin nasıl kullanıldığını ve math.sqrt() ile bir sayının karekökünün, math.pow() ile de bir sayının üssünün nasıl hesaplandığını göstermektedir.
Örnek 2: Trigonometrik Fonksiyonlar
import math
# Açı değerini radyana çevirme (trigonometrik fonksiyonlar radyan bekler)
derece = 90
radyan = math.radians(derece)
print(f"{derece} derece radyan olarak: {radyan}")
# Sinüs, Kosinüs ve Tanjant hesaplama
sinus_degeri = math.sin(radyan)
cosinus_degeri = math.cos(radyan)
tanjant_degeri = math.tan(radyan)
print(f"sin({derece}°): {sinus_degeri}")
print(f"cos({derece}°): {cosinus_degeri}")
print(f"tan({derece}°): {tanjant_degeri}")
Bu örnek, math.radians() fonksiyonunun dereceleri radyanlara dönüştürmek için nasıl kullanıldığını ve ardından math.sin(), math.cos(), math.tan() gibi trigonometrik fonksiyonların nasıl uygulandığını göstermektedir.
Örnek 3: Logaritmik ve Tavan/Taban Fonksiyonları
import math
# Doğal logaritma (ln) ve 10 tabanında logaritma (log10)
sayi_log = 100
dogal_log = math.log(sayi_log)
taban10_log = math.log10(sayi_log)
taban2_log = math.log2(sayi_log) # Python 2.6 ve sonrası
print(f"{sayi_log}'un doğal logaritması: {dogal_log}")
print(f"{sayi_log}'un 10 tabanında logaritması: {taban10_log}")
print(f"{sayi_log}'un 2 tabanında logaritması: {taban2_log}")
# Tavan (ceil) ve Taban (floor) değerleri
ondalikli_sayi = 4.7
tavan_degeri = math.ceil(ondalikli_sayi)
taban_degeri = math.floor(ondalikli_sayi)
print(f"{ondalikli_sayi}'nin tavan değeri: {tavan_degeri}")
print(f"{ondalikli_sayi}'nin taban değeri: {taban_degeri}")
Bu örnek, math.log(), math.log10(), math.log2() fonksiyonlarının farklı tabanlarda logaritma hesaplamak için kullanılışını ve math.ceil() ile bir sayıyı yukarı, math.floor() ile aşağı tam sayıya yuvarlamanın nasıl yapıldığını açıklamaktadır.
Kayan Noktalı Sayılar (float): math modülündeki fonksiyonların çoğu, kayan noktalı sayılarla (float) çalışmak üzere tasarlanmıştır. Tam sayı (int) argümanları genellikle otomatik olarak kayan noktalı sayılara dönüştürülür.
Açı Birimleri: Trigonometrik fonksiyonlar (sin, cos, tan vb.) açıları radyan cinsinden bekler. Derece cinsinden bir açıyı kullanmak için math.radians() fonksiyonunu kullanarak önce radyanlara dönüştürmeniz gerekmektedir.
Hata Yönetimi: Geçersiz argümanlar (örneğin, negatif bir sayının karekökü math.sqrt(-1)) ValueError hatasına neden olabilir. Bu tür durumları ele almak için uygun hata yönetimi (try-except blokları) kullanılmalıdır.
math.pow() ve ** Operatörü: Python'da üs alma işlemi için hem math.pow() fonksiyonu hem de ** operatörü bulunur. math.pow() her zaman kayan noktalı bir sonuç dönerken, ** operatörü, işlenenlerin türüne bağlı olarak bir tam sayı veya kayan noktalı sonuç döndürebilir.
math.fabs() ve abs(): Mutlak değer almak için math.fabs() ve yerleşik abs() fonksiyonları mevcuttur. math.fabs() her zaman kayan noktalı bir sonuç dönerken, abs() işlenenle aynı türde bir sonuç döner.
                Web geliştirme sürecinde, etkili ve erişilebilir bir kullanıcı deneyimi sunmanın temelini, iyi yapılandırılmış bir HTML düzeni oluşturur. HTML layout, bir web sayfasının içeriğini mantıksal ve hiyerarşik bir şekilde organize etmek için kullanılan elemanları ve teknikleri ifade eder. Doğru layout kullanımı, arama motoru optimizasyonu (SEO) için kritik öneme sahip olduğu gibi, ekran okuyucular gibi yardımcı teknolojilerle etkileşimde bulunan kullanıcılar için de sayfa içeriğinin anlaşılabilirliğini artırır. Bu kılavuz, HTML'in yapısal elemanlarını kullanarak modern web sayfaları oluşturmanın temel prensiplerini detaylandıracaktır.
HTML layout oluştururken kullanılan temel yapısal ve semantik elemanlar, bir web sayfasının ana bölgelerini tanımlar. Aşağıdaki kod bloğu, tipik bir HTML sayfa düzeninin temel sözdizimini göstermektedir.
    Web Sitesi Başlığı
    
 
    
        Ana İçerik Bölümü
        Bu bölümde sayfanın ana içeriği yer alır.
     
    
 
HTML5 ile tanıtılan semantik etiketler, geliştiricilere içeriğin amacını tarayıcılara ve arama motorlarına daha net bir şekilde iletme imkanı sunar. Bu etiketlerin her biri, belirli bir içeriğin türünü ve rolünü belirtir.
: Bir dokümanın veya bölümün giriş içeriğini temsil eder. Genellikle başlıklar, logolar, navigasyon menüleri ve arama formları gibi ögeleri içerir.
: Sayfadaki diğer bölümlere veya farklı sayfalara bağlantı sağlayan navigasyon linklerini içerir. Genellikle birincil navigasyon menüleri için kullanılır.
: Dokümanın veya uygulamanın baskın içeriğini temsil eder. Bir HTML dokümanında yalnızca bir adet  etiketi bulunmalıdır.
: Bağımsız, kendi kendine yeten bir içerik parçasını temsil eder. Bir blog yazısı, haber makalesi veya kullanıcı yorumu gibi içerikler için idealdir.
: Geniş bir belgeyi veya uygulamayı mantıksal tematik gruplara ayırmak için kullanılır. Genellikle bir başlık (-) ile başlar.
: Ana içeriğin dışında kalan ancak ana içerikle ilişkili olan içeriği temsil eder. Genellikle yan paneller, reklamlar veya alıntı blokları için kullanılır.
: Bir dokümanın veya bölümün altbilgisini temsil eder. Genellikle telif hakkı bilgileri, yazar bilgileri, iletişim bilgileri ve ilgili linkler bulunur.
Aşağıdaki örnekler, yukarıda açıklanan HTML layout elemanlarının farklı senaryolarda nasıl kullanılabileceğini göstermektedir. Örnek 1: Temel Web Sayfası Düzeni Bu, sitemizin ana içeriğidir. Sayfamızı keşfetmek için yukarıdaki menüyü kullanın. Örnek 2: Blog Yazısı Düzeni Yazar: Jane Doe • Tarih: 15 Kasım 2023 Bu makale, HTML layout prensiplerini detaylıca inceler. Web sayfalarının düzeni, kullanıcı deneyimi için kritik öneme sahiptir. Etkili ve sürdürülebilir bir HTML layout oluşturmak için aşağıdaki ipuçlarını göz önünde bulundurmak önemlidir: Semantik Etiket Kullanımı: Her zaman içeriğin anlamına en uygun semantik HTML5 etiketlerini ( CSS ile Ayırma: HTML, içeriğin yapısını tanımlarken, içeriğin görsel sunumu ve yerleşimi tamamen CSS (Cascading Style Sheets) ile yönetilmelidir. HTML markup'ınıza stil bilgisi eklemekten kaçının. Erişilebilirlik: Semantik etiketler, ekran okuyucular gibi yardımcı teknolojilerin web sayfasını daha iyi anlamasına yardımcı olur. Bu da web sitenizin daha geniş bir kitleye ulaşmasını sağlar. Mobil Uyumluluk: Modern web layout'ları genellikle responsive tasarım ilkeleriyle birleştirilir. HTML yapınızı oluştururken, farklı ekran boyutlarına uyum sağlayabilecek esnek bir temel oluşturmaya özen gösterin. Web tasarımında estetik ve kullanıcı deneyimi açısından düzenli bir yerleşim, bir sayfanın başarısı için kritik öneme sahiptir. CSS (Cascading Style Sheets), öğelerin konumlandırılması ve hizalanması konusunda güçlü araçlar sunar. Bu kılavuz, metinlerden kutu modellere kadar çeşitli web öğelerini etkili bir şekilde hizalamak için kullanabileceğiniz CSS özelliklerini teknik bir yaklaşımla ele almaktadır. Sayfa düzeninizi optimize etmek ve görsel hiyerarşiyi güçlendirmek için bu özelliklerin nasıl kullanılacağını detaylı bir şekilde inceleyeceğiz. CSS'te hizalama işlemleri, genellikle bir seçiciye uygulanan özellik-değer çiftleri şeklinde ifade edilir. Hizalama özelliği, belirli bir bağlama veya kapsayıcıya göre öğenin konumunu belirler. Temel sözdizimi aşağıdaki gibidir: Burada  CSS'te hizalama, farklı bağlamlarda çeşitli özellikler aracılığıyla sağlanır. İşte en yaygın kullanılan hizalama yöntemleri ve özellikleri: Metin ve Satır İçi Öğelerin Hizalanması ( Dikey Hizalama ( Blok Öğeleri Yatay Ortalamak ( Flexbox ile Hizalama: CSS Grid ile Hizalama: Aşağıdaki örnekler, farklı hizalama senaryolarını göstermektedir. Bir paragraf içindeki metni ortalamak için  Bu metin ortalanmış olacaktır. Belirli bir genişliğe sahip bir  Bu blok öğe ortalanmıştır. Bir kapsayıcı içindeki öğeleri hem yatay hem de dikey olarak ortalamak için Flexbox kullanılır. Bir grid kapsayıcısındaki öğeyi veya öğeleri hem yatay hem de dikey olarak ortalamak için Grid özellikleri kullanılır. Bağlama Duyarlılık: Hizalama özellikleri, uygulandıkları kapsayıcının veya öğenin  Genişlik Kısıtlaması: Bir blok öğeyi  Dikey Ortalamada Zorluklar: Geleneksel CSS yöntemleriyle (Flexbox veya Grid olmadan) dikey ortalama genellikle daha karmaşıktır.  Flexbox ve Grid Ekseni Anlayışı: Flexbox ve Grid'de hizalama yaparken, ana eksen (main-axis) ve çapraz eksen (cross-axis) kavramlarını iyi anlamak kritiktir.  Tarayıcı Uyumluluğu: Özellikle Flexbox ve Grid gibi modern layout modülleri, güncel tarayıcılarda geniş çapta desteklenmektedir. Ancak eski tarayıcıları hedefliyorsanız, ön ekler (vendor prefixes) veya alternatif yöntemler kullanmanız gerekebilir. Web sayfaları, tarayıcılar tarafından yüklenirken bir Belge Nesne Modeli (DOM) olarak yapılandırılır. Bu model, HTML belgesinin mantıksal yapısını temsil eder ve JavaScript'in web sayfasının içeriğine, yapısına ve stiline dinamik olarak erişmesini ve bunları değiştirmesini sağlayan bir API (Uygulama Programlama Arayüzü) sunar. Bu makale, JavaScript kullanarak HTML DOM ile nasıl etkileşim kuracağınızı, elementleri nasıl seçeceğinizi, içeriklerini ve stillerini nasıl değiştireceğinizi ve olayları nasıl yöneteceğinizi adım adım açıklayacaktır. JavaScript'in DOM ile etkileşim kurmasının temelinde, belgedeki HTML elementlerini seçmek ve ardından bu elementlerin özelliklerine veya metotlarına erişmek yatar. Aşağıdaki sözdizimleri, en yaygın DOM seçim ve manipülasyon yöntemlerini özetlemektedir: Element Seçim Metotları: Element Özellikleri ve Metotları: Aşağıdaki örnekler, JavaScript'in DOM ile nasıl etkileşim kurduğunu göstermektedir. Örnek 1: Bir HTML Elementinin İçeriğini Güncelleme Bu örnekte, bir paragraf elementinin metin içeriği JavaScript ile değiştirilmektedir. Merhaba Dünya! Örnek 2: Bir Elementin Stilini Değiştirme Bu örnek, bir  Örnek 3: Yeni Bir Element Oluşturma ve Ekleme Bu örnek, dinamik olarak yeni bir liste öğesi oluşturup mevcut bir listeye ekler. Örnek 4: Bir Olay Dinleyicisi Ekleme Bu örnek, bir butona tıklanma olayını dinler ve tıklandığında bir paragrafın içeriğini günceller. Henüz tıklanmadı. Betik Yerleşimi ve Yükleme: JavaScript kodunuzun HTML DOM elementlerine erişmeye çalışmadan önce, bu elementlerin tarayıcı tarafından yüklenmiş ve DOM'a eklenmiş olması gerekir. Bu genellikle  Performans İpuçları: Kapsamlı DOM manipülasyonları performans maliyetli olabilir. Büyük değişiklikler yaparken, elementleri DOM'dan kaldırın, değişiklikleri yapın ve sonra tekrar ekleyin. Ayrıca, birden fazla stil değişikliği için  Güvenlik (XSS): Kullanıcı girdilerini  SQL veritabanlarında, farklı tablolar arasında ilişkisel veri kümelerini birleştirmek temel bir işlemdir.  Aşağıdaki örneklerde,  Bu sorgu, tüm müşterileri ve onların mevcut siparişlerini listeler. Eğer bir müşterinin hiç siparişi yoksa,  Birden fazla tabloyu birleştirmek için zincirleme  Sol Tablo Önceliği:  Performans Etkisi: Büyük tablolarda  Alias Kullanımı: Tablo isimleri için kısa takma adlar ( 2025 © Tüm Hakları Saklıdır.: Pratik Kullanım Örnekleri
Bu örnek, tipik bir web sayfasının ana hatlarını, header, navigasyon, ana içerik ve footer kullanarak nasıl oluşturulacağını gösterir.Web Sitem
    
Hoş Geldiniz!
        
Bir blog yazısı gibi kendi içinde bağımsız bir içeriği () ve bununla ilgili ek bilgileri () içeren bir düzen örneği.Blog Başlığı
    
HTML Layout Kullanımı
        Giriş
            İpuçları/Önemli Notlar
    
, , , , , , ) tercih edin. Bu, hem SEO hem de erişilebilirlik açısından faydalıdır.
                
Temel Sözdizimi
selector {
    alignment-property: value;
}
selector, stillerin uygulanacağı HTML öğesini veya öğe grubunu temsil eder. alignment-property, hizalama türünü belirleyen CSS özelliğidir (örneğin, text-align, justify-content) ve value ise bu hizalamanın nasıl gerçekleştirileceğini (örneğin, center, flex-start) tanımlar.
Detaylı Açıklama
    
text-align):
Bu özellik, bir blok öğesinin içindeki metni ve satır içi (inline) öğeleri yatay olarak hizalamak için kullanılır. Yaygın değerleri left, right, center ve justify'dir.vertical-align):inline, inline-block veya table-cell öğelerinin dikey hizalamasını kontrol eder. Genellikle metin ve ikonların aynı satırda dikey olarak hizalanmasında kullanılır. Değerleri arasında top, middle, bottom, baseline ve yüzde değerleri bulunur.margin: auto):
Belirli bir genişliğe sahip blok seviyesi öğeleri (örneğin, margin-left ve margin-right özelliklerini auto olarak ayarlamak yaygın bir yöntemdir. Bu, genellikle margin: 0 auto; şeklinde kullanılır.
    
CSS Flexbox, öğeleri tek boyutlu bir eksen boyunca (yatay veya dikey) hizalamak için güçlü bir model sunar.
        
            
justify-content: Ana eksen boyunca (varsayılan olarak yatay) öğelerin nasıl dağıtılacağını kontrol eder. Değerleri: flex-start, flex-end, center, space-between, space-around, space-evenly.align-items: Çapraz eksen boyunca (varsayılan olarak dikey) öğelerin nasıl hizalanacağını kontrol eder. Değerleri: flex-start, flex-end, center, stretch, baseline.align-self: Tek bir flex öğesinin çapraz eksendeki hizalamasını, kapsayıcının align-items değerini geçersiz kılarak ayarlar.
CSS Grid, öğeleri iki boyutlu (hem yatay hem dikey) bir ızgara içinde hizalamak için tasarlanmıştır.
        
            
justify-items: Bir grid kapsayıcısının içindeki öğelerin satır içi (inline) eksende nasıl hizalanacağını kontrol eder. Değerleri: start, end, center, stretch.align-items: Bir grid kapsayıcısının içindeki öğelerin blok (block) eksende nasıl hizalanacağını kontrol eder. Değerleri: start, end, center, stretch.place-items: align-items ve justify-items için bir kısaltmadır.justify-self: Tek bir grid öğesinin satır içi eksendeki hizalamasını, kapsayıcının justify-items değerini geçersiz kılarak ayarlar.align-self: Tek bir grid öğesinin blok eksendeki hizalamasını, kapsayıcının align-items değerini geçersiz kılarak ayarlar.place-self: align-self ve justify-self için bir kısaltmadır.
Pratik Kullanım Örnekleri
Metin Hizalama
text-align özelliği kullanılır.
.centered-text {
    text-align: center;
    color: #333;
    font-size: 1.2em;
}
Blok Öğeyi Yatay Ortalamak
margin: auto kullanılır.
.centered-block {
    width: 60%; /* Ortalamak için genişlik gerekli */
    margin: 0 auto;
    padding: 20px;
    background-color: #f0f0f0;
    border: 1px solid #ccc;
    text-align: center; /* İçindeki metni de ortalar */
}
Flexbox ile Öğeleri Ortalamak
.flex-container {
    display: flex;
    justify-content: center; /* Yatayda ortala */
    align-items: center;     /* Dikeyde ortala */
    height: 200px;           /* Kapsayıcıya yükseklik verilmeli */
    background-color: #e0f2f7;
    border: 1px solid #a7d9ed;
}
.flex-item {
    padding: 15px 30px;
    background-color: #007bff;
    color: white;
    font-weight: bold;
    border-radius: 5px;
}
Grid ile Öğeleri Ortalamak
.grid-container {
    display: grid;
    place-items: center; /* Hem yatay hem dikeyde ortalar */
    height: 200px;       /* Kapsayıcıya yükseklik verilmeli */
    background-color: #e6ffe6;
    border: 1px solid #b3e6b3;
}
.grid-item {
    padding: 15px 30px;
    background-color: #28a745;
    color: white;
    font-weight: bold;
    border-radius: 5px;
}
Önemli Notlar
    
                    display özelliğine göre farklılık gösterir. Örneğin, text-align yalnızca blok seviyesi kapsayıcıların içindeki metin ve satır içi öğeler üzerinde etkilidir; bir blok öğeyi kendi başına ortalamaz.margin: auto; ile yatay olarak ortalamak için öğeye mutlaka bir genişlik (width) değeri atanmalıdır. Aksi takdirde, öğe tüm mevcut genişliği kaplayacak ve ortalanmayacaktır.vertical-align sadece satır içi öğeler veya tablo hücreleri için etkilidir. Blok öğeleri dikey olarak ortalamak için Flexbox, Grid veya mutlak konumlandırma (position: absolute; top: 50%; transform: translateY(-50%);) gibi modern teknikler tercih edilmelidir.flex-direction veya grid-template-columns/rows gibi özellikler, bu eksenlerin yönünü belirler ve dolayısıyla justify-content ve align-items'ın davranışını doğrudan etkiler.
                
Temel Sözdizimi
// Element seçimi
document.getElementById("elementId");
document.getElementsByClassName("className");
document.getElementsByTagName("tagName");
document.querySelector("cssSelector");
document.querySelectorAll("cssSelector");
// Element özellikleri ve metotları
element.innerHTML;
element.textContent;
element.style.propertyName;
element.setAttribute("attributeName", "value");
element.classList.add("className");
element.addEventListener("eventName", functionHandler);
document.createElement("tagName");
parentElement.appendChild(childElement);
parentElement.removeChild(childElement);Detaylı Açıklama
    
document Nesnesi: DOM'a erişimin ana giriş noktasıdır. Tüm HTML belgesini temsil eder.
            
    document.getElementById("elementId"): Belirtilen id niteliğine sahip tek bir elementi döndürür. id'ler bir sayfada benzersiz olmalıdır.document.getElementsByClassName("className"): Belirtilen sınıf adına sahip tüm elementleri içeren bir HTMLCollection döndürür. Canlı bir koleksiyondur, yani DOM'daki değişiklikler koleksiyonu otomatik olarak günceller.document.getElementsByTagName("tagName"): Belirtilen etiket adına sahip tüm elementleri içeren bir HTMLCollection döndürür.document.querySelector("cssSelector"): Belirtilen CSS seçici ile eşleşen belgedeki ilk elementi döndürür.document.querySelectorAll("cssSelector"): Belirtilen CSS seçici ile eşleşen tüm elementleri içeren bir NodeList döndürür. Statik bir koleksiyondur.
            
    element.innerHTML: Bir elementin HTML içeriğini (alt elementler dahil) alır veya ayarlar. HTML etiketlerini yorumlar.element.textContent: Bir elementin ve tüm alt elementlerinin metin içeriğini alır veya ayarlar. HTML etiketlerini metin olarak ele alır.element.style.propertyName: Bir elementin CSS stil özelliklerine erişim sağlar. Örneğin, element.style.backgroundColor = "red";.element.setAttribute("attributeName", "value"): Bir elementin belirtilen niteliğini ayarlar veya günceller. Örneğin, element.setAttribute("href", "https://example.com");.element.classList: Bir elementin CSS sınıflarını yönetmek için bir dizi metot (add, remove, toggle, contains) sunar.element.addEventListener("eventName", functionHandler): Bir elemente olay dinleyicisi ekler. Örneğin, bir butona tıklama olayını dinlemek için "click" kullanılır.document.createElement("tagName"): Belirtilen etiket adıyla yeni bir HTML elementi oluşturur.parentElement.appendChild(childElement): Belirtilen bir çocuğu, belirtilen ana elementin son çocuğu olarak ekler.parentElement.removeChild(childElement): Belirtilen ana elementten belirtilen çocuğu kaldırır.
Pratik Kullanım Örnekleri
    
Önemli Notlar
    
                     etiketini  etiketinin kapanışından hemen önce yerleştirerek veya defer/async niteliklerini kullanarak sağlanır. Alternatif olarak, document.addEventListener("DOMContentLoaded", function() { /* kodunuz */ }); kullanarak kodunuzun DOM tamamen yüklendikten sonra çalışmasını sağlayabilirsiniz.id Benzersizliği: document.getElementById() metodu için kullanılan id nitelikleri, HTML belgesi içinde benzersiz olmalıdır. Aynı id'ye sahip birden fazla element bulunması durumunda, metot yalnızca ilk eşleşeni döndürecektir.HTMLCollection ve NodeList: getElementsByClassName ve getElementsByTagName metotları HTMLCollection, querySelectorAll ise NodeList döndürür. Bu koleksiyonlar dizi benzeri nesnelerdir ancak tüm dizi metotlarına (map, filter vb.) doğrudan sahip değildirler. Üzerlerinde döngü kurmak için for...of veya Array.from().forEach() kullanabilirsiniz.element.style.cssText özelliğini kullanabilir veya CSS sınıflarını (classList) manipüle edebilirsiniz.innerHTML ile doğrudan DOM'a eklerken dikkatli olun. Kötü niyetli kullanıcılar, bu yöntemle sitenize Cross-Site Scripting (XSS) saldırıları yapabilirler. Güvenliğiniz için genellikle textContent kullanmak veya girdileri sanitize etmek daha iyidir.null Kontrolü: DOM elementlerini seçerken, bazen elementin sayfada var olmayabileceği durumlar olabilir. Bu tür durumlarda, döndürülen değer null olacaktır. Kodunuzun beklenmedik hatalar vermesini önlemek için element üzerinde işlem yapmadan önce bir null kontrolü yapmak iyi bir pratiktir (örneğin, if (element) { ... }).
                LEFT JOIN (sol dış birleşim) işlemi, iki veya daha fazla tabloyu belirli bir koşul üzerinden birleştirirken, sol tablodaki tüm kayıtları, sağ tablodaki eşleşen kayıtlarla birlikte döndürür. Sağ tabloda eşleşme bulunamayan durumlarda, sağ tablonun sütunları için NULL değerleri döndürülür. Bu makale, LEFT JOIN'in sözdizimini, detaylı açıklamasını ve pratik kullanım örneklerini sunmaktadır.Temel Sözdizimi
LEFT JOIN komutunun genel sözdizimi aşağıdaki gibidir:
SELECT
    sutun1, sutun2, ...
FROM
    sol_tablo
LEFT JOIN
    sag_tablo
ON
    sol_tablo.eslesme_sutunu = sag_tablo.eslesme_sutunu;Detaylı Açıklama
SELECT sutun1, sutun2, ...: Sorgu sonucunda döndürülmesini istediğiniz sütunları belirtirsiniz. Bu sütunlar hem sol hem de sağ tablodan gelebilir.FROM sol_tablo: Birleşimin sol tarafında yer alacak ana tabloyu belirtir. Bu tablodaki tüm kayıtlar sonuç kümesine dahil edilecektir.LEFT JOIN sag_tablo: Birleşimin sağ tarafında yer alacak tabloyu belirtir. Sol tablodaki kayıtlarla eşleşen kayıtlar bu tablodan alınır.ON sol_tablo.eslesme_sutunu = sag_tablo.eslesme_sutunu: İki tablo arasındaki eşleşme koşulunu tanımlar. Bu koşul genellikle birincil anahtar (PRIMARY KEY) ve yabancı anahtar (FOREIGN KEY) ilişkisi üzerinden kurulur.
Pratik Kullanım Örnekleri
Musteriler ve Siparisler adında iki tablo kullandığımızı varsayalım. Musteriler tablosunda MusteriID, Ad, Soyad sütunları; Siparisler tablosunda ise SiparisID, MusteriID, SiparisTarihi, Tutar sütunları bulunmaktadır.
Örnek 1: Tüm Müşterileri ve Varsa Siparişlerini Listeleme
Siparisler tablosuna ait sütunlar için NULL değerleri döndürülür.
SELECT
    M.MusteriID,
    M.Ad,
    M.Soyad,
    S.SiparisID,
    S.SiparisTarihi,
    S.Tutar
FROM
    Musteriler AS M
LEFT JOIN
    Siparisler AS S ON M.MusteriID = S.MusteriID;
Örnek 2: Henüz Sipariş Vermemiş Müşterileri Bulma
LEFT JOIN ile birlikte WHERE koşulu kullanarak, sağ tabloda eşleşme bulunamayan kayıtları filtreleyebiliriz. Bu örnekte, henüz sipariş vermemiş müşteriler listelenir.
SELECT
    M.MusteriID,
    M.Ad,
    M.Soyad
FROM
    Musteriler AS M
LEFT JOIN
    Siparisler AS S ON M.MusteriID = S.MusteriID
WHERE
    S.SiparisID IS NULL;
Örnek 3: Birden Fazla LEFT JOIN Kullanımı
LEFT JOIN kullanılabilir. Örneğin, müşterilerin siparişlerini ve bu siparişlerin detaylarını görmek isteyebiliriz. SiparisDetaylari adında bir üçüncü tablo olduğunu varsayalım.
SELECT
    M.Ad,
    S.SiparisID,
    SD.UrunAdi,
    SD.Miktar
FROM
    Musteriler AS M
LEFT JOIN
    Siparisler AS S ON M.MusteriID = S.MusteriID
LEFT JOIN
    SiparisDetaylari AS SD ON S.SiparisID = SD.SiparisID;
Önemli Notlar
                    LEFT JOIN, sol tablonun tüm kayıtlarını garanti eder. Sağ tabloda eşleşme bulunmasa bile sol tablodaki kayıtlar sonuç kümesinde yer alır.NULL Değerleri: Sağ tabloda eşleşen kayıt bulunamadığında, sağ tablodaki sütunlar için NULL değerleri döndürülür. Bu durum, eşleşmeyen kayıtları filtrelemek (örneğin, WHERE sag_tablo.anahtar_sutun IS NULL kullanarak) için kullanılabilir.JOIN işlemleri performans üzerinde etkili olabilir. İndeksli sütunlar üzerinde birleştirme yapmak sorgu hızını artırır.AS M, AS S gibi) kullanmak, sorguyu daha okunaklı hale getirir ve yazım hatalarını azaltır.INNER JOIN ile Farkı: INNER JOIN yalnızca iki tabloda da eşleşen kayıtları döndürürken, LEFT JOIN sol tablonun tüm kayıtlarını döndürür ve sağ tablodaki eşleşmeyenler için NULL kullanır.