วิธีจัดกึ่งกลางแนวนอนให้เป็น <div>


4286

ฉันจะจัดกึ่งกลาง<div>ภายในแนวนอน<div>โดยใช้ CSS ได้อย่างไร

<div id="outer">
  <div id="inner">Foo foo</div>
</div>

13
จากคำตอบที่ดีเหล่านั้นฉันเพียงต้องการเน้นว่าคุณต้องให้ "#inner" "width" มิฉะนั้นจะเป็น "100%" และคุณไม่สามารถบอกได้ว่ามันอยู่ตรงกลางหรือไม่
Jony

Joma Tech พาฉันมาที่นี่
Barbu Barbu

@Barbu Barbu: ในทางใด ในบริบทใด
Peter Mortensen

คำตอบ:


4726

คุณสามารถใช้ CSS นี้กับภายใน<div>:

#inner {
  width: 50%;
  margin: 0 auto;
}

แน่นอนว่าคุณไม่ได้มีการตั้งค่าที่จะwidth 50%ความกว้างน้อยกว่าที่มีอยู่ใด ๆ<div>จะทำงานได้ นี่margin: 0 autoคือสิ่งที่ทำให้ศูนย์กลางอยู่จริง

หากคุณกำหนดเป้าหมายเป็นInternet Explorer 8 (และใหม่กว่า) อาจเป็นการดีกว่าที่จะมีสิ่งนี้แทน:

#inner {
  display: table;
  margin: 0 auto;
}

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

ตัวอย่างการทำงานที่นี่:

#inner {
  display: table;
  margin: 0 auto;
  border: 1px solid black;
}

#outer {
  border: 1px solid red;
  width:100%
}
<div id="outer">
  <div id="inner">Foo foo</div>
</div>


12
สำหรับการจัดกึ่งกลางแนวตั้งฉันมักจะใช้ "line-height" (line-height == height) นี้เป็นที่เรียบง่ายและมีความสุข แต่มันก็เป็นเพียงการทำงานกับข้อความเนื้อหาบรรทัดเดียว :)
นิโคลัสกีโยม

98
คุณต้องใช้แท็ก! DOCTYPE ในหน้า html ของคุณเพื่อให้ทำงานได้ดีบน IE
Fabio

15
โปรดทราบว่าอาจจำเป็นต้องเพิ่ม "float: none;" สำหรับ #inner
Mert Mertce

15
นอกจากนี้คุณยังตั้งค่าระยะขอบด้านบนและด้านล่างเป็น 0 ซึ่งไม่เกี่ยวข้อง margin-left: auto; margin-right: autoฉันคิดว่าดีกว่า
Emmanuel Touzery

13
ไม่จำเป็นmargin:0 autoว่า: มันอาจเป็นmargin: <whatever_vertical_margin_you_need> autoอันดับที่สองที่เป็นแนวนอน
YakovL

1245

หากคุณไม่ต้องการตั้งค่าความกว้างคงที่ด้านในdivคุณสามารถทำสิ่งนี้:

#outer {
  width: 100%;
  text-align: center;
}

#inner {
  display: inline-block;
}
<div id="outer">  
    <div id="inner">Foo foo</div>
</div>

ที่ทำให้ภายในเป็นองค์ประกอบแบบอินไลน์ที่สามารถเป็นศูนย์กลางที่มีdivtext-align


13
@SabaAhang ไวยากรณ์ที่ถูกต้องสำหรับสิ่งที่ควรจะเป็นfloat: none;และอาจจำเป็นเพียงเพราะ #inner ได้รับการสืบทอดfloatอย่างใดอย่างหนึ่งleftหรือrightจากที่อื่นใน CSS ของคุณ
Doug McLean

7
นี่เป็นทางออกที่ดี เพียงจำไว้ว่าด้านในจะสืบทอดtext-alignดังนั้นคุณอาจต้องการตั้งค่าภายในtext-alignการinitialหรือค่าอื่น ๆ
pmoleri

วิธีแก้ปัญหาที่ดีฉันคิดอย่างนั้น
simon

381

วิธีการที่ดีที่สุดคือด้วยCSS 3

รูปแบบกล่อง:

