Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> CSS

วิธี Center Elements ด้วย CSS

Center elements ด้วย CSS ดูยากกว่าที่ควรจะเป็น โดยเฉพาะต้อง center ทั้งแนวนอนและแนวตั้ง วันนี้แสดงวิธีทำ ทั้ง modern CSS และ older (แตะยัง relevant) techniques

Center Text Elements Horizontally

Center text แนวนอนตรงไปตรงมา ใช้ text-align property ค่า center

h1 { text-align: center; }

ทำงานกับ text element ใดๆ

Center Block Elements (non-text) Horizontally

Center non-text element แนวนอน ใช้ margin property left/right = auto ต้องระบุ width ของ element:

.center-horizontal { margin-left: auto; margin-right: auto; width: 100px; /* or max-content;*/ }

หมายเหตุ: ไม่อยากกำหนด fixed width ใช้ width: max-content element จะขยายตาม content width

Block vs Inline Block Elements

.center-horizontal class ข้างต้น center block elements ทุกตัว — แต่ ไม่ใช่ inline elements HTML บาง elements เป็น inline default <button> element มี default display: inline-block style แตะทำให้เป็น block element ได้ง่าย เพิ่ม display: block ใน CSS class:

.center-horizontal { display: block; margin-left: auto; margin-right: auto; width: 100px; /* or max-content;*/ }

ตอนนี้ทำงานกับ element ใดๆ

Center Horizontally with Flexbox

Modern flexbox property center แนวนอนง่ายมาก แทน .center-horizontal class ด้วย:

.center-horizontal { display: flex; justify-content: center; }

<div> element จะ centered

แตะ button element ไม่ centered ทำไม?

<button> element special element ไม่ใช่ <div> ไม่ได้เป็น flex-container

แตะ buttons เป็น flex-item ถ้าใส่ button ใน flex-container center จะทำงาน ลองเพิ่ม HTML:

<div class="center-horizontal"> <button>Center me</button> </div>

ตอนนี้ทำงาน! แค่เอา center class ออกจาก button ใช้ wrap ใน parent <div> container

Tip: <img> element ไม่ได้เป็น flex-container แต่เป็น flex-item ได้เหมือน button

-

Center Elements Vertically

CSS beginners มักปัญหา center elements แนวตั้ง Flexbox ทำง่าย แต่ก่อนหน้านั้นดู older CSS methods

อาจคิด margin-top/bottom auto — แต่ no

ต้องมี parent container ที่มี specified height เพื่อ vertical centering เพิ่ม HTML:

<section class="section"> <div class="center-vertical">Center me vertically</div> </section>

CSS สำหรับ section class (parent):

.section { height: 200px; border: 1px solid black; }

Border เพื่อให้เห็นชัด

CSS สำหรับ child element:

.center-vertical { position: relative; top: 50%; transform: translateY(-50%); }

เสร็จ!

Center Vertically with Flexbox

Center แนวตั้งด้วย flexbox ต้องมี parent flex container ลบ center-vertical class จาก child element เพิ่ม flexbox properties 2 ตัวให้ .section class:

.section { height: 200px; border: 1px solid black; display: flex; align-items: center; }

ตอนนี้ child element vertically centered ด้วย flexbox

Center Element Both Vertically and Horizontally

Center ทั้งแนวตั้งและแนวนอน ต้องการเพียง properties ไม่มาก เริ่มจาก old CSS method

Markup:

<section class="section"> <div class="center-vertical-and-horizontal"> Center me vertically & horizontally </div> </section>

CSS:

.section { height: 200px; border: 1px solid black; } .center-vertical-and-horizontal { position: relative; top: 50%; left: 50%; transform: translate(-50%, -50%); width: max-content; }

คล้าย "center elements vertically" example (ไม่ flexbox) เพิ่ม left: 50% และ transform ระบุ X และ Y axis ใน declaration เดียว: (-50%, -50%) ค่าแรก = X ค่าที่สอง = Y

Center Vertically and Horizontally with Flexbox

Flexbox trick เดียวกัน ลบ center-vertical-and-horizontal class จาก child element .section class ใช้ CSS:

.section { height: 200px; border: 1px solid black; display: flex; align-items: center; justify-content: center; }

ต่างจาก center vertically example เดิมแค่ justify-content: center declaration จัดการ horizontal centering

Center Horizontally & Vertically with CSS Grid

Modern-modern CSS grid property จัดการ vertical/horizontal centering แทน .section class ด้วย:

.section { height: 200px; border: 1px solid black; display: grid; place-items: center; }

แค่ 2 properties (display: grid & place-items:center) ทำงานกับ CSS grid สะดวกมาก!

เสียดาย CSS grid ไม compatible ทุก modern browsers และไมทำงาน 100% ใน popular CMS/frameworks อย่าง WordPress — ยัง

ดู CSS grid compatibility status ปัจจุบัน