หากเป็นข้อความและ / หรือรูปภาพหนึ่งบรรทัดแสดงว่าทำได้ง่าย เพียงใช้:
text-align: center;
vertical-align: middle;
line-height: 90px; /* The same as your div height */
แค่นั้นแหละ. หากสามารถมีหลายบรรทัดก็จะค่อนข้างซับซ้อน แต่มีการแก้ปัญหาใน http://pmob.co.uk/ มองหา "จัดแนวตั้ง"
เนื่องจากพวกเขามักจะแฮ็กหรือเพิ่ม div ที่ซับซ้อน ... ฉันมักจะใช้ตารางที่มีเซลล์เดียวทำ ... เพื่อทำให้มันง่ายที่สุด
อัพเดทสำหรับปี 2020:
หากคุณไม่ต้องการให้มันทำงานกับเบราว์เซอร์รุ่นก่อนหน้าเช่น Internet Explorer 10 คุณสามารถใช้ flexbox มันเป็นเรื่องที่ได้รับการสนับสนุนอย่างกว้างขวางโดยเบราว์เซอร์ที่สำคัญทั้งหมดในปัจจุบัน โดยทั่วไปจะต้องระบุคอนเทนเนอร์เป็นคอนเทนเนอร์แบบยืดหยุ่นพร้อมกับการจัดกึ่งกลางตามแกนหลักและแกนไขว้:
#container {
display: flex;
justify-content: center;
align-items: center;
}
ในการระบุความกว้างคงที่สำหรับชายด์ซึ่งเรียกว่า "ไอเท็มเฟล็กต์":
#content {
flex: 0 0 120px;
}
ตัวอย่าง: http://jsfiddle.net/2woqsef1/1/
ในการหดห่อเนื้อหามันง่ายยิ่งขึ้นเพียงแค่ลบflex: ...
บรรทัดออกจากรายการเฟล็กซ์และมันจะถูกห่อโดยอัตโนมัติ
ตัวอย่าง: http://jsfiddle.net/2woqsef1/2/
ตัวอย่างข้างต้นได้รับการทดสอบบนเบราว์เซอร์หลัก ๆ รวมถึง MS Edge และ Internet Explorer 11
หมายเหตุทางเทคนิคหนึ่งข้อหากคุณต้องการปรับแต่ง: ภายในของไอเท็มเฟล็กเนื่องจากไอเท็มเฟล็กนี้ไม่ใช่คอนเทนเนอร์แบบเฟล็กเองวิธีที่ไม่ใช่เฟล็กบ็อกซ์แบบเก่าของ CSS ทำงานตามที่คาดไว้ อย่างไรก็ตามหากคุณเพิ่มไอเท็มเฟล็กเพิ่มเติมลงในเฟล็กซ์คอนเทนเนอร์ปัจจุบันไอเท็มเฟล็กทั้งสองจะถูกวางในแนวนอน ในการทำให้วางในแนวตั้งให้เพิ่มflex-direction: column;
ไปยังคอนเทนเนอร์ flex นี่คือวิธีการทำงานร่วมกันระหว่างภาชนะดิ้นและทันทีองค์ประกอบของเด็ก
มีวิธีอื่นในการทำศูนย์กลาง: โดยไม่ได้ระบุcenter
การกระจายในแกนหลักและแกนไขว้สำหรับเฟล็กซ์คอนเทนเนอร์ แต่ให้ระบุmargin: auto
บนไอเท็มเฟล็กเพื่อใช้พื้นที่พิเศษทั้งหมดในทั้งสี่ทิศทางและการกระจายขอบเท่า ๆ กัน จะทำให้รายการ flex อยู่ตรงกลางในทุกทิศทาง ใช้งานได้ยกเว้นเมื่อมีรายการเฟล็กซ์หลายรายการ นอกจากนี้เทคนิคนี้ใช้กับ MS Edge ได้ แต่ไม่สามารถใช้กับ Internet Explorer 11 ได้
อัปเดตสำหรับ 2016/2017:
มันสามารถทำได้มากกว่าปกติtransform
และใช้ได้ดีแม้ในเบราว์เซอร์รุ่นเก่าเช่น Internet Explorer 10 และ Internet Explorer 11 สามารถรองรับข้อความได้หลายบรรทัด:
position: relative;
top: 50%;
transform: translateY(-50%);
ตัวอย่าง: https://jsfiddle.net/wb8u02kL/1/
วิธีย่อความกว้าง:
โซลูชันด้านบนใช้ความกว้างคงที่สำหรับพื้นที่เนื้อหา หากต้องการใช้ความกว้างที่หดห่อให้ใช้
position: relative;
float: left;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
ตัวอย่าง: https://jsfiddle.net/wb8u02kL/2/
หากต้องการการสนับสนุนสำหรับ Internet Explorer 10 Flexbox จะไม่ทำงานและวิธีการดังกล่าวข้างต้นและline-height
วิธีการดังกล่าวจะใช้งานได้ มิฉะนั้น flexbox จะทำงาน
text-align:center
ไม่ได้ทำ "ส่วนแนวตั้ง"?