#outer {
  width: 100%;
  /* Firefox */
  display: -moz-box;
  -moz-box-pack: center;
  -moz-box-align: center;
  /* Safari and Chrome */
  display: -webkit-box;
  -webkit-box-pack: center;
  -webkit-box-align: center;
  /* W3C */
  display: box;
  box-pack: center;
  box-align: center;
}

#inner {
  width: 50%;
}
<div id="outer">
  <div id="inner">Foo foo</div>
</div>

ตามการใช้งานของคุณคุณอาจใช้box-orient, box-flex, box-directionคุณสมบัติ

งอ :

#outer {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
}

อ่านเพิ่มเติมเกี่ยวกับการจัดองค์ประกอบลูกให้อยู่กึ่งกลาง

และ สิ่งนี้อธิบายว่าทำไมรูปแบบกล่องเป็นวิธีที่ดีที่สุด :


25
ตรวจสอบให้แน่ใจว่าคุณได้อ่านคำตอบนี้ก่อนที่จะดำเนินการตามแนวทางนี้
cimmanon

4
ซาฟารี ณ ขณะนี้ยังคงต้อง-webkitธงสำหรับ flexbox ( display: -webkit-flex;และ-webkit-align-items: center;และ-webkit-justify-content: center;)
โจเซฟแฮนเซน

ฉันมักจะคิดว่าการใช้รหัสล็อตเป็นการปฏิบัติที่ไม่ดีเช่นด้วยรหัสนี้ฉันจัดวาง div ของฉันไว้ที่: display: table; ขอบ: อัตโนมัติ; เรียบง่ายและง่าย
simon

มันคือฉันหรือเป็นข้อมูลโค้ดนี้ไม่อยู่กึ่งกลาง
Mike

ในปี 2020 เราสามารถใช้ flexbox caniuse.com/#feat=flexbox
tonygatta

251

สมมติว่า div ของคุณกว้าง 200 พิกเซล:

.centered {
  position: absolute;
  left: 50%;
  margin-left: -100px;
}

ตรวจสอบให้แน่ใจองค์ประกอบหลักคือ ตำแหน่งเช่นสัมพันธ์คงที่สัมบูรณ์หรือเหนียว

หากคุณไม่ทราบความกว้างของ div คุณสามารถใช้ transform:translateX(-50%);แทนส่วนต่างติดลบได้

https://jsfiddle.net/gjvfxxdj/

ด้วยCSS calc ()โค้ดสามารถรับได้ง่ายยิ่งขึ้น:


.centered {
  width: 200px;
  position: absolute;
  left: calc(50% - 100px);
}

หลักการยังคงเหมือนเดิม วางสิ่งของไว้ตรงกลางและชดเชยความกว้าง


ฉันไม่ชอบวิธีแก้ปัญหานี้เพราะเมื่อองค์ประกอบภายในกว้างเกินไปสำหรับหน้าจอคุณไม่สามารถเลื่อนองค์ประกอบทั้งหมดในแนวนอน กำไร: 0 อัตโนมัติทำงานได้ดีขึ้น
Aloso

ระยะขอบซ้าย: อัตโนมัติ ระยะขอบ - ขวา: อัตโนมัติ; จัด
กึ่งกลาง

ความกว้างเริ่มต้นสำหรับองค์ประกอบระดับบล็อกส่วนใหญ่คืออัตโนมัติซึ่งเติมพื้นที่ที่มีอยู่บนหน้าจอ เพียงแค่วางกึ่งกลางไว้ในตำแหน่งเดียวกับการจัดตำแหน่งด้านซ้าย หากคุณต้องการให้อยู่กึ่งกลางภาพคุณควรตั้งค่าความกว้าง (หรือความกว้างสูงสุดแม้ว่า Internet Explorer 6 และก่อนหน้านี้ไม่รองรับสิ่งนี้และ IE 7 รองรับในโหมดมาตรฐานเท่านั้น)
killscreen

228

ฉันได้สร้างตัวอย่างนี้เพื่อแสดงวิธีการในแนวตั้งและแนวนอน alignแนวนอน

รหัสนี้เป็นพื้น:

