CSS แนวตั้งแนวตั้งใช้ไม่ได้กับ float


86

ฉันจะใช้vertical-alignเช่นเดียวกับfloatในdivคุณสมบัติ? ใช้vertical-alignงานได้ดีถ้าฉันไม่ใช้ไฟล์float. แต่ถ้าใช้ลูกลอยแล้วไม่ได้ผล เป็นสิ่งสำคัญสำหรับฉันที่จะใช้float:rightสำหรับ div สุดท้าย

ฉันกำลังพยายามติดตามหากคุณลบ float ออกจาก div ทั้งหมดก็จะใช้ได้ดี:

<div class="wrap">
    <div class="left">First div, float left,  has more text.</div>
    <div class="left2">Second div, float left </div>
    <div class="right">Third div, float right</div>
</div>

CSS:

.wrap{
    width: 500px;
    overflow:hidden;    
    background: pink;
}

.left {
    width: 150px;       
    margin-right: 10px;
    background: yellow;  
    float:left;
    vertical-align: middle;  
    display:inline-block

}

.left2 {
    width: 150px;    
    margin-right: 10px;
    background: aqua;
    float:left;
    vertical-align: middle;   
    display:inline-block
}

.right{
    width: 150px;
    background: orange;
    float:right;
    vertical-align: middle;
    display:inline-block
}

JSFiddle

คำตอบ:


90

คุณต้องตั้งค่าความสูงของเส้น

<div style="border: 1px solid red;">
<span style="font-size: 38px; vertical-align:middle; float:left; line-height: 38px">Hejsan</span>
<span style="font-size: 13px; vertical-align:middle; float:right; line-height: 38px">svejsan</span>
<div style="clear: both;"></div>

http://jsfiddle.net/VBR5J/


32
หากคุณตั้งค่าline-heightด้วยค่าเดียวกันสำหรับองค์ประกอบทั้งหมดvertical-alignจะไม่มีประโยชน์ ( jsfiddle.net/VBR5J/448 )
Éderson T. Szlachta

ใช้ไม่ได้กับ<button>องค์ประกอบ แทนที่จะ<span>เป็นไฟล์<button>.
กรีน

15
คำตอบนี้ผิด แนวตั้งอยู่บนคอนเทนเนอร์ (the div) ไม่ใช่แต่ละองค์ประกอบ วิธีการแก้ปัญหาที่ถูกต้อง - มีความสามารถในแนวตั้งสอดคล้ององค์ประกอบลอย - คือการใส่ทั้งสองvertical-alignและบนบรรจุภัณฑ์:line-height <div style="border: 1px solid red; vertical-align:middle; line-height: 38px;">ลบvertical-align:middle; line-height: 38px;ออกจากรูปแบบช่วง
ToolmakerSteve

1
เพิ่งค้นพบว่าสิ่งที่ฉันแนะนำใช้ได้กับช่วงลอยในซอของคำตอบ แต่ไม่ใช่สำหรับองค์ประกอบบางอย่าง (ล้มเหลวสำหรับอินพุตวิทยุแบบลอย)
ToolmakerSteve

1
@ToolmakerSteve ผิดและคำตอบนี้ผิด การจัดแนวแนวตั้งใช้กับองค์ประกอบแบบอินไลน์บล็อคอินไลน์หรือเซลล์ตารางเท่านั้น (อันหลังแปลก ๆ ) การเพิ่ม 'float' ทำให้ en element เป็น block element อย่างไรก็ตามการใช้ความสูงของเส้น (และละเว้นแนวตั้ง) อาจเป็นวิธีแก้ปัญหาได้
commonpike

15

แก้ไข:

แนวตั้งชิดคุณสมบัติ CSS ระบุแนวตั้งของอินไลน์อินไลน์บล็อกหรือตารางเซลล์องค์ประกอบ

อ่านบทความนี้เพื่อทำความเข้าใจเกี่ยวกับแนวตั้ง


1
มันใช้กับinline-blockองค์ประกอบด้วย
Rolf

1
อัปเดตแล้ว ฉันพลาดไปแล้ว ขอบคุณที่กล่าวถึง
Ahsan Khurshid

4
นี่ไม่ใช่คำตอบ
Serzhan Akhmetov

แม้ว่าลิงก์นี้อาจตอบคำถามได้ แต่ควรรวมส่วนสำคัญของคำตอบไว้ที่นี่และระบุลิงก์เพื่อการอ้างอิง คำตอบแบบลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าที่เชื่อมโยงเปลี่ยนไป - จากรีวิว
Utsav Patel

8

การจัดตำแหน่งแนวตั้งใช้ไม่ได้กับองค์ประกอบลอย นั่นเป็นเพราะ float ยกองค์ประกอบจากโฟลว์ปกติของเอกสาร คุณอาจต้องการใช้เทคนิคการจัดแนวแนวตั้งอื่น ๆ เช่นเทคนิคที่ใช้การแปลงการแสดง: ตารางการวางตำแหน่งสัมบูรณ์ความสูงของเส้น js (อาจเป็นทางเลือกสุดท้าย) หรือแม้แต่ตาราง html แบบเก่า (อาจเป็นตัวเลือกแรกหากเนื้อหาเป็น ตารางจริง) คุณจะพบว่ามีการถกเถียงกันอย่างดุเดือดในประเด็นนี้

อย่างไรก็ตามนี่คือวิธีที่คุณสามารถจัดแนว 3 div ของคุณในแนวตั้ง:

.wrap{
    width: 500px;
    overflow:hidden;    
    background: pink;
}

.left {
    width: 150px;       
    margin-right: 10px;
    background: yellow;  
    display:inline-block;
    vertical-align: middle; 
}

.left2 {
    width: 150px;    
    margin-right: 10px;
    background: aqua; 
    display:inline-block;
    vertical-align: middle; 
}

.right{
    width: 150px;
    background: orange;
    display:inline-block;
    vertical-align: middle; 
}

ไม่แน่ใจว่าเหตุใดคุณจึงต้องการทั้งความกว้างคงที่การแสดงผล: อินไลน์บล็อกและลอยตัว


คุณสามารถเพิ่มรหัสลงในคำตอบของคุณเพื่อแสดงวิธีการแก้ปัญหาได้หรือไม่?
หอยเป๋าฮื้อ

นอกจากนี้ "คำตอบที่ถูกต้อง" นั้นง่ายมากที่จะทำลาย ... ทำให้ฉันสงสัยว่าคน 19 คนบนโลกโหวตมันได้อย่างไร
Gabriel

3
คำถามกล่าวว่า "เขาต้องการลูกลอย: อยู่ที่องค์ประกอบสุดท้าย" ดังนั้นเขาอาจต้องให้องค์ประกอบสุดท้ายอยู่ทางด้านขวาของภาชนะ จะบรรลุเป้าหมายนั้นได้อย่างไรในคำตอบของคุณ?
บิน. x

คำตอบที่ดีและนอกจากนี้ยังชัดเจน! มันไม่มีตัวเลือก Flexbox
Luillyfe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.