Genişliği Belli Olmayan Blok-level Elemanları Yatayda Ortalamak

CSS ile yatayda ortalamak deyince aklımıza hep genişliği sabit olan alanlar geliyor. Ancak genişliği sabit olmayan elemanları ortalamak biraz daha farklı oluyor.

Genişliği sabit olan blok-level elemanları ortalamak için birçok kaynak var iken genişliği belli olmayan blok-level elemanları ortalamak için çok fazla kaynak bulamıyoruz. Google’da yaptığım aramalarda rastladığım makalelerde 2 yöntem ile karşılaştım. Bu iki metodu sizlerle paylaşacağım, siz kendinize uygun olan metodu uygulayabilirsiniz.

Metot 1 - Yüzde Yöntemi ile Ortalama

Genelde bu yöntemi anlatırken menü örnekleri üzerinden anlatılmış bende geleneği bozmayayım.

{% highlight html %}

  • Elma
  • Armut
  • Malta Eriği

{% endhighlight %}

Alışkın olduğumuz bir menü kodu. CSS kodumuzu ekleyelim. İlk olarak kapsayıcı eleman tanımlarını yazalım.

{% highlight css %} .menuKapsulu{ float:left; width:100%; background:#369; overflow:hidden; position:relative; } {% endhighlight %}

Menü kapsayıcısının sayfayı tam kaplaması için %100 değeri ve float:left değeri atandı.

{% highlight css %} .menuKapsulu ul{ clear:left; float:left; list-style:none; margin:0; padding:0; position:relative; left:50%; text-align:center; background-color:#990000 } {% endhighlight %}

float:left değeri ile içeriği çepeçevre kapsaması sağlanıyor. left:50% değeri ile menu ortalanıyor. Ancak bu ortalama içeriğin genişliğiniiçermez.

{% highlight css %} .menuKapsulu ul li{ display:block; float:left; list-style:none; margin:0 10px 0 0; padding:10px 0; position:relative; right:50%; } {% endhighlight %}

Buradaki püf noktası; right:50% değeri ile menü genişliğinden dolayı sağa doğru kayan içeriği tam olarak ortalı hale getiriyoruz.

İnternet Explorer 6+, Firefox2+, Safari, Chrome ve Opera destekliyor.

Avantajları

  • Tüm tarayıcılar destekliyor.
  • Sadece CSS ile çözüm ürettiği için ve javascripte gerek bırakmaması
  • Kolay kullanımı
  • Farklı tarayıcılar için farklı kod yazımı gerektirmemesi

Dezavantajları

  • Kapsayıcı elemana atana overflow:hidden nedeni ile yaşanabilecek olumsuzluklar. Mesela açılır menülerde sorun olur.
  • Ortalanacak eleman kapsayıcısı, yani burada ul ortalı olmadığı için background, border ve kendini gösterecek diğer tanımların yapılmaması gerekir. Buda bir dezavantajdır.

Metot 2: display:table Metodu

Genişliği belli olan elemanları ortalarken kullandığımız margin:0 auto tanımını bu sefer genişliği belli olmayan alanlar içinde kullanıyoruz.

HTML kodumuz aynı;

{% highlight html %}

  • Elma
  • Armut
  • Malta Eriği

{% endhighlight %}

Ortalanacak alana margin:0 auto ve display:table tanımlarını yapıyoruz.

{% highlight css %} .menuKapsulu ul{ list-style:none; margin-left: auto; margin-right: auto; display: table; }

.menuKapsulu ul li{ float:left; margin:0 10px 0 0; padding:10px 0; } {% endhighlight %}

Sonuç istediğimiz gibi, ancak bir sorunumuz varki oda display:table özelliğini İnternet Explorer 6 ve 7. sürümleri desteklemiyor. Peki, ne olacak derseniz bu bir hasLayout sorunu ve çözüm için zoom:1 tanımı kullanmamız gerekiyor.

{% highlight css %} #menuKapsulu ul{ list-style:none; margin-left: auto; margin-right: auto; display: table; }

#menuKapsulu ul li{ float:left; margin:0 10px 0 0; padding:10px 0; } {% endhighlight %}

Kapsayıcı kapsüle text-align:center tanımı yapıyoruz sonra listemize display:inline yapıyoruz. text-align:center inline elemanları ortalıyor bildiğiniz gibi. Burada yaptığmızda bu

Avantajları

  • Tüm tarayıcılar destekliyor.
  • Sadece CSS ile çözüm ürettiği için ve javascripte gerek bırakmaması
  • Birinci mettodaki overflow:hidden dan kaynaklana sorun burada yoktur.
  • Birinci metotdaki ul ye görsel özellik tanımlayamama sorunu bu metotda yok.

Dezavantajları

  • Farklı tarayıcılar için farklı kod yazımı gerektirmesi

Kullandıkça avantaj ve dezavantajlarını daha iyi göreceğiz.

Kalın sağlıcakla.

Kaynaklar

Read more

CSS'de lightdark() fonksiyonuyla kolayca koyu / açık mod yazımı

CSS'de lightdark() fonksiyonuyla kolayca koyu / açık mod yazımı

Bir önceki yazımda bahsettiğim gibi CSS'in yeni özelliklerinin bazıları çığır açan özellikler, bazıları kulllanıcı deneyimini iyileştirme yönünde özellikler bazıları da lightdark() fonksiyonu gibi yazım kolaylığı sağlayan özellikler. lightdark() fonksiyonu mevcut uyumlu web yazımındaki büyük sorun olan aşağıdaki kullanımı daha anlaşılır ve düzenli hale getirmeye yarıyor. :root { color-scheme: light

By Fatih Hayrioğlu