#outer {
  position: relative;
}

และ...

#inner {
  margin: auto;
  position: absolute;
  left:0;
  right: 0;
  top: 0;
  bottom: 0;
}

และมันจะยังคงอยู่centerแม้ในขณะที่คุณปรับขนาดหน้าจอ


12
+1 สำหรับวิธีนี้ฉันกำลังจะตอบคำถามด้วย โปรดทราบว่าคุณต้องประกาศความกว้างขององค์ประกอบที่คุณต้องการจัดกึ่งกลางในแนวนอน (หรือความสูงหากอยู่กึ่งกลางแนวตั้ง) นี่คือคำอธิบายที่ครอบคลุม: codepen.io/shshaw/full/gEiDt หนึ่งในวิธีการที่หลากหลายและได้รับการสนับสนุนอย่างกว้างขวางมากขึ้นขององค์ประกอบศูนย์กลางอยู่ในแนวตั้งและ / หรือแนวนอน
stvnrynlds

6
คุณไม่สามารถใช้ช่องว่างภายใน div ได้ แต่หากคุณต้องการให้ภาพลวงตาใช้เส้นขอบที่มีสีเดียวกัน
Squirrl

ฉันคิดว่าวิธีนี้ใช้งานได้คุณต้องตั้งค่าความสูงและความสูงของ div ภายใน
Nicolas S.Xu

212

โปสเตอร์บางคนได้กล่าวถึงวิธี CSS 3 display:boxไปยังศูนย์ใช้

ไวยากรณ์นี้ล้าสมัยและไม่ควรใช้อีกต่อไป [ดูโพสต์นี้]โพสต์นี้]

ดังนั้นเพื่อความสมบูรณ์นี่คือวิธีล่าสุดในการจัดกึ่งกลางใน CSS 3 โดยใช้โมดูลเค้าโครงกล่องแบบยืดหยุ่นมีความยืดหยุ่นกล่องเค้าโครงโมดูล

ดังนั้นหากคุณมีมาร์กอัปง่ายๆเช่น:

<div class="box">
  <div class="item1">A</div>
  <div class="item2">B</div>
  <div class="item3">C</div>
</div>

... และคุณต้องการจัดรายการของคุณให้อยู่กึ่งกลางภายในกล่องนี่คือสิ่งที่คุณต้องการในองค์ประกอบหลัก (.box):

.box {
    display: flex;
    flex-wrap: wrap; /* Optional. only if you want the items to wrap */
    justify-content: center; /* For horizontal alignment */
    align-items: center; /* For vertical alignment */
}

หากคุณต้องการสนับสนุนเบราว์เซอร์รุ่นเก่าที่ใช้ไวยากรณ์ที่เก่ากว่าสำหรับ flexbox นี่เป็นจุดที่น่าค้นหา


คุณหมายถึงอะไรโดย "ไวยากรณ์ล้าสมัย" มันเลิกใช้แล้วหรือเปล่า?
Konga Raju

6
ข้อกำหนดของ Flexbox มีการแก้ไขที่สำคัญ 3 ครั้ง ร่างล่าสุดมาจากกันยายน 2555 ซึ่งเลิกใช้ฉบับร่างก่อนหน้านี้ทั้งหมด อย่างไรก็ตามการสนับสนุนเบราว์เซอร์นั้น
ขาด ๆ หาย ๆ

สิ่งนี้ใช้ได้กับฉันใน Chrome เมื่อเวอร์ชันของ Justin Poliey ไม่ได้
Vern Jensen

ไม่ใช่ "justify-content: center;" ใช่หรือไม่ สำหรับการจัดตำแหน่งแนวตั้งและ "align-items: center;" สำหรับการจัดตำแหน่งแนวนอน?
Wouter Vanherck

3
@WouterVanherck มันขึ้นอยู่กับflex-directionค่า หากเป็น 'แถว' (ค่าเริ่มต้น) - จากนั้นjustify-content: center; จะเป็นการจัดเรียงแนวนอน (เช่นที่ฉันพูดถึงในคำตอบ) หากเป็น 'column' - จากนั้นjustify-content: center;จะใช้สำหรับการจัดแนวตั้ง
Danield

