Süper bir özellik display:inline-block

Alışkanlıklar kolay kolay bırakılmıyor. Zamanında display:inline-block özelliğini Firefox desteklemediği(Firefox desteği 3. sürümden itibaren geldi) için kullanmıyordum. Hala orada kalmışım hiç kullanmıyorum bu özelliği, şimdi bir projede gerekti ve kullandım. Çok hoşuma gitti. Tekrar bir hatırlayalım display:inline-block özelliği hibrit bir özelliktir. Bir yanı satır içi davranırken bir yanı blok davranır.

display:inline-block tanımı yapılmış elemanlar satır için akış içinde satır içi eleman gibi davranırken, elemente genişlik, yükseklik ve dikey margin değerleri tanımlanırsa satır içinde blok-level özelliğine bürünür.

display:inline-block elementler çevresindeki elementlere ve satır içi kutu içeriklerine göre farklı davranışlar gösterir.

Durumu daha iyi anlamak için genel bir örnek yapalım. 3 paraftan oluşan bir içeriğimiz olsun ve bu içerikteki belli bir kısmı paragraf etiketi içine alalım ve bunlara sırası ile display:block, display:inline ve display:inline-block tanımları atayalım

<div id="denemeBir"> Lorem ipsum dolor sit amet... <p>Praesent id nunc eros. Integer mauris orci, venenatis ac tempor ut, gravida ac diam. </p> Pellentesque...</div>
<div id="denemeIki">Quisque at venenatis nulla...<p>Nam fermentum porttitor hendrerit.</p> Mauris ante nulla..</div>
<div id="denemeUc"> Sed urna neque...<p>Sed est lacus, laoreet at malesuada quis, convallis ut nibh.</p> Sed dapibus...</div>

CSS kodu

div {margin: 10px 0; border: 1px solid #000;}
p {border: 1px dotted #000;}
    div#denemeBir p {display: block; width: 50px; text-align: center; background-color:#FF0}
    div#denemeIki p {display: inline; width: 50px; text-align: center; background-color:#0FF}
    div#denemeUc p {display: inline-block; width: 50px; text-align: center; background-color:#F0F}

Örneği görmek için tıklayınız.

Aynı yapıdaki elemanların display özelliğine sırası ile block, inline ve inline-block tanımlarını atadık.

display:block uygulanan paragraf kendisine atanan width, text-align:center özelliğini yorumlamış ve blok-level bir element olarak sonrasına bir boşluk bırakmıştır.

display:inline tanımı yapılmış paragraf kendisine atanan width, text-align:center tanımlarını görmemiştir.

display:inline-block uygulanmış paragraf ise kendisine uygulanan width ve text-align:center tanımlarını görmüş ama bir blok-level element gibi sonrasına bir boşluk bırakmamıştır. Tam bir hibrit özellik göstermiştir.

display:inline-block tanımını daha iyi anlamak için nerelerde kullanırız neler yapabiliriz buna bakalım.

Float kullanmadan display:inline-block ile elemanları yan yana dizmek

<div id="menu">
<a href="">Ana Sayfa</a>
 <a href="">Ürünler</a>
<a href="">İletişim</a>
</div>

CSS kodumuzu yazalım;

#menu a{
  width:150px;
  height:50px;
  display: inline-block;
  margin:0;
  padding:5px;
  color: #1B1B1B;
  background-color: #E2E2E2;
  text-decoration: none;
  border-top:5px solid #999
}

Örneği görmek için tıklayınız.

Bu kod ile biz öğeleri yan yana dizeriz. Normalde hiç bir tanım yapmasak da bu elemanlar yan yana dizilecekti, ancak bu elemanlar arasındaki mesafeyi ayarlıyamıyacaktık. Hem satır içi eleman gibi yan yana dursun hemde genişlik, yükseklik ve margin tanımlarını uygulayalım istersek display:inline-block tanımı yapmalıyız.

Dikeyde ortalama

Float uygulanmış elemanların dikeyde ortalamak çok zordur, aksine display:inline-block uyguladığımız elemanları sadece vertical-align özelliği kullanarak dikey ortalama yaparız. Dikeyde ortalama aynı seviyedeki elemanlar arasında olduğunu unutmamak lazım.

Bir örnek yapalım. Yan yana dizilmiş üç kutu hazırlayalım ve bunları kapsayıcı katmana göre dikey olarak üstte, ortada ve altta hizalayalım.

<div class="anaKapsul">
    <div class="solKutu">Sol</div>
    <div class="ortaKutu">Orta</div>
    <div class="sagKutu">Sağ</div>
</div>

CSS kodumuzu yazalım.

.anaKapsul { border: 1px gray solid; padding: 5px; text-align: center; }
    .solKutu { display: inline-block; background-color: lightblue; vertical-align: middle; width: 200px; height: 200px; }
    .ortaKutu { display: inline-block; background-color: yellow; vertical-align: middle; width: 200px; height: 150px; }
    .sagKutu { display: inline-block; background-color: gray; vertical-align: bottom; width: 200px; height: 100px; }

Örneği görmek için tıklayınız.

Firefox, Safari, Google Chrome, Opera ve İE8′de bu görüntüyü elde ederiz. Ancak ie7 ve ie6′da durum böyle değildir.

Bu tarayıcılarda aynı sonucu elde etmek için bu tarayıcılar için bu elemnalara display:inline ve zoom:1 tanımı yapmalıyız. Bunun için tüm tarayıcılar için düzeltmeler kısmındaki kodlardan yararlanacağım.

*:first-child+html div.anaKapsul div{display:inline; zoom: 1;}
* html div.anaKapsul div{display:inline; zoom: 1;}

Bu kodları ekledikten sonra sorunumuz düzeldi.

Kaynaklar

20 Yorum (Yorum Ekle)

  • Faruk diyor ki:

    Fatih Bey, bu kodu kullandım sitemin footer kısmında ancak Google Chrome tarayıcısında sorun veriyor neden olabilir nasıl düzeltebilirim mozilla ve ie'de test ettim sorun yok.

    Chrome; http://i52.tinypic.com/905yqg.jpg

    Mozilla; http://i52.tinypic.com/k48g7d.jpg

    Teşekkürler.

  • Faruk diyor ki:

    http://i52.tinypic.com/905yqg.jpg http://i52.tinypic.com/k48g7d.jpg

    CSS Kodum:
    [CODE]/**************/
    /* Footer */
    /**************/

    #footer_frame { width: 100%; display: inline-block; background: #000 url(../core_images/footer_wrapper.jpg) repeat-x; padding-top: 20px; padding-bottom: 30px; margin-top: 50px; }

    #footer_wrapper { width: 980px; margin: auto; }

    .footer_box { display: inline; width: 160px; float: left; margin-right: 30px; }

    /* Footer lists */

    .footer_box ul { float: left; margin-top: 15px; width: 160px; }

    .footer_box ul li { height: 25px; width: 160px; display: inline; float: left; border-top: 1px solid #4d4d4d; overflow: hidden; }

    .footer_box ul li a { color: #4d4d4d; font-size: 10px; line-height: 25px; }

    .footer_box ul li a:hover { color: #919191; padding-left: 5px; }

    /* Footer logo */

    div#footer_logo_wrapper { height: 50px; background: url(../core_images/footer_logo_wrapper.jpg) repeat-x; padding-top: 20px; }

    #footer_logo { width: 157px; height: 12px; background: url(../core_images/logo.png) no-repeat 0 bottom; margin-right: auto; margin-left: auto; margin-bottom: auto; }
    [/CODE]

  • Yalçın Ceylan diyor ki:

    Allah senden razı olsun geceden sabaha kadar floatla positionlara takmış durumdaydım..

  • Eray BAL diyor ki:

    S.a Hocam
    Yanyana dizdiğimiz divlerdeki "orta" div'ine margin-left: auto, margin-right: auto, vermek istersek bozuluyor.

    ortadaki divin sayfa ya oranlı olması lazım bunun için ne yapmalıyız.

  • Hakan diyor ki:

    fatih dostum çok iyi de pencere küçülttüğüm zaman sağdaki div aşağı kayıyor. bunu nasıl düzeltebilirim. yani z-index ile altta veya en üstte olmasını nasıl sağlarım. iki adet divim var inline-block uygulanmış sağdaki aşağıya iniyor.

  • EvFC diyor ki:

    çok teşekkürler bilgiler çok işime yaradı tam aradığım şeyleri sürekli burada bulmak beni çok mutlu ediyor

  • aydinsafa diyor ki:

    sizden ricam block ile inline-block arasındaki farki birazdaha detaylandırırmısınız…

  • neslihan diyor ki:

    merhablar çıldırtan bir sorunum var : ( sayfayı ortalama konusunda cok sükür yatayda sorunumu çözdüm ama dikeyde bu sefer başım belada :(
    <center><div> </div> </center> araında farklı <div> ler <li > kullandım ama bazı
    <div> ler <li > ler center da tanımladıgım div ile hareket ediyor yani sayfanın boyutunu buyultsem onlarda asagıya kayıyorlar birbiri ile sanki yapışık hareket ediyorlar ……

    lutfen acil yardımm…..

  • Orhan Ekici diyor ki:

    Valla Fatih abi ben şu zoom:1 i bilmiyodum ama süpermiş ya
    yani dikey ortalama için attığım taklalar akla gelince
    uu shiny yani

  • Volkan Karakuş diyor ki:

    Eline sağlık Fatih abi harika bir anlatım ve uygulama olmuş. Kısa zamanda ben de kendi bilgisayarımda test edeceğim.

Yorum yaz

Format: Yorum içinde kullanılabilecek HTML kodları: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

?