วิธีการจัดตำแหน่งในแนวตั้ง <li> องค์ประกอบใน <ul>?


97

ฉันมีแนวนอน<ul>และฉันต้องจัดกึ่งกลาง<li>ในแนวตั้ง มาร์กอัปของฉันอยู่ด้านล่าง แต่ละอัน<li>มีเส้นขอบและฉันต้องการให้ไอเท็มรวมถึงเนื้อหาอยู่ตรงกลางในแนวตั้ง กรุณาช่วย; ฉันยังใหม่กับ CSS


<?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 - ฉันรู้ว่าสิ่งนี้ได้รับคำตอบแล้ว แต่ในกรณีที่ใครก็ตามดูสิ่งนี้จากนี้ไปฉันพบว่าสิ่งนี้มีประโยชน์
JabbaWook

คำตอบ:


76

ฉันคิดว่าเนื่องจากคุณใช้การประกาศ XML คุณจึงไม่ต้องกังวลกับ IE หรือเบราว์เซอร์รุ่นเก่า

ดังนั้นคุณสามารถใช้display:table-cellและdisplay:table-rowชอบ:

<?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
ขอบคุณมันใช้งานได้บางส่วน นั่นคือเนื้อหาของกล่องด้านหลังจะอยู่ตรงกลาง แต่ฉันจะอยู่ตรงกลางกล่องได้อย่างไร?
akonsu

ไม่ไม่กลางรายการ ในตัวอย่างนี้ช่องสุดท้ายควรต่ำกว่าสามช่องแรก
akonsu

@akonsu - ฉันเปลี่ยนมันแม้ว่าฉันจะไม่ได้ทดสอบกับอย่างอื่นนอกจาก FireFox แจ้งให้เราทราบหากเหมาะสม
Richard JP Le Guen

1
Richard ขอบคุณมากสำหรับความช่วยเหลือของคุณ ฉันไม่ทราบเกี่ยวกับประเภทการแสดงผลเหล่านี้ ขออภัยไม่รองรับ IE7 ฉันพบวิธีจัดแนวเนื้อหาของแต่ละ <li>: ampsoft.net/webdesign-l/vertical-aligned-nav-list.htmlแต่ดูเหมือนว่าจะไม่มีวิธีข้ามเบราว์เซอร์เพื่อจัดแนว <li> ภายใน <ul> ..
akonsu

1
หากคุณกำหนดเป้าหมายไปที่ IE7 ทำไมคุณถึงมีการ<?xml?>ประกาศ IE ทุกเวอร์ชันไม่รองรับ XHTML จริงๆ ฉันคิดว่าคุณอาจต้องอ่านการส่ง XHTML เป็นข้อความ / html ถือว่าเป็นอันตราย: hixie.ch/advocacy/xhtml
Richard JP Le Guen

75

นี่เป็นสิ่งที่ดี:

ชุดline-heightเท่ากับใดheightคือ; ใช้งานได้เหมือนมีเสน่ห์!

เช่น:

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

1
คุณสามารถอธิบายด้วยตัวอย่างเล็กน้อยได้หรือไม่?
Leigh

1
สมบูรณ์แบบ - line-height: 30px; on floated <li> คือสิ่งที่ฉันต้องการ (Chrome)
GuruBob

1
จะเกิดอะไรขึ้นถ้ามันแบ่งออกเป็นสองบรรทัด?
Mahesh

1
ใช่ใช้ได้เฉพาะกับข้อความไม่เกินหนึ่งบรรทัด
Wanny Miarelli

1
นี่เป็นสิ่งเดียวที่ใช้ได้ผลสำหรับฉัน คำตอบอื่นไม่ได้ผล
adev

35

คุณสามารถใช้ flexbox สำหรับสิ่งนี้

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

คำอธิบายรายละเอียดของวิธีการใช้ flexbox สามารถพบได้ที่นี่


5

ผมมีปัญหาเดียวกัน. ลองทำตามนี้

<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;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.