วิธีการจัดปุ่มให้อยู่กึ่งกลางภายใน div?


220

ฉันมี div ที่มีความกว้าง 100%

ฉันต้องการจัดปุ่มให้อยู่ตรงกลางปุ่มฉันจะทำสิ่งนี้ได้อย่างไร

<div style="width:100%; height:100%; border: 1px solid">
  <button type="button">hello</button>
</div>


รหัสที่คุณใช้สำหรับปุ่มคืออะไร?
David Nguyen

2
ฉันสงสัยว่าเขาต้องการให้อยู่ตรงกลางทั้งแนวตั้งและแนวนอน ไม่มีวิธีแก้ปัญหาใดที่จะทำให้สำเร็จ CSS ไม่ค่อยดีในการจัดกึ่งกลางแนวตั้ง = (.
mrtsherman

ให้ฉันบอกว่า flexbox ทำให้คำตอบนี้ไร้ประโยชน์ในปี 2014 ใช่แล้ว!
foreyez

คำตอบ:


352

อัปเดตคำตอบ

การอัปเดตเพราะฉันสังเกตเห็นว่าเป็นคำตอบที่ใช้งานได้อย่างไรก็ตาม Flexbox จะเป็นแนวทางที่ถูกต้องในขณะนี้

การสาธิตสด

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

#wrapper {
  display: flex;
  align-items: center;
  justify-content: center;
}

เพียงแค่แนวนอน (ตราบเท่าที่แกนงอหลักเป็นแนวนอนซึ่งเป็นค่าเริ่มต้น)

#wrapper {
  display: flex;
  justify-content: center;
}

คำตอบเดิมโดยใช้ความกว้างคงที่และไม่มีเฟล็กบ็อกซ์

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

การสาธิตสด

CSS

button{
    height:20px; 
    width:100px; 
    margin: -20px -50px; 
    position:relative;
    top:50%; 
    left:50%;
}

สำหรับการจัดตำแหน่งแนวนอนเพียงใช้อย่างใดอย่างหนึ่ง

button{
    margin: 0 auto;
}

หรือ

div{
    text-align:center;
}

21
-1 นี่มันแย่มาก โดยพื้นฐานแล้วคุณตั้งค่าความกว้างเป็น 100% จากนั้นระยะขอบเป็น -50 แต่เป็นสาเหตุของปัญหาอื่น ๆ เช่นปุ่มเพิ่มขึ้นเหนือองค์ประกอบที่มีและไม่ทำงานได้ดีกับการปรับขนาด
CodyBugstein

3
เฮ้ขอบคุณที่อธิบายการลงคะแนนเสียงของคุณอย่างน้อย @Imray โปรดทราบว่าฉันพูดว่าความกว้างและความสูงคงที่ไม่ใช่ตัวแปร ดังนั้นการปรับขนาดไม่ใช่ปัจจัย "พื้นฐาน" ฉันตั้งค่าความกว้างเป็น100pxไม่ใช่ 100% และระยะขอบเป็น -50px ซึ่งครึ่งหนึ่ง นี่เป็นวิธีมาตรฐานที่ค่อนข้างดีสำหรับการจัดกึ่งกลาง ฉันหวังว่าจะได้คำตอบของคุณ :)
Loktar

1
welcs ของคุณ (ขออภัยในความรุนแรงดีใจที่คุณมีอารมณ์ขัน) ฉันหมายถึง 100px ฉันไม่ทราบว่าคุณเขียนว่า "คงที่" แต่ถึงกระนั้นฉันคิดว่าคำตอบนี้จะไม่ดีในสถานการณ์ส่วนใหญ่
CodyBugstein

110

คุณสามารถทำ:

<div style="text-align: center; border: 1px solid">
  <input type="button" value="button">
</div>

หรือคุณสามารถทำสิ่งนี้แทน:

<div style="border: 1px solid">
  <input type="button" value="button" style="display: block; margin: 0 auto;">
