<ul> öğesinde <li> öğeleri dikey olarak nasıl hizalanır?


97

Bir yatayım var <ul>ve her birini <li>dikey olarak ortalamam gerekiyor. İşaretlemem aşağıda. Her <li>birinin bir sınırı var ve öğelerin yanı sıra içeriklerinin dikey olarak ortada olmasına ihtiyacım var. Lütfen yardım et; CSS'de yeniyim.


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <style type="text/css">
        .toolbar li
        {
            border: solid 1px black;
            display: block;
            float: left;
            height: 100px;
            list-style-type: none;
            margin: 10px;
            vertical-align: middle;
        }
        .toolbar li.button
        {
            height: 50px;
        }
    </style>
</head>
<body>
    <div class="toolbar">
        <ul>
            <li><a href="#">first item<br />
                first item<br />
                first item</a></li>
            <li><a href="#">second item</a></li>
            <li><a href="#">last item</a></li>
            <li class="button"><a href="#">button<br />
                button</a></li>
        </ul>
    </div>
</body>
</html>

w3schools.com/css/css_navbar.asp - Bunun yanıtlandığını biliyorum ama bundan sonra birisinin buna
bakması durumunda

Yanıtlar:


76

Bir XML bildirimi kullandığınız için, IE veya daha eski tarayıcılar için endişelenmediğinizi varsayıyorum.

Böylece kullanabilir display:table-cellve display:table-rowbeğenebilirsiniz:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <style type="text/css">
        .toolbar ul {
            display:table-row;
        }
        .toolbar ul li
        {
            display: table-cell;
            height: 100px;
            list-style-type: none;
            margin: 10px;
            vertical-align: middle;
        }
        .toolbar ul li a {
            display:table-cell;
            vertical-align: middle;
            height:100px;
            border: solid 1px black;
        }
        .toolbar ul li.button a {
            height:50px;
            border: solid 1px black;
        }
    </style>
</head>
<body>
    <div class="toolbar">
        <ul>
            <li><a href="#">first item<br />
                first item<br />
                first item</a></li>
            <li><a href="#">second item</a></li>
            <li><a href="#">last item</a></li>
            <li class="button"><a href="#">button<br />
                button</a></li>
        </ul>
    </div>
</body>
</html>

1
teşekkürler, bu kısmen çalışıyor. yani, arka kutuların içeriği ortalanır, ancak kutuları nasıl ortalayabilirim?
akonsu

hayır, hayır, listenin ortası. bu özel örnekte, son kutu ilk üç kutudan daha düşük olmalıdır.
akonsu

@akonsu - FireFox dışında bir şey üzerinde test etmemiş olsam da değiştirdim. Uygun olup olmadığını bana bildirin.
Richard JP Le Guen

1
Richard, yardımın için çok teşekkürler. bu gösterim türleri hakkında bir bilgim yoktu. maalesef IE7'de desteklenmiyorlar. <li>: ampsoft.net/webdesign-l/vertical-aligned-nav-list.html her birinin içeriğini hizalamanın bir yolunu buldum, ancak <li> <ul> içinde hizalamanın çapraz tarayıcı yolu yok gibi görünüyor. ..
akonsu

1
IE7'yi hedefliyorsanız, neden bir <?xml?>beyanınız var? IE'nin tüm sürümleri XHTML'yi gerçekten desteklemez. Metin / html Zararlı Olarak Görülen
Richard JP Le Guen

75

İşte iyi bir tane:

Neyse line-heightona eşit ayarlayın height; tıkır tıkır çalışıyor!

Örneğin:

li {
    height: 30px;
    line-height: 30px;
}

1
Küçük bir örnekle detaylandırır mısınız?
Leigh

1
Mükemmel - satır yüksekliği: 30px;
floated

1
İki satıra ayrılırsa ne olur?
Mahesh

1
Evet, yalnızca birden fazla metin satırı ile uygulanabilir.
Wanny Miarelli

1
Benim için işe yarayan tek şey bu. Diğer cevaplar işe yaramadı.
adev

35

Bunun için flexbox'ı kullanabilirsiniz.

ul {
    display: flex;
    align-items: center;
}

Flexbox'ın nasıl kullanılacağına dair ayrıntılı bir açıklama burada bulunabilir .


4

Ben de aynı sorunu yaşadım. Bunu dene.

<nav>
    <ul>
        <li><a href="#">AnaSayfa</a></li>
        <li><a href="#">Hakkımızda</a></li>
        <li><a href="#">İletişim</a></li>
    </ul>
</nav>
@charset "utf-8";

nav {
    background-color: #9900CC;
    height: 80px;
    width: 400px;
}

ul {
    list-style: none;
    float: right;
    margin: 0;
}

li {
    float: left;
    width: 100px;
    line-height: 80px;
    vertical-align: middle;
    text-align: center;
    margin: 0;
}

nav li a {
    width: 100px;
    text-decoration: none;
    color: #FFFFFF;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.