ระยะขอบอัตโนมัติไม่ได้อยู่กึ่งกลางของภาพในหน้า


98

ในตัวอย่างนี้ภาพไม่ได้อยู่กึ่งกลาง ทำไม? เบราว์เซอร์ของฉันคือ Google Chrome v10 บน windows 7 ไม่ใช่ IE

<img src="/img/logo.png" style="margin:0px auto;"/>

การทดสอบคลาสสไตล์ฉันพบว่านี่ไม่ใช่ระยะขอบที่ใช้งานได้: 0 อัตโนมัติ; หลังจากการทดสอบบางส่วนพบว่าหากชื่อคลาสที่คุณเพิ่มลงในองค์ประกอบมีชื่อเดียวกับองค์ประกอบนี้จะใช้ไม่ได้
LostLight

คำตอบ:


219

เพิ่มdisplay:block;แล้วมันจะทำงาน รูปภาพจะอยู่ในบรรทัดโดยค่าเริ่มต้น

เพื่อชี้แจงความกว้างเริ่มต้นสำหรับblockองค์ประกอบคือautoซึ่งแน่นอนว่าจะเติมเต็มความกว้างที่มีอยู่ทั้งหมดขององค์ประกอบที่มี

โดยการตั้งค่าอัตรากำไรขั้นต้นที่จะautoมอบหมายเบราว์เซอร์ครึ่งหนึ่งของพื้นที่เหลือสำหรับการและอีกครึ่งหนึ่งจะmargin-leftmargin-right


12
+1 เพื่อความถูกต้อง จะให้คำตอบที่ดีหากคุณอธิบายสิ่งที่จำเป็นสำหรับmargin:autoการจัดกึ่งกลางรายการในโฟลว์ ( display:blockหรือdisplay:table, position:staticหรือposition:relativeอื่น ๆ )
Phrogz

1
@Phrogz เห็นด้วย; เพิ่มคำอธิบายบางอย่าง
รอส

15
ผู้ที่อ่านข้อความนี้อาจพบว่าการเพิ่ม "float" ไม่มีประโยชน์เนื่องจากการลอยตัวแบบอื่นจะทำให้มาร์จิ้นอัตโนมัติของคุณหมดไป
Code Whisperer

แต่มันยังไม่ตรงกลาง จะอยู่กึ่งกลางในแนวนอนเท่านั้น ฉันต้องการจัดกึ่งกลางในแนวตั้ง แต่แม้ว่าฉัน0px autoจะเปลี่ยนเป็นเพียงแค่autoมันก็ยังไม่ได้ผล
Aaron Franke

ไม่แน่นอนระยะขอบอัตโนมัติเป็น "แฮ็ก" ที่เก่ากว่าเพื่อจัดกึ่งกลางเนื้อหา หากคุณต้องการการจัดตำแหน่งที่แม่นยำให้ใช้ flexbox: display: flex; align-items: center; justify-content: centerและตอนนี้เนื้อหาของคุณอยู่ตรงกลางในแนวนอนและแนวตั้ง หรือย้ายไปalign-self: center; justify-self: centerที่เนื้อหาเอง css-tricks.com/snippets/css/a-guide-to-flexbox
Mike 'Pomax' Kamermans

14

ภายใต้สถานการณ์บาง (เช่นรุ่นก่อนหน้า IE, ตุ๊กแก Webkit) และมรดกองค์ประกอบที่มีposition:relative;จะป้องกันmargin:0 auto;จากการทำงานแม้ว่าtop, right, bottomและleftไม่ได้ตั้งค่า

การตั้งค่าองค์ประกอบเป็นposition:static;(ค่าเริ่มต้น) อาจแก้ไขได้ภายใต้สถานการณ์เหล่านี้ โดยทั่วไปองค์ประกอบระดับบล็อกที่มีความกว้างที่ระบุจะmargin:0 auto;ใช้อย่างใดอย่างหนึ่งrelativeหรือการstaticวางตำแหน่ง


1
margin: 0 autoใช้งานได้ดีกับองค์ประกอบที่อยู่ในตำแหน่งที่ค่อนข้างยาวตราบเท่าที่เป็นองค์ประกอบบล็อกที่ไม่มีลอยและความกว้างที่ระบุ ...
Ennui

ฉันคิดว่านั่นเป็นการถากถาง หากคุณแก้ไขคำตอบไม่ถูกต้องฉันจะลบการลงคะแนน ฉันเขียน CSS มาเกือบ 15 ปีแล้วและจำไม่ได้เลยว่าระยะขอบอัตโนมัติที่ไม่ทำงานกับองค์ประกอบความกว้างคงที่ในตำแหน่งที่ค่อนข้างตรงกลางในแนวนอนแม้ว่าคุณสมบัติอื่น ๆ จะชอบfloatและdisplayสามารถเปลี่ยนแปลงพฤติกรรมนั้นได้
Ennui

14

คุณสามารถจัดกึ่งกลาง div ความกว้างอัตโนมัติโดยใช้ display:table;

div{
margin: 0px auto;
float: none;
display: table;
}

1
ได้ผลและฉันไม่รู้ว่าทำไม คุณช่วยอธิบายได้ไหม
ThatsJustCheesy

1
ฉันไม่เคยใช้มาก่อน แต่ตอนนี้ใช้ได้กับฉันแล้ว
zkytony

10

ในกรณีของปัญหาที่เกิดขึ้นคือการที่ผมได้ตั้งนาทีและความกว้างสูงสุดโดยไม่ต้องมีความกว้างตัวเอง


3
สรุป: องค์ประกอบต้องposition:staticมีwidth:ชุดคงที่และเป็นdisplay:blockองค์ประกอบ
Joey T

มันเป็นปัญหาเรื่องความกว้างสำหรับฉันเช่นกัน - bootstrap ตั้งค่า div ของฉันโดยอัตโนมัติให้ใช้งานได้ 100%
Edmund Sulzanok

6

เมื่อใดก็ตามที่เราไม่เพิ่มความกว้างและเพิ่มmargin:autoฉันเดาว่ามันจะไม่ได้ผล มันมาจากประสบการณ์ของฉัน ความกว้างให้แนวคิดว่าจะต้องให้ระยะขอบเท่ากัน


2

มีทางเลือกอื่นmargin-left:auto; margin-right: auto;หรือmargin:0 auto;สำหรับคนที่ใช้position:absolute;วิธีนี้:
คุณตั้งค่าตำแหน่งด้านซ้ายขององค์ประกอบเป็น 50% ( left:50%;) แต่จะไม่จัดกึ่งกลางอย่างถูกต้องเพื่อให้องค์ประกอบอยู่ตรงกลางอย่างถูกต้องคุณต้องให้ ระยะขอบของลบครึ่งหนึ่งของความกว้างซึ่งจะจัดกึ่งกลางองค์ประกอบของคุณอย่างสมบูรณ์แบบ

นี่คือตัวอย่าง: http://jsfiddle.net/35ERq/3/



0

ใส่สิ่งนี้ใน css ของร่างกาย: background: # 3D668F; จากนั้นเพิ่ม: display: block; ระยะขอบ: อัตโนมัติ; ไปที่ css ของ img


0

ฉันจำได้ว่าวันหนึ่งฉันใช้เวลาส่วนใหญ่ในการพยายามจัด div ให้อยู่กึ่งกลางโดยใช้margin: 0 auto.

ฉันมีdisplay: inline-blockมันเมื่อฉันถอดมันออก div อยู่ตรงกลางอย่างถูกต้อง

ดังที่ Ross ชี้ให้เห็นว่ามันใช้ไม่ได้กับองค์ประกอบแบบอินไลน์

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