</div>

คนแรกจะจัดแนวทุกอย่างภายใน div อีกอันหนึ่งจะจัดกึ่งกลางแค่ปุ่ม


28

และอื่น ๆ :

button {
  width: 100px; // whatever your button's width
  margin: 0 auto; // auto left/right margins
  display: block;
}

อัปเดต : ถ้า OP กำลังมองหาศูนย์กลางแนวนอนและแนวตั้งคำตอบนี้จะทำเพื่อหาองค์ประกอบความกว้าง / ความสูงคงที่


11
คุณอาจต้องการ "display: block;"
SoluableNonagon

1
@SoluableNonagon นั่นแหล่ะ! "display: block" ทำการหลอกลวงด้วย "margin: 0 auto"
Tomas Lukac

8

ระยะขอบ: 0 อัตโนมัติ; เป็นคำตอบที่ถูกต้องสำหรับการจัดกึ่งกลางแนวนอนเท่านั้น สำหรับการรวมศูนย์ทั้งสองวิธีบางอย่างเช่นนี้จะใช้งานได้โดยใช้ jquery:

var cenBtn = function() {
   var W = $(window).width();
   var H = $(window).height();
   var BtnW = insert button width;
   var BtnH = insert button height;
   var LeftOff = (W / 2) - (BtnW / 2);
   var TopOff = (H / 2) - (BtnH /2);
       $("#buttonID").css({left: LeftOff, top: TopOff});
};

$(window).bind("load, resize", cenBtn);

อัปเดต ... ห้าปีต่อมาผู้ใช้หนึ่งคนสามารถใช้ flexbox บนองค์ประกอบ DIV หลักเพื่อให้ปุ่มอยู่ตรงกลางทั้งแนวนอนและแนวตั้งได้อย่างง่ายดาย

รวมถึงคำนำหน้าเบราว์เซอร์ทั้งหมดเพื่อการสนับสนุนที่ดีที่สุด

div {
  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-box-align : center;
  -moz-box-align    : center;
  -ms-flex-align    : center;
  -webkit-align-items : center;
  align-items : center ;
  justify-content : center;
  -webkit-justify-content : center;
  -webkit-box-pack : center;
  -moz-box-pack : center;
  -ms-flex-pack : center;
}


2
jQuery? อย่างจริงจัง?
Pranesh Ravi

3
@PraneshRavi - ในปี 2011 ไม่มีตัวเลือกมากมายใน CSS ที่จะจัดกึ่งกลางแนวตั้งดังนั้นใช่จาวาสคริปต์ไม่ใช่เรื่องแปลกถ้าคุณไม่รู้ความสูงและความกว้างขององค์ประกอบที่แน่นอนและสามารถลบระยะขอบ
adeneo

คุณสามารถใช้ flex เพื่อจัดองค์ประกอบให้อยู่กึ่งกลางได้ทั้งแนวตั้งและแนวนอน
Pranesh Ravi

6
@PaneshRavi - ใช่แล้ว flexbox เป็นคำตอบที่ดีสำหรับคำถามนี้และฉันจะเพิ่มเข้าไป แต่ในปี 2011 ไม่มี flexbox
adeneo

@JGallardo - ฉันคิดว่าคุณพลาดส่วนที่คำตอบอื่น ๆ พยายามจัดให้อยู่กึ่งกลางปุ่มไม่เพียง แต่ในแนวนอน แต่ในแนวตั้งด้วยเช่นกันและเมื่อ 9 ปีที่แล้วไม่มีตัวเลือกที่ดีสำหรับ CSS เพียงอย่างเดียว
adeneo


7

ใช้ flexbox

.Center {
  display: flex;
  align-items: center;
  justify-content: center;
}

จากนั้นเพิ่มคลาสให้กับปุ่มของคุณ

<button class="Center">Demo</button> 

6

คุณควรทำมันให้ง่าย