140

หากคุณไม่ต้องการตั้งค่าความกว้างคงที่และไม่ต้องการระยะขอบเพิ่มdisplay: inline-blockให้เพิ่มองค์ประกอบของคุณ

คุณสามารถใช้ได้:

#element {
    display: table;
    margin: 0 auto;
}

3
ข้อกำหนดเช่นเดียวกับ display: inline-block เกินไป ( quirksmode.org/css/display.html )
montrealmike

ฉันใช้สิ่งนี้เช่นกัน แต่ฉันไม่เคยพบdisplay: table;มาก่อน มันทำอะไร?
Matt Cremeens

97

การจัดกึ่งกลางของ div ของความสูงและความกว้างที่ไม่รู้จัก

แนวนอนและแนวตั้ง ใช้งานได้กับเบราว์เซอร์ที่ทันสมัยพอสมควร (Firefox, Safari / WebKit, Chrome, Internet Explorer 10, Opera และอื่น ๆ )

.content {
  position: absolute;
  left: 50%;
  top: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}
<div class="content">This works with any content</div>

ทิงเกอร์กับมันเพิ่มเติมเกี่ยวกับCodepenหรือบนJSBin


89

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


49
และถ้าคุณไม่รู้ความกว้าง? พูดเพราะเนื้อหาเป็นแบบไดนามิก?
gman

ความกว้างสูงสุด? แล้วมันล่ะ

1
ใช้ฉันและwidth: fit-content; margin: 0 autoฉันคิดว่านี่สามารถทำงานได้กับความกว้างที่ไม่รู้จัก
Rick


88

การตั้งค่าwidthและการตั้งค่าmargin-leftและการmargin-right autoว่าสำหรับแนวนอนเพียงแต่ หากคุณต้องการทั้งสองวิธีคุณก็ทำได้ทั้งสองวิธี อย่ากลัวที่จะทดลอง ไม่ใช่ว่าคุณจะทำอะไรผิดพลาด


62

ฉันเพิ่งต้องตั้งศูนย์ "div" ที่ซ่อนอยู่ (เช่น display:none;ที่มีแบบฟอร์มที่อยู่ภายในซึ่งจำเป็นต้องให้อยู่กึ่งกลางหน้า ฉันเขียนรหัส jQuery ต่อไปนี้เพื่อแสดง div ที่ซ่อนอยู่แล้วอัปเดตเนื้อหา CSS เป็นความกว้างที่สร้างขึ้นโดยอัตโนมัติของตารางและเปลี่ยนระยะขอบเพื่อจัดกึ่งกลาง (สลับการแสดงผลถูกทริกเกอร์โดยคลิกที่ลิงค์ แต่รหัสนี้ไม่จำเป็นต้องแสดง)

หมายเหตุ:ฉันกำลังแบ่งปันรหัสนี้เนื่องจาก Google นำฉันมาที่โซลูชัน Stack Overflow และทุกอย่างจะทำงานได้ยกเว้นว่าองค์ประกอบที่ซ่อนอยู่ไม่มีความกว้างและไม่สามารถปรับขนาด / กึ่งกลางจนกว่าจะปรากฏขึ้น

$(function(){
  $('#inner').show().width($('#innerTable').width()).css('margin','0 auto');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="inner" style="display:none;">
  <form action="">
    <table id="innerTable">
      <tr><td>Name:</td><td><input type="text"></td></tr>
      <tr><td>Email:</td><td><input type="text"></td></tr>
      <tr><td>Email:</td><td><input type="submit"></td></tr>
    </table>
  </form>
</div>


59

วิธีที่ฉันมักจะทำคือใช้ตำแหน่งที่แน่นอน:

#inner{
    left: 0;
    right: 0;
    margin-left: auto;
    margin-right: auto;
    position: absolute;
}

div ภายนอกไม่จำเป็นต้องมีคุณสมบัติพิเศษใด ๆ เพื่อให้สามารถใช้งานได้


วิธีนี้อาจใช้ไม่ได้หากคุณมี div อื่น ๆ ด้านล่างของ div ที่อยู่กึ่งกลาง
NoChance

54

สำหรับ Firefox และ Chrome:

<div style="width:100%;">
  <div style="width: 50%; margin: 0px auto;">Text</div>
</div>

สำหรับ Internet Explorer, Firefox และ Chrome:

<div style="width:100%; text-align:center;">
  <div style="width: 50%; margin: 0px auto; text-align:left;">Text</div>
</div>

text-align:อสังหาริมทรัพย์เป็นทางเลือกสำหรับเบราว์เซอร์ที่ทันสมัย แต่มันเป็นสิ่งจำเป็นในโหมด Quirks Internet Explorer สำหรับการสนับสนุนมรดกเบราว์เซอร์


5
ไม่จำเป็นต้องใช้คุณสมบัติการจัดแนวข้อความ มันไม่จำเป็นอย่างสมบูรณ์
Touhid Rahman

การจัดแนวข้อความเป็นสิ่งจำเป็นสำหรับการทำงานในโหมด Quicks IE ดังนั้นหากคุณไม่ต้องการเพิ่มการแสดงออกเล็กน้อยเพื่อรองรับเบราว์เซอร์รุ่นเก่า (IE8 กับ IE8 กฎและ IE7 กฎการทำงานของทั้งสองโดยไม่ต้อง text-align ดังนั้นอาจจะเป็นเพียง IE6 และผู้สูงอายุที่มีความกังวล)
heytools


47

วิธีแก้ไขปัญหานี้อีกโดยไม่ต้องตั้งค่าความกว้างสำหรับองค์ประกอบอย่างใดอย่างหนึ่งคือการใช้transformแอตทริบิวต์CSS 3

#outer {
  position: relative;
}

#inner {
  position: absolute;
  left: 50%;

  transform: translateX(-50%);
}

