ฉันรู้ว่าคำถามนี้เก่า แต่ฉันพบว่าสิ่งที่เป็นวิธีแก้ปัญหาที่สมบูรณ์แบบสำหรับฉัน
ฉันเพิ่ม css นี้ใน div ที่ฉันต้องการจัดกึ่งกลาง:
div:before {
content: "";
display: inline-block;
height: 100%;
vertical-align: middle;
}
วิธีนี้ใช้งานได้ทุกครั้งและสะอาด
แก้ไข: เพื่อความสมบูรณ์ฉันใช้ scss และฉันมีมิกซ์อินที่มีประโยชน์ซึ่งฉันรวมไว้กับผู้ปกครองทุกคนที่เป็นลูกโดยตรงฉันต้องการให้มีศูนย์กลางในแนวตั้ง:
@mixin vertical-align($align: middle) {
&:before {
content: "";
display: inline-block;
height: 100%;
vertical-align: $align;
font-size: 0;
}
& > * {
vertical-align: $align;
font-size: 14px;
}
}
คำอธิบายแบบเต็ม:
div:beforeจะเพิ่มองค์ประกอบภายใน div แต่ก่อนลูก ๆ ของมัน เมื่อใช้:beforeหรือ:afterเราต้องใช้content:คำประกาศมิฉะนั้นจะไม่มีอะไรเกิดขึ้น แต่สำหรับวัตถุประสงค์ของเราเนื้อหาอาจว่างเปล่า จากนั้นเราจะบอกให้องค์ประกอบนั้นสูงเท่ากับพาเรนต์ตราบเท่าที่มีการกำหนดความสูงของพาเรนต์และองค์ประกอบนี้เป็นอินไลน์บล็อกเป็นอย่างน้อย vertical-alignกำหนดตำแหน่งแนวตั้งของตัวเองที่เกี่ยวข้องกับผู้ปกครองซึ่งต่างจากtext-alignที่ทำงานต่างกัน
การ@mixinประกาศมีไว้สำหรับผู้ใช้ sass และจะใช้ในลักษณะนี้:
div {
@include vertical-align(middle)
}