อะไรคือสิ่งที่จำเป็นสำหรับ“ margin: 0 auto;” ไปทำงาน?


206

ฉันรู้ว่าการตั้งค่าmargin: 0 auto;องค์ประกอบใช้เพื่อจัดกึ่งกลาง (ซ้าย - ขวา) อย่างไรก็ตามฉันรู้ว่าองค์ประกอบและผู้ปกครองต้องตรงตามเกณฑ์บางอย่างเพื่อให้ระยะขอบอัตโนมัติทำงานได้และฉันไม่สามารถทำให้ถูกต้องได้

ดังนั้นคำถามของฉันง่าย: คุณสมบัติ CSS ใดที่จะต้องมีการตั้งค่าในองค์ประกอบและผู้ปกครองของมันเพื่อmargin: 0 auto;ให้เด็กตรงกลางซ้ายขวา?


ดูเหมือนว่ามันจะไม่ทำงานอย่างถูกต้องสำหรับฉันใน IE ... ดังนั้นฉันอยากรู้เกี่ยวกับเรื่องนี้เช่นกัน
mpen

5
@ Mark: IE จะจัดการmargin: 0 auto;อย่างถูกต้องเฉพาะในโหมดมาตรฐานดังนั้นคุณจึงจำเป็นต้องมีประเภทเอกสาร (ราวกับว่าไม่จำเป็นต้องใช้มาก่อน)
BoltClock

คำตอบ:


292

ปิดส่วนหัวของฉัน:

  1. องค์ประกอบจะต้องเป็นระดับบล็อกเช่นdisplay: blockหรือdisplay: table
  2. องค์ประกอบจะต้องไม่ลอย
  3. องค์ประกอบต้องไม่มีตำแหน่งที่แน่นอนหรือแน่นอน1

ออกจากหัวของคนอื่น:

  1. องค์ประกอบจะต้องมีwidthที่ไม่ใช่auto2

โปรดทราบว่าเงื่อนไขเหล่านี้ทั้งหมดจะต้องเป็นจริงขององค์ประกอบที่เป็นศูนย์กลางในการทำงาน


1 มีหนึ่งข้อยกเว้นนี้คือถ้าคงที่หรือองค์ประกอบตำแหน่งอย่างมีของคุณleft: 0; right: 0, มันจะอยู่ตรงกลางที่มีอัตรากำไรอัตโนมัติ

2 ใน ทางเทคนิคmargin: 0 autoทำงานกับความกว้างอัตโนมัติ แต่ความกว้างอัตโนมัติมีความสำคัญเหนือกว่าระยะขอบอัตโนมัติและผลของระยะห่างอัตโนมัติจะถูกทำให้เป็นศูนย์จนทำให้ดูเหมือนว่า "ไม่ทำงาน"


7
คำตอบ 'ปิดส่วนบนหัวของฉัน': o
Russell Dias

4
เพิ่มความกว้างคงที่และคุณจะได้คำตอบที่สมบูรณ์
meo

1
ประณาม! ทุกคนตอบในขณะที่ฉันกำลังรหัสไป! ออกจากหัวของฉันด้วย ... : O
Kyle