เคล็ดลับคือการtranslateX(-50%)ตั้งค่า#innerองค์ประกอบ 50 เปอร์เซ็นต์ทางด้านซ้ายของความกว้างของตัวเอง คุณสามารถใช้เคล็ดลับเดียวกันสำหรับการจัดตำแหน่งแนวตั้ง

นี่คือซอแสดงการจัดแนวนอนและแนวตั้ง

ข้อมูลเพิ่มเติมเกี่ยวกับMozilla พัฒนาเครือข่าย


2
หนึ่งอาจต้องนำหน้าผู้ขายเช่นกัน:-webkit-transform: translate(-50%,0); -moz-transform: translate(-50%,0); -ms-transform: translate(-50%,0); -khtml-transform: translate(-50%,0); -o-transform: translate(-50%,0);
Skippy le Grand Gourou

45

Chris Coyier ผู้เขียนโพสต์ที่ยอดเยี่ยมใน 'Centering in the Unknown' ในบล็อกของเขา เป็นบทสรุปของโซลูชั่นที่หลากหลาย ฉันโพสต์หนึ่งที่ไม่ได้โพสต์ในคำถามนี้ มีการสนับสนุนเบราว์เซอร์มากกว่าโซลูชันFlexboxและคุณไม่ได้ใช้งานdisplay: table;ซึ่งอาจทำลายสิ่งอื่น ๆ

/* This parent can be any width and height */
.outer {
  text-align: center;
}

/* The ghost, nudged to maintain perfect centering */
.outer:before {
  content: '.';
  display: inline-block;
  height: 100%;
  vertical-align: middle;
  width: 0;
  overflow: hidden;
}

/* The element to be centered, can
   also be of any width and height */
.inner {
  display: inline-block;
  vertical-align: middle;
  width: 300px;
}

39

ฉันเพิ่งพบวิธีการ:

#outer {
    position: absolute;
    left: 50%;
}

#inner {
    position: relative;
    left: -50%;
}

องค์ประกอบทั้งสองจะต้องมีความกว้างเท่ากันเพื่อให้ทำงานได้อย่างถูกต้อง


เพียงแค่ตั้งกฎนี้เท่านั้น:#inner #inner { position:relative; left:50%; transform:translateX(-50%); }ใช้ได้กับทุกความกว้าง
Jose Rui Santos

33

ตัวอย่างเช่นดูลิงก์นี้และตัวอย่างด้านล่าง:

