Nếu đó là một dòng văn bản và / hoặc hình ảnh, thì nó rất dễ thực hiện. Chỉ dùng:
text-align: center;
vertical-align: middle;
line-height: 90px; /* The same as your div height */
Đó là nó. Nếu nó có thể là nhiều dòng, thì nó có phần phức tạp hơn. Nhưng có những giải pháp trên http://pmob.co.uk/ . Tìm "căn dọc".
Vì chúng có xu hướng bị hack hoặc thêm các div phức tạp ... Tôi thường sử dụng một bảng có một ô duy nhất để làm điều đó ... để làm cho nó đơn giản nhất có thể.
Cập nhật cho năm 2020:
Trừ khi bạn cần làm cho nó hoạt động trên các trình duyệt cũ hơn như Internet Explorer 10, bạn có thể sử dụng flexbox. Nó được hỗ trợ rộng rãi bởi tất cả các trình duyệt chính hiện tại . Về cơ bản, container cần được chỉ định là container flex, cùng với việc định tâm dọc theo trục chính và chéo của nó:
#container {
display: flex;
justify-content: center;
align-items: center;
}
Để chỉ định chiều rộng cố định cho trẻ, được gọi là "mục flex":
#content {
flex: 0 0 120px;
}
Ví dụ: http://jsfiddle.net/2woqsef1/1/
Để thu nhỏ nội dung, nó thậm chí còn đơn giản hơn: chỉ cần xóa flex: ...
dòng khỏi mục flex và nó được tự động thu nhỏ lại.
Ví dụ: http://jsfiddle.net/2woqsef1/2/
Các ví dụ trên đã được thử nghiệm trên các trình duyệt chính bao gồm MS Edge và Internet Explorer 11.
Một lưu ý kỹ thuật nếu bạn cần tùy chỉnh nó: bên trong mục flex, vì mục flex này không phải là thùng chứa flex, cách CSS không phải là flexbox cũ hoạt động như mong đợi. Tuy nhiên, nếu bạn thêm một mục flex bổ sung vào thùng chứa flex hiện tại, hai mục flex sẽ được đặt theo chiều ngang. Để đặt chúng theo chiều dọc, thêm flex-direction: column;
hộp chứa flex. Đây là cách nó hoạt động giữa một container flex và các phần tử con ngay lập tức của nó .
Có một phương pháp khác để thực hiện định tâm: bằng cách không chỉ định center
phân phối trên trục chính và trục chéo cho thùng chứa flex, mà thay vào đó chỉ định margin: auto
trên mục flex để chiếm hết không gian thừa ở cả bốn hướng và lề phân bố đều sẽ làm cho mục flex tập trung ở tất cả các hướng. Điều này hoạt động trừ khi có nhiều mục flex. Ngoài ra, kỹ thuật này hoạt động trên MS Edge nhưng không phải trên Internet Explorer 11.
Cập nhật năm 2016/2017:
Nó có thể được thực hiện phổ biến hơn transform
và nó hoạt động tốt ngay cả trong các trình duyệt cũ hơn như Internet Explorer 10 và Internet Explorer 11. Nó có thể hỗ trợ nhiều dòng văn bản:
position: relative;
top: 50%;
transform: translateY(-50%);
Ví dụ: https://jsfiddle.net/wb8u02kL/1/
Để thu nhỏ chiều rộng:
Các giải pháp trên đã sử dụng một chiều rộng cố định cho khu vực nội dung. Để sử dụng chiều rộng được thu hẹp, sử dụng
position: relative;
float: left;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
Ví dụ: https://jsfiddle.net/wb8u02kL/2/
Nếu cần hỗ trợ cho Internet Explorer 10, thì flexbox sẽ không hoạt động và phương thức trên và line-height
phương thức sẽ hoạt động. Nếu không, flexbox sẽ làm công việc.
text-align:center
không làm "phần dọc"?