ก่อนอื่นคุณมีตำแหน่งเริ่มต้นของข้อความหรือปุ่มของคุณ:

<div style="background-color:green; height:200px; width:400px; margin:0 0 0 35%;">
   <h2> Simple Text </h2>
      <div>
           <button> Simple Button </button>
      </div>
</div>

โดยการเพิ่มบรรทัดรหัส css นี้ไปยังแท็กh2หรือแท็กdivที่ถือแท็กปุ่ม

สไตล์: "จัดข้อความ: กลาง;"

Finaly รหัสผลลัพธ์จะเป็น:

<div style="background-color:green; height:200px; width:400px; margin:0 0 0 35%;">
<h2 style="text-align:center;"> Simple Text </h2> <!-- <<--- here the changes -->

      <div style="text-align:center">        <!-- <<--- here the changes -->
                <button> Simple Button </button>
      </div>
</div>

ป้อนคำอธิบายรูปภาพที่นี่


คุณยินดีต้อนรับพี่ชาย
nadir hamidou


2

หากต้องการจัดกึ่งกลาง<button type = "button">ทั้งแนวตั้งและแนวนอนภายใน<div>ความกว้างที่คำนวณแบบไดนามิกเช่นเดียวกับในกรณีของคุณนี่คือสิ่งที่ต้องทำ:

  1. ตั้งค่าtext-align: center;การตัดคำ<div>: ปุ่มนี้จะอยู่ตรงกลางทุกครั้งที่คุณปรับขนาด<div>(หรือแทนหน้าต่าง)
  2. สำหรับการจัดตำแหน่งแนวตั้งคุณจะต้องตั้งค่าmargin: valuepx;สำหรับปุ่ม นี่คือกฎในการคำนวณvaluepx:

    valuepx = (wrappingDIVheight - buttonHeight)/2

นี่คือการสาธิต JS Bin


2

คำตอบง่ายสุดที่จะใช้กับกรณีส่วนใหญ่เป็นเพียงการทำให้การกำหนดอัตรากำไรไปและตั้งค่าการแสดงผลให้0 auto blockคุณสามารถดูว่าฉันตั้งศูนย์กลางปุ่มของฉันไว้ที่ตัวอย่างในCodePen ได้อย่างไร

ป้อนคำอธิบายรูปภาพที่นี่


1

สิ่งที่ง่ายที่สุดคือใส่มันเป็น "div" ให้ "margin: 0 auto" แต่ถ้าคุณต้องการให้อยู่กึ่งกลางคุณต้องให้ความกว้าง

  Div{
   Margin: 0 auto ;
   Width: 100px ;
  }

1

ตัวเลือก CSS ที่ตอบสนองต่อการจัดกึ่งกลางปุ่มในแนวตั้งและแนวนอนโดยไม่เกี่ยวข้องกับขนาดองค์ประกอบหลัก(การใช้ตะขอคุณลักษณะของข้อมูลเพื่อความชัดเจนและการแยก) :

HTML

<div data-element="card">
  <div data-container="button"><button>CTA...</button></div>
</div>

CSS

[data-container="button"] {
  position: absolute;
  top: 50%;
  text-align: center;
  width: 100%;
}

ซอ: https://jsfiddle.net/crrollyson/zebo1z8f/


1

วิธีตอบสนองต่อปุ่มของคุณอยู่ตรงกลางใน div:

<div 
    style="display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 2rem;">
    <button type="button" style="height: 10%; width: 20%;">hello</button>
</div>

1
คำตอบนี้สามารถปรับปรุงได้โดยการลบรูปแบบอินไลน์และแสดงตัวอย่าง
JGallardo

1

สมมติว่า div คือ #div และปุ่มคือ #button:

#div {
    display: table-cell;
    width: 100%;
    height: 100%;
    text-align: center;
    vertical-align: center;
}

#button {}

จากนั้นซ้อนปุ่มเป็น div ตามปกติ

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