div#outer {
  height: 120px;
  background-color: red;
}

div#inner {
  width: 50%;
  height: 100%;
  background-color: green;
  margin: 0 auto;
  text-align: center; /* For text alignment to center horizontally. */
  line-height: 120px; /* For text alignment to center vertically. */
}
<div id="outer" style="width:100%;">
  <div id="inner">Foo foo</div>
</div>

หากคุณมีเด็กจำนวนมากภายใต้พาเรนต์ดังนั้นเนื้อหา CSS ของคุณจะต้องเป็นแบบนี้ในซอตัวอย่างเช่นไวโอลิน

เนื้อหา HTML มีลักษณะดังนี้:

<div id="outer" style="width:100%;">
    <div class="inner"> Foo Text </div>
    <div class="inner"> Foo Text </div>
    <div class="inner"> Foo Text </div>
    <div class="inner"> </div>
    <div class="inner"> </div>
    <div class="inner"> </div>
    <div class="inner"> </div>
    <div class="inner"> </div>
    <div class="inner"> Foo Text </div>
</div>

จากนั้นเห็นนี้ตัวอย่างเช่นไวโอลิน


28

จัดกึ่งกลางในแนวนอนเท่านั้น

จากประสบการณ์ของฉันวิธีที่ดีที่สุดในการจัดกึ่งกลางกล่องในแนวนอนคือใช้คุณสมบัติต่อไปนี้:

ภาชนะบรรจุ:

  • ควรมี text-align: center;

กล่องเนื้อหา:

  • ควรมี display: inline-block;

การสาธิต:

.container {
  width: 100%;
  height: 120px;
  background: #CCC;
  text-align: center;
}

.centered-content {
  display: inline-block;
  background: #FFF;
  padding: 20px;
  border: 1px solid #000;
}
<div class="container">
  <div class="centered-content">
    Center this!
  </div>
</div>

ดูซอนี้ !


จัดกึ่งกลางทั้งแนวนอนและแนวตั้ง

จากประสบการณ์ของผมวิธีที่ดีที่สุดไปยังศูนย์กล่องทั้งสองแนวตั้งและแนวนอนคือใช้คอนเทนเนอร์เพิ่มเติมและใช้คุณสมบัติต่อไปนี้:

ภาชนะด้านนอก:

  • ควรมี display: table;

ภาชนะภายใน:

  • ควรมี display: table-cell;
  • ควรมี vertical-align: middle;
  • ควรมี text-align: center;

กล่องเนื้อหา:

  • ควรมี display: inline-block;

การสาธิต:

.outer-container {
  display: table;
  width: 100%;
  height: 120px;
  background: #CCC;
}

.inner-container {
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}

.centered-content {
  display: inline-block;
  background: #FFF;
  padding: 20px;
  border: 1px solid #000;
}
<div class="outer-container">
  <div class="inner-container">
    <div class="centered-content">
      Center this!
    </div>
  </div>
</div>

ดูซอนี้ !


27

วิธีที่ง่ายที่สุด:

#outer {
  width: 100%;
  text-align: center;
}
#inner {
  margin: auto;
  width: 200px;
}
<div id="outer">
  <div id="inner">Blabla</div>
</div>


1
เป็นโน้ตของคุณ #inner ต้องมีความกว้างที่ตั้งไว้
Michael Terry

#outerไม่จำเป็นต้องwidth:100%;เป็นตามค่าเริ่มต้นมักจะมี<div> width:100%และtext-align:centerก็ไม่จำเป็นเลย
Mobarak Ali

27

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

  • .outer - เต็มความกว้าง
  • .inner - ไม่ได้ตั้งค่าความกว้าง (แต่สามารถระบุความกว้างได้สูงสุด)

สมมติว่าความกว้างที่คำนวณได้ขององค์ประกอบคือ 1,000 พิกเซลและ 300 พิกเซลตามลำดับ ดำเนินการดังนี้:

  1. ห่อ.innerด้านใน.center-helper
  2. สร้าง.center-helperบล็อกแบบอินไลน์ มันจะกลายเป็นขนาดเดียวกับที่.innerทำให้มันกว้าง 300 พิกเซล
  3. กด.center-helper50% ไปทางขวาสัมพันธ์กับผู้ปกครอง; สถานที่นี้เหลือ 500 พิกเซล ด้านนอก
  4. ดัน .innerซ้าย 50% สัมพันธ์กับผู้ปกครอง; สถานที่นี้เหลือที่ -150 พิกเซล wrt ศูนย์ช่วยเหลือซึ่งหมายความว่าด้านซ้ายมีค่าอยู่ที่ 500 - 150 = 350 พิกเซล ด้านนอก
  5. ตั้งค่า overflow on .outerเป็น hidden เพื่อป้องกันแถบเลื่อนแนวนอน

การสาธิต:

body {
  font: medium sans-serif;
}

.outer {
  overflow: hidden;
  background-color: papayawhip;
}

.center-helper {
  display: inline-block;
  position: relative;
  left: 50%;
  background-color: burlywood;
}

.inner {
  display: inline-block;
  position: relative;
  left: -50%;
  background-color: wheat;
}
<div class="outer">
  <div class="center-helper">
    <div class="inner">
      <h1>A div with no defined width</h1>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br>
          Duis condimentum sem non turpis consectetur blandit.<br>
          Donec dictum risus id orci ornare tempor.<br>
          Proin pharetra augue a lorem elementum molestie.<br>
          Nunc nec justo sit amet nisi tempor viverra sit amet a ipsum.</p>
    </div>
  </div>
</div>


26

คุณสามารถทำอะไรเช่นนี้

#container {
   display: table;
   width: <width of your container>;
   height: <height of your container>;
}

#inner {
   width: <width of your center div>;
   display: table-cell;
   margin: 0 auto;
   text-align: center;
   vertical-align: middle;
}

สิ่งนี้จะจัดแนวใน#innerแนวตั้ง หากคุณไม่ต้องการให้ลบdisplayและvertical-alignคุณสมบัติ


25

นี่คือสิ่งที่คุณต้องการในวิธีที่สั้นที่สุด

JSFIDDLE

#outer {
    margin - top: 100 px;
    height: 500 px; /* you can set whatever you want */
    border: 1 px solid# ccc;
}

#inner {
    border: 1 px solid# f00;
    position: relative;
    top: 50 % ;
    transform: translateY(-50 % );
}

3
นั่นคือศูนย์กลางในแนวตั้ง
Michael Terry

22

จัดเรียงข้อความ: กึ่งกลาง

การใช้text-align: centerเนื้อหาแบบอินไลน์จะถูกจัดกึ่งกลางภายในกล่องบรรทัด อย่างไรก็ตามเนื่องจาก div ภายในมีค่าเริ่มต้นwidth: 100%คุณต้องตั้งค่าความกว้างเฉพาะหรือใช้สิ่งใดสิ่งหนึ่งต่อไปนี้:


ระยะขอบ: 0 อัตโนมัติ

การใช้margin: 0 autoเป็นอีกตัวเลือกหนึ่งและเหมาะสมกว่าสำหรับความเข้ากันได้ของเบราว์เซอร์รุ่นเก่า display: tableมันทำงานร่วมกับ


flexbox

display: flexทำงานเหมือนองค์ประกอบบล็อกและวางเนื้อหาตามโมเดล flexbox justify-content: centerจะทำงานร่วมกับ

โปรดทราบ: Flexbox เข้ากันได้กับเบราว์เซอร์ส่วนใหญ่ แต่ไม่ทั้งหมด ดูที่นี่สำหรับสมบูรณ์และวันที่รายการของเบราว์เซอร์ที่เข้ากันได้


แปลง

transform: translateช่วยให้คุณปรับเปลี่ยนพื้นที่ประสานงานของรูปแบบการจัดรูปแบบภาพ CSS การใช้องค์ประกอบสามารถแปลหมุนหมุนปรับขนาดและเบ้ เพื่อให้เป็นศูนย์กลางในแนวนอนก็ต้องและposition: absoluteleft: 50%


<center> (เลิกใช้)

แท็ก<center>เป็นทางเลือก HTML text-align: centerเพื่อ ใช้งานได้กับเบราว์เซอร์รุ่นเก่าและใหม่ส่วนใหญ่ แต่ก็ไม่ถือว่าเป็นแนวปฏิบัติที่ดีเนื่องจากคุณลักษณะนี้ล้าสมัยและถูกลบออกจากมาตรฐานเว็บ


22

คุณสามารถใช้display: flexสำหรับ div ด้านนอกและกึ่งกลางแนวนอนที่คุณต้องเพิ่มjustify-content: center

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

หรือคุณสามารถเยี่ยมชมw3schools - CSS flex Propertyสำหรับแนวคิดเพิ่มเติม


21

Flex มีการสนับสนุนเบราว์เซอร์มากกว่า 97% และอาจเป็นวิธีที่ดีที่สุดในการแก้ปัญหาประเภทนี้ภายในไม่กี่บรรทัด:

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

21

ฉันจัดการเพื่อหาวิธีแก้ปัญหาที่อาจเหมาะสมกับทุกสถานการณ์ แต่ใช้ JavaScript:

นี่คือโครงสร้าง:

<div class="container">
  <div class="content">Your content goes here!</div>
  <div class="content">Your content goes here!</div>
  <div class="content">Your content goes here!</div>
</div>

และนี่คือข้อมูลโค้ด JavaScript:

$(document).ready(function() {
  $('.container .content').each( function() {
    container = $(this).closest('.container');
    content = $(this);

    containerHeight = container.height();
    contentHeight = content.height();

    margin = (containerHeight - contentHeight) / 2;
    content.css('margin-top', margin);
  })
});

หากคุณต้องการใช้ในวิธีตอบสนองคุณสามารถเพิ่มรายการต่อไปนี้:

$(window).resize(function() {
  $('.container .content').each( function() {
    container = $(this).closest('.container');
    content = $(this);

    containerHeight = container.height();
    contentHeight = content.height();

    margin = (containerHeight - contentHeight) / 2;
    content.css('margin-top', margin);
  })
});

21

วิธีนี้ยังใช้งานได้ดี:

div.container {
   display: flex;
   justify-content: center; /* For horizontal alignment */
   align-items: center;     /* For vertical alignment   */
}

สำหรับด้าน<div>ในเงื่อนไขเดียวคือมันheightและwidthต้องไม่ใหญ่กว่าของภาชนะ


19

มีตัวเลือกเดียวที่ฉันพบ:

ทุกคนบอกว่าจะใช้:

margin: auto 0;

แต่มีตัวเลือกอื่น ตั้งค่าคุณสมบัตินี้สำหรับ div parent มันทำงานได้อย่างสมบูรณ์แบบทุกที่ทุกเวลา:

text-align: center;

และดูเด็กไปศูนย์

และสุดท้าย CSS สำหรับคุณ:

#outer{
     text-align: center;
     display: block; /* Or inline-block - base on your need */
}

#inner
{
     position: relative;
     margin: 0 auto; /* It is good to be */
}

text-align ทำงานสำหรับการจัดตำแหน่งข้อความในคอนเทนเนอร์ของมันไม่ใช่สำหรับ container ไปยัง parent
Lalit Kumar Maurya

ฉันทดสอบฉันมีปัญหากับการตั้งค่าเด็กเป็นศูนย์ต้องเมื่อคุณมีเด็กอีกคนหนึ่งที่ระยะเวลาเพิ่มเติม: 0 ตอบตัวอักษรอัตโนมัติ แต่ศูนย์จัดข้อความสำหรับผู้ปกครองทำให้เด็กคนนี้เป็นศูนย์กลางแม้ว่าพวกเขาจะเป็นองค์ประกอบและ ไม่ใช่ข้อความทดสอบและดูสิ่งที่เกิดขึ้น
Pnsadeghy

จัดกึ่งกลางข้อความเท่านั้น คุณอยู่ในขณะนี้ แต่เมื่อคุณเขียนคอนเทนเนอร์ css ซึ่งมีลูกที่มีความกว้างและสีต่างกันรหัสของคุณจะไม่ทำงาน ทดสอบอีกครั้ง !!!!
Lalit Kumar Maurya

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