Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
CSS’te position: absolute, bir elementi normal belge akışından çıkarıp belirli bir kapsayıcıya göre konumlandırır. Element için sayfada yer ayrılmaz; diğer elementler onu yokmuş gibi yerleşir. Konum genellikle top, right, bottom, left veya inset ile belirlenir.

Element, kendisine en yakın ve position değeri static olmayan üst elemana göre konumlanır. Bu, yaygın konumlandırma kuralıdır; transform, filter veya bazı containment ayarları da kapsayıcı oluşturabilir. Uygun bir kapsayıcı yoksa başlangıç kapsayıcısı kullanılır. Bu nedenle absolute kullanılan elementin doğru kutuya göre hareket etmesi isteniyorsa ebeveyn elemana çoğunlukla position: relative verilir.

Nasıl çalışır?​


Normal akışta bir kutu, kendisinden önceki ve sonraki elementleri etkiler. absolute uygulandığında kutu bu akıştan ayrılır. Örneğin bir kartın sağ üst köşesine rozet yerleştirmek, görselin üzerine ikon koymak veya bir menüyü belirli bir kutunun içine sabitlemek için kullanılabilir.

top: 0; right: 0; ifadesi, elementin kapsayıcısının üst ve sağ kenarına sıfır uzaklıkta olmasını ister. bottom ve left de aynı mantıkla çalışır. Boyutu yalnız içeriğe bağlamayın: karşılıklı inset değerleri ve auto boyutlar kullanılınca kutu kalan alanı doldurabilir.

Çalışan en küçük örnek​


Aşağıdaki dosyayı index.html adıyla kaydedip tarayıcıda açabilirsiniz:

Kod:
<!doctype html>
<html lang="tr">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Absolute konumlandırma örneği</title>
<div class="kart">
  <h2>Ürün başlığı</h2>
  <span class="rozet">Yeni</span>
</div>

<style>
.kart {
  position: relative;
  box-sizing: border-box;
  width: min(100%, 280px);
  padding: 48px 16px 16px;
  border-radius: 4px;
  border: 1px solid #999;
}

.rozet {
  position: absolute;
  top: 8px;
  right: 8px;
  padding: 4px 6px;
  background: #222;
  color: #fff;
  border-radius: 4px;
}
.kart h2 { margin: 0; overflow-wrap: anywhere; }
</style>
</html>

Beklenen sonuç, Yeni rozetinin kartın sağ üst köşesinde görünmesidir. .kart içinde position: relative bulunmasaydı rozet karta değil, uygun bir konumlandırma bağlamı bulunana kadar üst kapsayıcıya göre yerleşebilirdi.

Hangi durumda hangi değeri seçmeli?​


Aşağıdaki ayrım, yanlış konumlandırmayı önlemek için yeterlidir:
DeğerBelge akışıTipik kullanım
staticAkışta kalırVarsayılan yerleşim
relativeAkışta kalırKendi yerinden küçük kaydırmalar ve kapsayıcı oluşturma
absoluteAkıştan çıkarKart içi rozet, ikon veya katman
fixedAkıştan çıkarGenellikle görünüm alanına bağlı sabit öğe
stickyAkışla ilişkisini korurKaydırma sırasında belirli eşiğe tutunan öğe

Uygularken izlenecek adımlar​

  1. Konumlandırılacak elemente position: absolute verin.
  2. Elementin hangi kutuya göre hareket etmesini istiyorsanız en yakın ebeveyne position: relative ekleyin.
  3. Konumu açıkça belirlemek için top, right, bottom, left veya inset kullanın.
  4. Elementin normal akıştan çıkması nedeniyle alttaki içeriklerin üst üste binip binmediğini kontrol edin.
  5. Dar ekranlarda metin taşması, rozetin içerikle çakışması ve yakınlaştırmada içeriğin kapanması ihtimallerini test edin.
Sık yapılan hata, absolute kullanıldığı halde ebeveyne position: relative verilmemesidir. Bu durumda element beklenmeyen bir üst kapsayıcıya göre konumlanır. İkinci hata, ana sayfa düzenini tamamen absolute değerleriyle kurmaktır. Bu yaklaşım içerik uzunluğu, ekran genişliği ve responsive düzen değiştiğinde kırılabilir. Ana yerleşimde Flexbox veya Grid kullanıp absolute değerini yalnızca bağımsız katmanlar için kullanmak daha sağlamdır.

Ayrıca z-index yalnızca katman sırasını etkiler; yanlış kapsayıcıya göre konumlanma sorununu çözmez. Önce konumlandırma bağlamını düzeltin, ardından gerekiyorsa katman sırasını ayarlayın.

Sık sorulan sorular​


Üst elemana relative verdiğim hâlde öğe neden başka yere göre yerleşiyor?​


Tarayıcı geliştirici araçlarında gerçek DOM hiyerarşisini ve hesaplanan stilleri kontrol edin. Araya giren konumlandırılmış bir öğe, transform veya containment yeni kapsayıcı oluşturmuş olabilir. CSS’teki ebeveyn varsayımı ile öğenin gerçek üst zinciri aynı olmayabilir.

absolute ile elementi yatay ve dikey ortalayabilir miyim?​


Evet. Kapsayıcıda position: relative, elementte position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); kullanılabilir. Elementin boyutu değişirse transform merkezlemeyi korur.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic