2013-03-12 25 views
5

İçinde iki öğeye sahip bir başlık var. Birincisi, bir şirket logosu olan ve% 25 genişliğe ayarlanmış bir görüntüdür. Diğeri ise, öğelerinin yatay olması için satır içi olarak ayarlanmış bir nav çubuğudur. Gezinme çubuğunun dikey olarak merkezden ayarlanmasını istiyorum ama benim için hayatımı anlayamıyorum. Bildiğim her şeyi dikey hizalama kullanabilen ve uygulamak için ekran satır içi veya tablo hücresine yerleştirebilen bir öğeye ayarladım. Hiç birşey çalışmıyor.Dikey olarak bir hareket çubuğu merkezleme

Sadece statik yüzde doldurma ya da kenar boşluğu değeri vermememin nedeni, sayfa genişledikçe, genişliğin yaptığı gibi genişliğin büyüdüğü şekilde genişliğinin genişlemesiyle genişleyeceğinden dolayı, nav daha fazla hale gelir. ve daha fazla yer yok.

Sadece bir nesneyi dikey olarak ortalamak için denediğim (kabul edeceğimden çok daha uzun) herhangi bir yardımı çok takdir ediyorum.

HTML kesmek:

<div id="container"> 
<header id="header" role="banner"> 
    <img src="images" /> 
    <nav id="nav" role="navigation"> 
    <ul> 
     <li><a href="#" title="About Us">About Us</a></li><li><a href="#" title="Biographies">Biographies</a></li><li><a href="#" title="Services">Services</a></li><li><a href="#" title="Careers">Careers</a></li><li><a href="#" title="Contact">Contact</a></li> 
    </ul> 
    </nav> 
</header> 

CSS kesmek:

header img { 
    height: auto; 
    width: 25%; 
    float: left; 
    } 

header nav { 
    width: 75%; 
    font-size: 1em; 
    } 

header nav li { 
    display: inline-block; 

    width: 19%; 
    } 

header nav li a { 
    background: #2CB2E6; 
    line-height: 

İşte basit jsFiddle: Orijinal keman http://jsfiddle.net/LbTCT/

cevap

7

Here's a fork.

header img, header nav { 
    display: inline-block; 
    vertical-align: middle; 
} 

yerine çalışırken float şeyler: Sen logosuna inline-block ve nav elemanı kendisi ayarı gerekmektedir.

+0

Efendim, ben senin büyüklüğüne boyun eğiyorum. – user2093601

+0

"Dikey hizalama" hakkında daha fazla bilgi için [bu CSS hileleri makalesine] bakın (http://css-tricks.com/what-is-vertical-align/). Görünüşte önemsiz bir şey için olması gerekenden daha zor. – CherryFlavourPez

0

Herşeyi satır içi blok olarak koymakla ilgili cevap doğrudur. Şamandıra, bu durumda belge akışı dışındaki öğeleri kırmak dışında sizin için hiçbir şey yapmıyor.

Example Fiddle

Ve alakalı CSS değişiklikleri burada:

Eğer eski tarayıcıları hedefliyorsanız Ancak, burada desteklemeyen olanlar için çalışması gerektiğini bir çözüm tablo hücreleri dışında dikey-hizalamak var
header { 
    position:relative; 
    display:block; 
} 
header:after { 
    visibility: hidden; 
    display: block; 
    font-size: 0; 
    content:" "; 
    clear: both; 
    height: 0; 
} 
header nav { 
    width: 70%; 
    font-size: 1em; 
    position: absolute; 
    top: 50%; 
    line-height: 200%; 
    margin-top: -2em; 
} 
+0

[tweaking] ile (http://blog.mozilla.org/webdev/2009/02/20/cross-browser-inline-block/) 'satır içi-blok' IE6 + – CherryFlavourPez

+0

dahil olmak üzere her yerde çalışacak Sağladığınız bazı anlamsal olmayan yanlış uygulamaları teşvik ediyor, 'inline-block' mülkünün çok gerisinde kalmasını sağlamak için bir dizi standart ihlalden bahsetmiyoruz. Bir 'li 'elemanının içine bir' div' koymamalısınız ve IE7'yi düzeltmek için eski CSS satır içi korsanlarını tanıtmamalısınız. Orijinal çözümdeki HTML5 öğelerinin yanı sıra, sağladığım şey, çözümle çok _creative_ elde etmeden IE6'ya geri dönmelidir. –

+0

Doğru, eski IE'nin bazı korsanlıklara ihtiyacı var (teknik olarak * bir 'li' içinde' div' ile yanlış olan bir şey yok, sadece biraz kirli hissedebilirsiniz). Şahsen, gerektiğinde eski IE'de çalışmasını sağlamak için modern tarayıcılar ve koşullu bir stil sayfası için 'inline-block' çözümünü kullanmayı tercih ediyorum. Mutlak konumlandırma, negatif kenar boşlukları ve% 200 satır yüksekliği bana göre daha kırılgan ve rahatsız görünüyor. – CherryFlavourPez

0

İşte, işaretlemenizde küçük bir değişiklik içeren, bunu yapmanın bir yolu. anahtar listesinin ilk <li> eleman logo resmi yerleştirmektir

#header { 
     background-color: #cccccc; 
     padding: 5px 0; 
    } 
    header { 
     background-color: #f0f0f0; 
    } 
    header nav { 
     border: 1px solid red; 
    } 
    header nav ul { 
     margin: 0; 
     padding: 0; 
    } 
    header nav li { 
     display: inline; 
     margin: 0; 
     padding: 0; 
    } 
    header nav li img { 
     vertical-align: middle; 
     border: 1px solid blue; 
    } 
    header nav li a { 
     vertical-align: middle; 
     font-size: 1.00em; 
     text-decoration: none; 
     background-color: white; 
     color: black; 
     padding: 10px; 
     margin: 0 0 0 10px; 
    } 

: gibi

<div id="header"> 
<header role="banner"> 
    <nav id="navigation" role="navigation"> 
     <ul> 
      <li> 
       <img src="http://i1207.photobucket.com/albums/bb466/audetwebdesign/jsFiddle%20Demos/chamber-logo.png"> 
      </li> 
      <li><a href="#" title="About Us">About Us</a> 

      </li> 
      <li><a href="#" title="Biographies">Biographies</a> 

      </li> 
      <li><a href="#" title="Services">Services</a> 

      </li> 
      <li><a href="#" title="Careers">Careers</a> 

      </li> 
      <li><a href="#" title="Contact">Contact</a> 

      </li> 
     </ul> 
    </nav> 
    </header> 
</div> 

ve CSS görünüyor. Daha sonra listenin tüm öğelerini inline olarak görüntülersiniz ve onları hizalamak için vertical-align: middle kullanın.

İhtiyacınız olan tam görünümü elde etmek için dolgu ve kenar boşluğu özelliklerini ayarlayabilirsiniz. referans için

Fiddle: http://jsfiddle.net/audetwebdesign/adW9Y/

NOT:
kodu da görüntü boyutu görünüm ile büyütülebilir izin için çok uygundur.

.autoSize { 
    width: inherit; 
} 
.autoSize img { 
    width: 25%; 
} 

ve aşağıdaki gibi mark-up bir sınıf ekleme: aşağıdaki CSS kuralı ekleyerek

<li class="autoSize"> 
    <img src="http://i1207.photobucket.com/albums/bb466/audetwebdesign/jsFiddle%20Demos/chamber-logo.png"> 
</li> 

ul elemanı görünüşüdür bağlantı genişliğine genleştiğinden, Genişliği, görüntüyü saran li elemanına devralabilirsiniz. Ardından görüntü için göreli bir genişlik ayarlarsınız (bu örnekte% 25) ve esnek/duyarlı ölçekleme elde edersiniz.

+0

Bu oldukça düzgün, ancak OP'nin gereksinimlerinden birini ele almakta başarısız oluyor, yani görüntü, görünüm genişliğine göre yeniden boyutlandırılıyor. Bu örnekte, sabit bir boyuttur. – CherryFlavourPez

+0

Kullandığınız 'satır içi blok' yaklaşımı, orijinal işaretlemeye çok daha saygılı, bu nedenle bu durumda daha iyi bir yaklaşımdır. Yorumunuz bana CSS'yi inceleme konusunda ilham verdi ve kod, birkaç ek stil belirleyerek görüntünün görüntülenmesine izin verebilir, lütfen mesajımda bulunan NOT'a bakın. Geri bildiriminizi takdir ediyorum, en iyisi! –

İlgili konular