ฉันคิดถึงol startคุณลักษณะ (และไม่สามารถดึงออกมาใน Markdown) :(
BoltClock

1
@Triynko: ทั้งคำถามและคำตอบของฉันไม่เคยพูดอะไรเกี่ยวกับคุณลักษณะการนำเสนอ HTML (คำถามไม่ได้ติดแท็กแม้แต่ [html]!) ดังนั้นฉันไม่แน่ใจว่าสิ่งที่คุณกำลังเรียกวัว อย่างไรก็ตามในขณะที่ทุกองค์ประกอบที่สามารถกำหนดเป้าหมายด้วย CSS สามารถมีคุณสมบัติความกว้างและความสูงของ CSS ได้ แต่องค์ประกอบ HTML ทั้งหมดไม่สามารถมีคุณลักษณะการนำเสนอที่สอดคล้องกันได้และเหตุผลที่เป็นเพียงแค่ว่ามันไม่สมเหตุสมผลเลย องค์ประกอบ HTML
BoltClock

19

widthปิดด้านบนของหัวของฉันมันต้องการ คุณต้องระบุความกว้างของคอนเทนเนอร์ที่คุณจัดให้อยู่กึ่งกลาง (ไม่ใช่ความกว้างพาเรนต์)


16
ทุกอย่างหลุดออกมาจากหัวเราแล้ว!
BoltClock

8

กฎที่สมบูรณ์สำหรับ CSS:

  1. ( display: blockและwidthไม่ใช่อัตโนมัติ) หรือdisplay: table
  2. float: none
  3. position: relative

3

ปิดส่วนบนของหัวถ้าองค์ประกอบไม่ใช่องค์ประกอบบล็อก - ทำเช่นนั้น

แล้วให้ความกว้าง


2

มันจะทำงานร่วมกับ display: table - คุณสมบัติการแสดงผลที่มีประโยชน์ในกรณีนี้เพราะมันไม่จำเป็นต้องตั้งค่าความกว้าง (ฉันรู้ว่าโพสต์นี้มีอายุ 5 ปี แต่ก็ยังเกี่ยวข้องกับผู้คนโดย)


2

ปิดด้านบนของหัวแมวของฉันให้แน่ใจว่าคุณกำลังพยายามที่ศูนย์ไม่ได้ตั้งค่าdivwidth: 100%

ถ้าเป็นเช่นนั้นกฎที่ตั้งไว้ใน divs เด็กเป็นสิ่งที่จะมีความสำคัญ


1

โปรดไปที่ตัวอย่างรวดเร็วนี้เราได้สร้างjsFiddle หวังว่ามันจะเข้าใจง่าย คุณสามารถใช้wrapperdiv ที่มีความกว้างของไซต์เพื่อจัดกึ่งกลาง เหตุผลที่คุณต้องใส่widthก็คือเพื่อให้เบราว์เซอร์รู้ว่าคุณไม่ได้ไปสำหรับรูปแบบของเหลว


1

นี่คือคำแนะนำของฉัน:

First: 
      1. Add display: block or table
      2. Add position: relative
      3. Add width:(percentage also works fine)
Second: 
      if above trick not works then you have to add float:none;

0

อาจเป็นเรื่องที่น่าสนใจที่คุณไม่ต้องระบุความกว้างสำหรับ<button>องค์ประกอบเพื่อให้ทำงานได้ - ตรวจสอบให้แน่ใจว่ามีdisplay:block: http://jsfiddle.net/muhuyttr/


-1

สำหรับใครเพียงแค่ตอนนี้ตีคำถามนี้และไม่สามารถที่จะแก้ไขปัญหาmargin: 0 autoที่นี่เป็นสิ่งที่ผมค้นพบคุณอาจพบว่ามีประโยชน์: เป็นtableองค์ประกอบที่มีความกว้างไม่ระบุต้องมีdisplay: tableและไม่ได้ display: blockเพื่อให้margin: autoการทำงาน สิ่งนี้อาจเห็นได้ชัดสำหรับบางคนเนื่องจากการรวมกันของdisplay: blockและค่าเริ่มต้นwidthจะให้ตารางที่ขยายเพื่อเติมตู้คอนเทนเนอร์ แต่ถ้าคุณต้องการให้ตารางใช้ความกว้าง "ธรรมชาติ" และอยู่กึ่งกลางคุณต้องการdisplay: table


นั่นไม่เป็นความจริง( แต่ถ้าคุณเพียงแค่ให้มันdisplay: blockแล้วมันจะไม่ตรงตามเงื่อนไขที่ 4 ของคำตอบที่ได้รับการยอมรับ)
เคว็นติ

@Quentin ขอบคุณสำหรับหัวขึ้น ในกรณีของฉันฉันไม่ได้ต้องการให้ตารางเติมพื้นที่แนวนอน (ซึ่งดูเหมือนจะลบล้างการอภิปรายทั้งหมดmargin: 0 auto) และฉันไม่สามารถระบุความกว้างของตารางได้เนื่องจากเนื้อหาอาจมีความกว้างแตกต่างกัน ในกรณีนี้วิธีแก้ปัญหาเดียวที่ใช้งานได้ (เช่นแสดงผลตารางแบบปกติ แต่จัดกึ่งกลางไว้) คือไม่มีกฎความกว้างdisplay: tableและmargin: 0 auto
แซมสัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.