จัดกึ่งกลางบน Div ตำแหน่งแน่นอน


95
div#thing {
  position: absolute;
  top: 0px;
  z-index: 2;
  margin: 0 auto;
}

<div id="thing">
   <p>text text text with no fixed size, variable font</p>
</div>

div อยู่ด้านบนสุด แต่ฉันไม่สามารถจัดกึ่งกลางด้วย<center>หรือmargin: 0 auto;

คำตอบ:


153

ปัญหาของคุณอาจแก้ไขได้หากคุณให้divความกว้างคงที่ดังนี้:

div#thing {
    position: absolute;
    top: 0px;
    z-index: 2;
    width:400px;
    margin-left:-200px;
    left:50%;
}

1
ฉันไม่รู้ว่าทำไมฉันถึงไม่คิดแบบนั้นแม้ว่าเราจะใช้เทคนิคเดียวกันในการจัดกึ่งกลางแนวตั้งตลอดเวลาก็ตาม ... ยังไงก็ตามคุณช่วยฉันได้มาก
Aayush

1
จะเกิดอะไรขึ้นถ้าผู้ใช้เลื่อนลงในแนวตั้ง div จะปรากฏที่ด้านบนของหน้าในขณะที่ควรปรากฏบนพื้นที่ที่มองเห็นได้
PUG

ฉันกำลังแสดงภาพขนาดย่อของภาพที่เรียงลำดับแบบไดนามิกใน div การวางซ้อนของฉันดังนั้นฉันจึงไม่ทราบความกว้าง
PUG

4
นี่เป็นเพียงวิธีแก้ปัญหาเท่านั้นstackoverflow.com/questions/1776915/…ดูเหมือนจะเป็นวิธีแก้ปัญหา
PUG

1
นี่ไม่ใช่คำตอบที่ถูกต้อง สื่อประเภทต่างๆจะไม่รองรับข้อมูลโค้ดนี้
Sushan

98
div#thing
{
    position: absolute;
    width:400px;
    right: 0;
    left: 0;
    margin: auto;
}

3
วิธีนี้ทำงานอย่างไร? คุณช่วยระบุเหตุผลที่คำตอบของคุณถูกต้องได้ไหม
afuzzyllama

1
ฉันชอบวิธีนี้มากกว่าคนอื่น 99% ตลอดเวลาคุณไม่ต้องจัดการกับช่องว่างภายในเส้นขอบและอื่น ๆ ฉันไม่เคยเห็นสิ่งนี้ล้มเหลวคราวหน้าจะให้ตัวอย่างหากล้มเหลวสำหรับคุณ
แดน

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

1
ว้าว. ฉันไม่ได้คาดหวังว่าสิ่งนี้จะได้ผล แต่มันได้ผลสำหรับฉันอย่างมีเสน่ห์
Awais Umar

4
ฉันยอมรับว่านี่ควรเป็นคำตอบที่ถูกต้องขอบ -200px กรีดร้องให้ฉัน
มานี 5556

37

ฉันรู้ว่าฉันไปงานปาร์ตี้ช้า แต่ฉันคิดว่าฉันจะให้คำตอบที่นี่สำหรับคนที่ต้องการวางตำแหน่งรายการที่แน่นอนในแนวนอนเมื่อคุณไม่ทราบความกว้างที่แน่นอน

ลองสิ่งนี้:

// Horizontal example.
div#thing {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}

สามารถใช้เทคนิคเดียวกันนี้ได้เช่นกันเมื่อคุณอาจต้องการการจัดแนวในแนวตั้งเพียงแค่ปรับคุณสมบัติดังนี้:

// Vertical example.
div#thing {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

1
Whaaat. นี่มันเจ๋งมาก! คุณช่วยอธิบายวิธีการทำงานได้ไหม แก้ไข: มีการล่าสัตว์และดูเหมือนว่าทางซ้าย: 50% ย้ายตำแหน่งทางซ้ายของ div ไปที่ตรงกลางซึ่งไม่ได้อยู่ตรงกลางจริงๆ แต่ translateX กลับเปลี่ยนไป 50% ของความกว้างของเนื้อหา
azizj1

2
การวางตำแหน่งแบบสัมบูรณ์จะวางตำแหน่งจากด้านบนซ้ายของรายการ การใช้การแปลจะเปลี่ยนเป็นจำนวนที่สัมพันธ์กับขนาด
Michael Giovanni Pumo

3
ไมเคิลแค่อยากให้คุณรู้คุณไม่ได้มาสายปาร์ตี้ ... และสำหรับคนที่ไม่รู้: transform: translate (-50%, -50%); ทำทั้งแนวตั้งและแนวนอนโดยมี 1 บรรทัด
Marvel Moe

4

ในการจัดกึ่งกลางทั้งแนวตั้งและแนวนอนให้ทำดังนี้

div#thing {
   position: absolute;
   left: 50%;
   top: 50%;
   transform: translate(-50%, -50%);
}


0

หากจำเป็นต้องให้คุณมีความกว้างสัมพัทธ์ (เป็นเปอร์เซ็นต์) คุณสามารถรวม div ของคุณในตำแหน่งที่แน่นอนได้:

div#wrapper {
    position: absolute;
    width: 100%;
    text-align: center;
}

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


0

ฉันประสบปัญหาเดียวกันและข้อ จำกัด ของฉันคือฉันไม่สามารถมีความกว้างที่กำหนดไว้ล่วงหน้าได้ หากองค์ประกอบของคุณไม่มีความกว้างคงที่ให้ลองทำเช่นนี้

div#thing 
{ 
  position: absolute; 
  top: 0px; 
  z-index: 2; 
  left:0;
  right:0;
 }

div#thing-body
{
  text-align:center;
}

จากนั้นแก้ไข html ของคุณให้มีลักษณะเช่นนี้

<div id="thing">
 <div id="thing-child">
  <p>text text text with no fixed size, variable font</p>
 </div>
</div>

0

หรือคุณสามารถใช้หน่วยสัมพัทธ์เช่น

#thing {
    position: absolute;
    width: 50vw;
    right: 25vw;
}

-22

ใช่:

div#thing { text-align:center; }

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