Kategori CSS

jQuery veya CSS ile dikey ortalama

Farkettim ki uzun zamandır hiç işe yarar bir şeyler paylaşmıyor, hem kendi dünyamda olup bitenleri yazıyorum. Bunun üzerine yakın zamanda yaşadığım bir sorunun çözümünü paylaşmak istedim. Sorun XHTML/CSS ile bir nesnenin dikey ortalanması.

Biliyorsunuz, css ile bir div’i doğrudan dikey ortalamak mümkün değil. Ancak, çeşitli tekniklerle tabii ki mümkün. Bu konuda daha detaylı bilgi ve yöntemlerden biri Fatih Hayrioğlu’nun CSS ile Dikey Ortalama başlıklı makalesinde mevcut.

CSS ile dikey ortalamak için Tolga Arıcan‘dan öğrendiğim başka bir yöntem ise şöyle;
Dikey ortalanacak divimizi kapsayan, position:relative bir div oluşturmak. Ortalanacak div’imizi ise  position:absolute; yapıyor ve içerik yüksekliği kadar yukarıdan eksi margin veriyoruz. Örnek kodlar şu şekilde:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>dikey ortalama</title>
<style>
.tasiyici {width:300px; height:600px; position:relative; background:#e1deee;}
.icerik{ position:absolute; top:50%; left:0; margin-top:-30px; width:200px; text-align:center; background:#fea200;}
</style>
</head>
<body>
  <div class="tasiyici">
    <div class="icerik">Lorem ipsum dolor sit amet, consectetur adipiscing elit. </div>
  </div>
</body>
</html>

Bu kod ile gözlemlediğim kadarıyla browser’lar arası bir uyum problemi yaşanmıyor. Fakat bu yöntem de yüksekliği belirsiz alanlarda hiçbir işe yaramayacaktır. Bu noktada imdadımıza bir jQuery fonksyonu koşuyor.

Fonksyonu bir kaç gün önce, ufak bir Google araması ile buldum. Bugün makalesinin linkini almak için Fatih Hayrioğlu’nun bloguna girince bu fonksyona açılan bir linki görmem de sürpriz oldu. Her neyse…

Aşağıdaki jQuery fonksyonu üzerinde bir değişiklik yapmadan JavaScript dosyanıza, çalışma belgenize ya da uygun bulduğunuz bir yere kopyalayın:

(function ($) {
$.fn.vAlign = function() {
	return this.each(function(i){
	var ah = $(this).height();
	var ph = $(this).parent().height();
	var mh = (ph - ah) / 2;
	$(this).css('margin-top', mh);
	});
};
})(jQuery);

Daha sonra dikey ortalanmasını istediğiniz nesne(ler) ile birlikte şu şekilde fonksyonu çağırabilirsiniz.

$('.ortalanacakDiv').vAlign();

Veya çoklu kullanım için

$('.ortalanacakDiv1, .ortalanacakDiv2, .ortalanacakDiv3').vAlign();

Bu fonksyonun yapmaya çalıştığı şey aslında CSS ile yaptıklarımızın bir tekrarı niteliğinde. Ancak fonksyon burada kapsayıcı div ve içerik div’inin yüksekliklerini (biz height değeri vermesek dahi) bularak, margin ve top değerlerini kendi hesaplıyor, bize zahmet vermeden nesnelerin CSS’lerini kendi düzenliyor.

Eğer yapmak istediğiniz şey nesneyi ekrana göre ortalamak ise Volkan Görgülü’nün jQuery ile Dikey Ortalama başlıklı video paylaşımı da oldukça işinize yarayacaktır.

Ocak 05 / 2010
Yazar Simto ALEV
Kategori CSS, JavaScript
Yorumlar 10 Yorum

CSS Padding Problemi

Son zamanlarda XHTML ve CSS ile tablosuz tasarımlar hazırlamaya iyice merak saldım. Kendi çapımda da bir şeyler oluşturmaya çalışıyorum. Ancak biliyorsunuz ki başta Internet Explorer 6 olmak üzere tüm browser uyumsuzlukları biz webciler için çile haline gelebiliyor. IE6 ile karşımıza çıkacak problemlerden biri de Padding. Google’da Box Model Hacking araması ile bazıları işe yaramasa da bir çok farklı yöntem bulabilirsiniz. Ben ise bugün başka bir yöntemden bahseceğim. Byte israflı ama işe yarar bir yöntem.

Öncelikle 2 sütunlu bir şablon oluşturalım:

<div class=”govde”>
 <div class=”sol”>
  sol alan içeriği
 </div>
 <div class=”sag”>
  sag alan içeriği
 </div>
</div>

Bunun için gerekli CSS dosyası da şöyle olsun:

.govde { width:800px; }
.sol { width:590px; float:left: background:#cccccc; }
.sag { width:200px; float:right: background:#999999; }

Eğer sayfamızı bu şekilde çalıştırırsak, içerik yazılarımız sol ve üste yapışık çıkacak. Bunu önlemek için “sag” ve “sol” adlı class’lara padding-left:5px; padding-top:5px; ekleyebiliriz. Ancak bu şekilde Firefox iki alandaki padding’leri alanların width’lerini ekleyecek. 800px alana sığmadıkları için sag alan, sol alanın altına kayacak. İşte bunu engellemek için şu yöntemi uygulayacağız:

Öncelikle CSS dosyamıza yeni bir satır ekleyeceğiz

.padding5 { padding-left:5px; padding-top:5px; }

Ardından şablon dosyamızı aşağıdaki gibi güncelleyeceğiz

<div class=”govde”>
 <div class=”sol”>
  <div class=”padding5″>
   sol alan içeriği
  </div>
 </div>
 <div class=”sag”>
  <div class=”padding5″>
   sag alan içeriği
  </div>
 </div>
</div>

Böylece alanlarımıza padding vereceğiz ancak padding div’lerinin genişlik veya yükseklik değerleri olmadığı için hiçbir şekilde kaymayacak. Bu şekilde farklı ölçülerde padding class’ları hazırlayıp CSS dosyanıza ekleyebilirsiniz. Darısı margin‘in başına..

Ekim 09 / 2008
Yazar Simto ALEV
Kategori CSS
Yorumlar 6 Yorum

CSS İçin Türkçe E-Kitap

Artık CSS web tasarımcılarının yeni oyuncağı haline geldi. Üzerine gelince renginin değişmesi için kullandığımız CSS bugün öyle bir hale geldi ki, tablolar kullanmadan tasarımlar yapabiliyoruz, nesneleri istediğimiz gibi konumlandırıp sınırları aşıyoruz. CSS ile resim çizenler dahi var. Fakat hâlâ CSS öğrenemeyen tasarımcılar var. Bunun en büyük sebebi de Türkçe kaynak eksikliği…

Fatih Hayrioğlu bu konudaki eksiği gidermek için tüm bilgisini, okuduğu makaleleri derleyip toplamış ve bir e-kitap (e-book) haline getirmiş. Şu an için ileri seviye bilgiler içermiyor bu kitap. Fakat kitap 250 sayfa kadar ve anlatılan her konuda detaylı ve doyurucu bilgiler içeriyor. Biz de bu yüzden Fatih Hayrioğlu‘na teşekkür ediyoruz.

Kitabın İndir
Alternatif Link (RapidShare)
Kaynak Kodlar

Şubat 27 / 2008
Yazar Simto ALEV
Kategori CSS, İşe Yarar
Yorumlar 3 Yorum