Căn chỉnh văn bản theo chiều dọc và căn giữa CSS. Căn chỉnh các phần tử theo chiều dọc bằng CSS

Thông thường trong quá trình bố trí cần phải căn chỉnh văn bản theo chiều dọc trong một khối. Nếu việc này cần được thực hiện trong một ô của bảng thì giá trị của thuộc tính CSS căn chỉnh theo chiều dọc sẽ được đặt.

Nhưng một câu hỏi hợp lý được đặt ra: liệu có thể thực hiện mà không cần bảng mà không làm bố cục trang bị quá tải với các thẻ không cần thiết không? Câu trả lời là “bạn có thể”, nhưng do trình duyệt MSIE hỗ trợ CSS kém nên giải pháp cho vấn đề này sẽ khác với giải pháp dành cho các trình duyệt phổ biến khác.

Ví dụ, hãy xem xét đoạn sau:



Một số tiếp theo

và cố gắng căn chỉnh văn bản theo chiều dọc vào giữa khối và cạnh dưới cùng của khối.

Giải pháp của vấn đề

Các trình duyệt "đúng" (bao gồm MSIE

Hầu hết các trình duyệt hiện đại đều hỗ trợ CSS2.1, cụ thể là giá trị ô bảng cho thuộc tính display. Điều này cho chúng ta cơ hội buộc một khối văn bản xuất hiện dưới dạng một ô trong bảng và tận dụng lợi thế này để căn chỉnh văn bản theo chiều dọc:

div(
hiển thị: ô bảng;
căn dọc: giữa;
}

div(
hiển thị: ô bảng;
căn dọc: dưới cùng;
}

Internet Explorer (bao gồm phiên bản 7)

Bạn có thể giải quyết vấn đề căn chỉnh văn bản về cạnh dưới cùng của một khối trong MSIE bằng cách sử dụng định vị tuyệt đối (ở đây chúng ta sẽ cần một phần tử chuỗi được nhúng trong một khối):

div(
vị trí: tương đối;
}
khoảng div (
hiển thị: khối;
vị trí: tuyệt đối;
đáy: 0%;
trái: 0%;
chiều rộng: 100%;
}

Bộ quy tắc này cũng hoạt động trong các trình duyệt “đúng”.

Chỉ định thuộc tính

Khoảng phân chia (
hiển thị: khối;
chiều rộng: 100%;
}

không cần thiết, nhưng chúng có thể cần thiết nếu, ngoài việc căn chỉnh văn bản theo chiều dọc, bạn còn định sử dụng căn chỉnh theo chiều ngang, ví dụ: text-align: center ;.

Để căn chỉnh văn bản theo chiều dọc vào giữa khối, đoạn ban đầu vẫn sẽ phải phức tạp - chúng tôi sẽ giới thiệu một thành phần dòng khác:

Tài liệu để nghiên cứu:

  • Định tâm dọc trong CSS (www.jakpsatweb.cz/css/css-vertical-center-solution.html)
  • Định tâm dọc bằng CSS (www.student.oulu.fi/%7Elaurirai/www/css/middle/)
  • Căn dọc (www.cssplay.co.uk/ie/valign.html)
  • dọc-align:middle (cssing.org.ua/2005/07/14/vertical-align-middle/)
  • Một phương pháp căn chỉnh dọc khác trong CSS (cssing.org.ua/2007/04/26/another-css-valign-method)

Trong CSS, một số điều tưởng chừng đơn giản lại không dễ thực hiện. Một trong những điều này là sự liên kết, tức là. khi một phần tử cần được định vị theo một cách nhất định so với phần tử khác.

Bài viết này trình bày một số giải pháp có sẵn sẽ giúp đơn giản hóa công việc căn giữa các phần tử theo chiều ngang và/hoặc chiều dọc.

Lưu ý: Bên dưới mỗi giải pháp là danh sách các trình duyệt cho biết phiên bản mà mã CSS được chỉ định hoạt động.

CSS - Khối căn giữa

1. Căn chỉnh một khối vào giữa khối khác. Trong trường hợp này, khối thứ nhất và thứ hai có kích thước động.

...
...

Cha mẹ ( vị trí: tương đối; ) .child ( vị trí: tuyệt đối; bên trái: 50%; trên cùng: 50%; -webkit-transform: dịch (-50%, -50%); -moz-transform: dịch (-50% , -50%); -ms-transform: dịch(-50%, -50%); -o-transform: dịch(-50%, -50% );

  • Chrome 4.0+
  • Firefox 3.6+
  • Internet Explorer 9+
  • Opera 10.5+
  • Safari 3.1+

2. Căn chỉnh một khối vào giữa khối khác. Trong trường hợp này, khối thứ hai có kích thước cố định.

Cha mẹ ( vị trí: tương đối; ) .con ( vị trí: tuyệt đối; trái: 50%; trên cùng: 50%; /* chiều rộng và chiều cao của 2 khối */ chiều rộng: 500px; chiều cao: 250px; /* Giá trị được xác định tùy thuộc về kích thước của nó */ /* lề trái = - width / 2 */ lề trái: -250px; lề-top = - chiều cao / 2 */ lề-top: -125px )

Các trình duyệt hỗ trợ giải pháp này:

  • Chrome 1.0+
  • Firefox 1.0+
  • Internet Explorer 4.0+
  • Opera 7.0+
  • Safari 1.0+

3. Căn chỉnh một khối vào giữa khối khác. Trong trường hợp này, khối thứ hai có kích thước được chỉ định theo tỷ lệ phần trăm.

Cha (vị trí: tương đối;) .con (vị trí: tuyệt đối; /* chiều rộng và chiều cao của 2 khối trong % */ chiều cao: 50%; chiều rộng: 50%; /* Giá trị được xác định tùy thuộc vào kích thước của nó trong % * / trái: 25%; /* (100% - chiều rộng) / 2 */ trên cùng: 25%; /* (100% - chiều cao) / 2 */ )

Các trình duyệt hỗ trợ giải pháp này:

  • Chrome 1.0+
  • Firefox 1.0+
  • Internet Explorer 4.0+
  • Opera 7.0+
  • Safari 1.0+

CSS - Căn chỉnh theo chiều ngang

1. Căn chỉnh một phần tử khối (hiển thị: khối) so với phần tử khác (trong đó nó nằm) theo chiều ngang:

...
...

Chặn ( lề-trái: auto; lề-phải: auto; )

Các trình duyệt hỗ trợ giải pháp này:

  • Chrome 1.0+
  • Firefox 1.0+
  • Internet Explorer 6.0+
  • Opera 3.5+
  • Safari 1.0+

2. Căn chỉnh phần tử line (display: inline) hoặc line-block (display: inline-block) theo chiều ngang:

...
...

Cha mẹ ( text-align: center; ) .child ( display: inline-block; )

Các trình duyệt hỗ trợ giải pháp này:

  • Chrome 1.0+
  • Firefox 3.0+
  • Internet Explorer 8.0+
  • Opera 7.0+
  • Safari 1.0+

CSS - Căn chỉnh theo chiều dọc

1. Căn giữa một phần tử (hiển thị: nội tuyến, hiển thị: khối nội tuyến) so với phần tử kia (trong đó nó nằm). Khối cha trong ví dụ này có chiều cao cố định, được đặt bằng thuộc tính CSS line-height.

...
...

Cha mẹ ( line-height: 500px; ) .child ( display: inline-block; Vertical-align: middle; )

Các trình duyệt hỗ trợ giải pháp này:

  • Chrome 1.0+
  • Firefox 3.0+
  • Internet Explorer 8.0+
  • Opera 7.0+
  • Safari 1.0+

2. Căn giữa một khối so với khối khác theo chiều dọc bằng cách biểu thị khối cha là một bảng và khối con là một ô của bảng này.

Cha mẹ ( display: table; ) .child ( display: table-cell; Vertical-align: middle; )

Các trình duyệt hỗ trợ giải pháp này:

  • Chrome 1.0+
  • Firefox 1.0+
  • Internet Explorer 8.0+
  • Opera 7.5+
  • Safari 1.0+

Nếu bạn biết bất kỳ thủ thuật thú vị nào khác hoặc các giải pháp căn chỉnh hữu ích làm sẵn, hãy chia sẻ chúng trong phần bình luận.

Mọi nhà thiết kế bố cục đều thường xuyên phải đối mặt với nhu cầu căn chỉnh nội dung theo một khối: theo chiều ngang hoặc chiều dọc. Có một số bài viết hay về chủ đề này, nhưng tất cả chúng đều cung cấp nhiều lựa chọn thú vị nhưng ít thực tế, đó là lý do tại sao bạn phải dành thêm thời gian để nêu bật những điểm chính. Tôi quyết định trình bày thông tin này dưới một hình thức thuận tiện cho tôi để không phải tra google nữa.

Căn chỉnh các khối với kích thước đã biết

Cách dễ nhất để sử dụng CSS là căn chỉnh các khối có chiều cao đã biết (để căn chỉnh theo chiều dọc) hoặc chiều rộng (để căn chỉnh theo chiều ngang).

Căn chỉnh bằng cách sử dụng phần đệm

Đôi khi bạn không thể căn giữa một phần tử mà phải thêm đường viền cho phần tử đó bằng cách sử dụng " phần đệm".

Ví dụ: có một hình ảnh 200 x 200 pixel và bạn cần căn giữa nó thành một khối 240 x 300. Chúng ta có thể đặt chiều cao và chiều rộng của khối bên ngoài = 200px và thêm 20 pixel ở trên cùng và dưới cùng , và 50 ở bên trái và bên phải.

.example-wrapper1 ( nền : #535E73 ; chiều rộng : 200px ; chiều cao : 200px ; phần đệm : 20px 50px ; )

Căn chỉnh các khối được định vị tuyệt đối

Nếu khối được đặt thành " vị trí: tuyệt đối", thì nó có thể được định vị tương đối so với cha mẹ gần nhất của nó bằng "vị trí: tương đối". Điều này yêu cầu tất cả các thuộc tính (" đứng đầu","Phải","đáy","bên trái") của khối bên trong để gán cùng một giá trị, cũng như "margin: auto".

*Có một sắc thái: Chiều rộng (chiều cao) của khối bên trong + giá trị bên trái (phải, dưới, trên) không được vượt quá kích thước của khối cha. Sẽ an toàn hơn khi gán 0 (không) cho các thuộc tính bên trái (phải, dưới, trên).

.example-wrapper2 ( vị trí : tương đối ; chiều cao : 250px ; nền : url(space.jpg) ; ) .cat-king ( chiều rộng : 200px ; chiều cao : 200px ; vị trí : tuyệt đối ; đỉnh : 0 ; trái : 0 ; đáy : 0 ; bên phải : 0 ; lề : tự động ;

Căn chỉnh theo chiều ngang

Căn chỉnh bằng cách sử dụng "text-align: center"

Để căn chỉnh văn bản trong một khối, có một thuộc tính đặc biệt " căn chỉnh văn bản". Khi được đặt thành " trung tâm"Mỗi dòng văn bản sẽ được căn chỉnh theo chiều ngang. Đối với văn bản nhiều dòng, giải pháp này cực kỳ hiếm khi được sử dụng; tùy chọn này thường được tìm thấy để căn chỉnh các nhịp, liên kết hoặc hình ảnh.

Tôi đã từng phải nghĩ ra một số văn bản để chỉ ra cách căn chỉnh văn bản hoạt động bằng cách sử dụng CSS, nhưng tôi không nghĩ ra điều gì thú vị. Lúc đầu, tôi quyết định sao chép một bài đồng dao dành cho trẻ em ở đâu đó, nhưng tôi nhớ rằng điều này có thể làm hỏng tính độc đáo của bài viết và những độc giả thân yêu của chúng tôi sẽ không thể tìm thấy nó trên Google. Và sau đó tôi quyết định viết đoạn này - suy cho cùng thì vấn đề không phải ở nó mà là sự thẳng hàng.

.example-text ( text-align : center ; phần đệm : 10px ; nền : #FF90B8 ; )

Cần lưu ý rằng thuộc tính này sẽ hoạt động không chỉ cho văn bản mà còn cho mọi thành phần nội tuyến ("display: inline").

Tuy nhiên, văn bản này được căn chỉnh sang trái nhưng nằm trong một khối được căn giữa so với trình bao bọc.

.example-wrapper3 ( text-align : center ; nền : #FF90B8 ; ) .inline-text ( display : inline-block ; width : 40% ; đệm : 10px ; căn chỉnh văn bản : trái ; nền : #FFE5E5 ; )

Căn chỉnh các khối bằng lề

Các phần tử khối có chiều rộng đã biết có thể dễ dàng được căn chỉnh theo chiều ngang bằng cách đặt chúng thành "margin-left: auto; Margin-right: auto". Thông thường người ta sử dụng chữ viết tắt: " lề: 0 tự động" (có thể sử dụng bất kỳ giá trị nào thay vì 0). Nhưng phương pháp này không phù hợp với việc căn chỉnh theo chiều dọc.

.lama-wrapper ( chiều cao : 200px ; nền : #F1BF88 ; ) .lama1 ( chiều cao : 200px ; chiều rộng : 200px ; nền : url(lama.jpg) ; lề : 0 tự động ; )

Đây là cách bạn nên căn chỉnh tất cả các khối, nếu có thể (khi không yêu cầu định vị cố định hoặc tuyệt đối) - đó là cách hợp lý và đầy đủ nhất. Mặc dù điều này có vẻ hiển nhiên nhưng đôi khi tôi thấy những ví dụ đáng sợ có dấu thụt âm, vì vậy tôi quyết định làm rõ.

Căn dọc

Căn chỉnh theo chiều dọc có nhiều vấn đề hơn - rõ ràng, điều này không được cung cấp trong CSS. Có một số cách để đạt được kết quả mong muốn, nhưng tất cả chúng đều không đẹp lắm.

Căn chỉnh với thuộc tính chiều cao dòng

Trong trường hợp chỉ có một dòng trong một khối, bạn có thể căn chỉnh theo chiều dọc bằng cách sử dụng " chiều cao giữa các dòng" và đặt nó ở độ cao mong muốn. Để có độ tin cậy, cũng đáng đặt "chiều cao", giá trị của nó sẽ bằng giá trị của "line-height", vì giá trị sau không được hỗ trợ trong tất cả các trình duyệt.

.example-wrapper4 ( line-height : 100px ; color : #DC09C0 ; nền : #E5DAE1 ; Height : 100px ; text-align : center ; )

Cũng có thể đạt được sự liên kết khối với một số dòng. Để làm điều này, bạn sẽ phải sử dụng một khối bao bọc bổ sung và đặt chiều cao dòng cho nó. Khối bên trong có thể có nhiều dòng nhưng phải là "nội tuyến". Bạn cần áp dụng "vertical-align: middle" cho nó.

.example-wrapper5 ( line-height : 160px ; chiều cao : 160px ; font-size : 0 ; nền : #FF9B00 ; ) .example-wrapper5 .text1 ( display : inline-block ; font-size : 14px ; line-height : 1.5 ; căn chỉnh theo chiều dọc : nền : #FFFAF2 ;

Khối trình bao bọc phải được đặt "font-size: 0". Nếu bạn không đặt cỡ chữ về 0, trình duyệt sẽ thêm một vài pixel phụ. Bạn cũng sẽ phải chỉ định kích thước phông chữ và chiều cao dòng cho khối bên trong, vì các thuộc tính này được kế thừa từ khối cha.

Căn chỉnh theo chiều dọc trong bảng

Tài sản " căn chỉnh theo chiều dọc" cũng ảnh hưởng đến các ô của bảng. Với giá trị được đặt thành "ở giữa", nội dung bên trong ô được căn chỉnh về giữa. Tất nhiên, bố cục bảng ngày nay được coi là cổ xưa, nhưng trong những trường hợp đặc biệt, bạn có thể mô phỏng nó bằng cách chỉ định " hiển thị: ô bảng".

Tôi thường sử dụng tùy chọn này để căn chỉnh theo chiều dọc. Dưới đây là một ví dụ về bố cục được lấy từ một dự án đã hoàn thành. Hình ảnh được căn giữa theo chiều dọc theo cách này mới là điều đáng quan tâm.

.one_product .img_wrapper ( display : ô bảng ; chiều cao : 169px ; căn chỉnh dọc : giữa ; tràn : ẩn ; nền : #fff ; chiều rộng : 255px ; ) .one_product img ( chiều cao tối đa : 169px ; chiều rộng tối đa : 100 % ; chiều rộng tối thiểu : 140px ;

Cần nhớ rằng nếu một phần tử có tập "float" khác với "none", thì trong mọi trường hợp, nó sẽ là khối (hiển thị: khối) - khi đó bạn sẽ phải sử dụng một trình bao bọc khối bổ sung.

Căn chỉnh với phần tử nội tuyến bổ sung

Và đối với các phần tử nội tuyến, bạn có thể sử dụng " căn dọc: giữa". Hơn nữa, tất cả các phần tử có " Hiển thị nội dòng" nằm trên cùng một đường thẳng sẽ thẳng hàng với một đường trung tâm chung.

Bạn cần tạo một khối phụ có chiều cao bằng chiều cao của khối cha, sau đó khối mong muốn sẽ được căn giữa. Để làm điều này, thật thuận tiện khi sử dụng các phần tử giả:trước hoặc:sau.

.example-wrapper6 ( chiều cao : 300px ; căn chỉnh văn bản : giữa ; nền : #70DAF1 ; ) .pudge ( hiển thị : khối nội tuyến ; căn chỉnh dọc : giữa ; nền : url(pudge.png) ; màu nền : # fff ; chiều rộng : 200px ; chiều cao : 200px .riki ( hiển thị : khối nội tuyến ; chiều cao : 100% ; căn chỉnh dọc : giữa ; )

Hiển thị: uốn cong và căn chỉnh

Nếu bạn không quan tâm nhiều đến người dùng Explorer 8 hoặc quan tâm đến mức sẵn sàng chèn thêm một đoạn javascript cho họ, thì bạn có thể sử dụng "display: flex". Hộp Flex rất hữu ích trong việc giải quyết các vấn đề căn chỉnh và chỉ cần viết "margin: auto" để căn giữa nội dung bên trong.

Cho đến nay, tôi thực tế chưa bao giờ gặp phải phương pháp này, nhưng không có hạn chế đặc biệt nào đối với nó.

.example-wrapper7 ( display : flex ; chiều cao : 300px ; nền : #AEB96A ; ) .example-wrapper7 img ( lề : auto ; )

Chà, đó là tất cả những gì tôi muốn viết về căn chỉnh CSS. Bây giờ việc tập trung nội dung sẽ không còn là vấn đề nữa!

Tất cả những người làm việc với bố cục sớm hay muộn đều phải đối mặt với nhu cầu căn chỉnh các phần tử theo chiều dọc... và họ biết những khó khăn nào có thể nảy sinh khi căn chỉnh một phần tử vào giữa. Trong CSS có một thuộc tính `vertical-align` với nhiều giá trị mà về mặt logic sẽ thực hiện căn chỉnh dọc. Tuy nhiên, trên thực tế nó không hề hoạt động như mong đợi.

Có một số kỹ thuật để giải quyết vấn đề này. Dưới đây chúng ta sẽ xem xét kỹ hơn về từng người trong số họ.

1. Căn chỉnh bằng bảng

Trong trường hợp này, chúng ta thay thế khối bên ngoài bằng một bảng một ô. Căn chỉnh sẽ được áp dụng cho nội dung của ô, tức là khối bên trong.

HTML

CSS

Bên ngoài ( chiều rộng : 200px ; chiều cao : 200px ; căn chỉnh văn bản : giữa ; căn chỉnh dọc : giữa ; màu nền : #ffc ; )

Nhược điểm chính của giải pháp này, theo quan điểm ngữ nghĩa, là việc sử dụng bảng cho các mục đích khác ngoài mục đích dự định của nó. Nhược điểm thứ hai là việc tạo bảng yêu cầu thêm một phần tử khác xung quanh khối bên ngoài.

Nhược điểm đầu tiên có thể tránh được một phần bằng cách thay thế thẻ bảng bằng div và đặt chế độ hiển thị bảng trong CSS.

HTML

CSS

Trình bao bọc bên ngoài ( display : table ; ) .outer ( display : table-cell ; )

2. Căn chỉnh bằng cách thụt lề

Với điều kiện là chúng ta biết chiều cao của khối bên trong và bên ngoài, việc căn chỉnh có thể được thiết lập bằng cách sử dụng các vết lõm dọc của khối bên trong bằng công thức: (H bên ngoài – H bên trong) / 2.

CSS

Bên ngoài ( chiều cao : 200px ; ) . bên trong ( chiều cao : 100px ; lề : 50px 0 ; )

Nhược điểm của giải pháp là bắt buộc phải biết về chiều cao của cả hai khối.

3. Căn chỉnh theo chiều cao dòng

Nếu khối bên trong chiếm không quá một dòng văn bản thì bạn có thể sử dụng thuộc tính line-height và đặt nó bằng chiều cao của khối bên ngoài. Vì nội dung của khối bên trong không được bao bọc ở dòng thứ hai, nên bạn cũng nên thêm các quy tắc khoảng trắng: nowrap và tràn: ẩn.

CSS

Bên ngoài ( chiều cao : 200px ; chiều cao dòng : 200px ; ) . bên trong ( khoảng trắng : nowrap ; tràn : ẩn ; )

Phương pháp này cũng có thể được sử dụng để căn chỉnh văn bản nhiều dòng. Để thực hiện việc này, khối bên trong cần ghi đè giá trị chiều cao dòng, đồng thời thêm các quy tắc display: inline-block và Vertical-align: middle.

CSS

Bên ngoài ( chiều cao : 200px ; chiều cao dòng : 200px ; ) . bên trong ( chiều cao dòng : bình thường ; hiển thị : khối nội tuyến ; căn chỉnh dọc : giữa ; )

Nhược điểm của phương pháp này là phải biết chiều cao của khối bên ngoài.

4. Căn chỉnh bằng cách sử dụng “kéo dài”

Phương pháp này có thể được sử dụng khi chúng ta biết chiều cao của khối bên trong, nhưng chiều cao của khối bên ngoài thì không.

Để áp dụng phương pháp này chúng ta cần:

  • Đặt khối bên ngoài thành vị trí định vị tương đối: tương đối và khối bên trong thành vị trí tuyệt đối: tuyệt đối;
  • Thêm một số quy tắc top: 0 và Bottom: 0 vào khối bên trong, do đó nó sẽ kéo dài đến toàn bộ chiều cao của khối bên ngoài;
  • Đặt phần đệm dọc của khối bên trong thành auto .

CSS

Bên ngoài ( vị trí : tương đối ; ) . bên trong ( chiều cao : 100px ; vị trí : tuyệt đối ; trên cùng : 0 ; dưới cùng : 0 ; lề : tự động 0 ; )

5. Căn chỉnh lề trên âm

Tương tự như phương pháp trước, phương pháp này được sử dụng khi chưa biết chiều cao của khối bên ngoài nhưng đã biết chiều cao của khối bên trong.

Bạn cần đặt khối bên ngoài thành vị trí tương đối và khối bên trong thành định vị tuyệt đối. Sau đó di chuyển khối bên trong xuống một nửa chiều cao của đỉnh khối bên ngoài: 50% và nâng nó lên một nửa chiều cao của chính nó lề-top: -H bên trong / 2 .

CSS

Bên ngoài ( vị trí : tương đối ; ) . bên trong ( chiều cao : 100px ; vị trí : tuyệt đối ; trên cùng : 50% ; lề trên : -50px ; )

Nhược điểm của phương pháp này là phải biết chiều cao của dàn lạnh.

6. Căn chỉnh bằng phép biến đổi

Phương pháp này có thể được sử dụng khi không xác định được độ cao của dàn lạnh. Bạn cần di chuyển khối bên trong xuống một nửa chiều cao của khối bên ngoài: 50%, sau đó sử dụng thuộc tính biến đổi và di chuyển nó trở lại bằng cách sử dụng hàm dịchY(-50%).

CSS

Bên ngoài ( vị trí : tương đối ; ) . bên trong ( vị trí : tuyệt đối ; trên cùng : 50% ; biến đổi : dịchY (-50% ); )

7. Căn chỉnh với phần tử giả

Đây là phương pháp phổ biến nhất có thể được sử dụng khi không biết chiều cao của cả hai khối.

Bản chất của phương pháp này là thêm một khối nội tuyến có chiều cao 100% bên trong khối bên ngoài và gán cho nó căn chỉnh theo chiều dọc. Như vậy, chiều cao của khối được thêm vào sẽ bằng chiều cao của khối bên ngoài. Khối trong nhà sẽ được căn chỉnh theo chiều dọc so với khối được thêm vào và do đó là khối bên ngoài.

Để không vi phạm ngữ nghĩa, nên thêm khối nội tuyến bằng cách sử dụng các phần tử giả trước hoặc sau.

CSS

Bên ngoài :trước ( display : inline-block ; chiều cao : 100% ; căn chỉnh dọc : giữa ; nội dung : "" ; ) .inner ( display : inline-block ; Vertical-align : middle ; )

Nhược điểm của phương pháp này là không thể sử dụng với vị trí tuyệt đối của dàn lạnh.

8. Căn chỉnh với Flexbox

Phương pháp căn chỉnh dọc hiện đại nhất là sử dụng Bố cục hộp linh hoạt (hoặc Flexbox). Nó cho phép bạn kiểm soát linh hoạt vị trí của các thành phần trên trang, sắp xếp chúng ở hầu hết mọi nơi. Căn giữa cho Flexbox là một công việc rất đơn giản.

Căn giữa các phần tử theo chiều dọc bằng CSS là một nhiệm vụ gây khó khăn cho các nhà phát triển. Tuy nhiên, có một số phương pháp để giải quyết nó khá đơn giản. Bài học này trình bày 6 phương án căn giữa nội dung theo chiều dọc.

Hãy bắt đầu với một mô tả chung về vấn đề.

Vấn đề định tâm dọc

Định tâm theo chiều ngang rất đơn giản và dễ dàng. Khi phần tử ở giữa là nội tuyến, chúng ta sử dụng thuộc tính căn chỉnh tương ứng với phần tử cha. Khi phần tử ở cấp khối, chúng tôi đặt chiều rộng của nó và cài đặt tự động lề trái và phải.

Hầu hết mọi người, khi sử dụng thuộc tính text-align:, hãy tham khảo thuộc tính Vertical-align để căn giữa theo chiều dọc. Mọi thứ trông khá logic. Nếu bạn đã sử dụng các mẫu bảng, có thể bạn đã sử dụng rộng rãi thuộc tính valign, điều này củng cố niềm tin rằng căn chỉnh dọc là cách đúng đắn để giải quyết vấn đề.

Nhưng thuộc tính valign chỉ hoạt động trên các ô của bảng. Và thuộc tính căn chỉnh dọc rất giống với nó. Nó cũng ảnh hưởng đến các ô của bảng và một số thành phần nội tuyến.

Giá trị của thuộc tính căn chỉnh dọc có liên quan đến phần tử nội tuyến gốc.

  • Trong một dòng văn bản, căn chỉnh tương ứng với chiều cao của dòng.
  • Ô trong bảng sử dụng căn chỉnh tương ứng với một giá trị được tính toán bằng thuật toán đặc biệt (thường là chiều cao của hàng).

Nhưng thật không may, thuộc tính căn chỉnh dọc không hoạt động trên các phần tử cấp khối (ví dụ: các đoạn văn bên trong phần tử div). Tình huống này có thể khiến người ta nghĩ rằng không có giải pháp nào cho vấn đề căn chỉnh theo chiều dọc.

Nhưng có các phương pháp khác để căn giữa các phần tử khối, việc lựa chọn phương pháp này phụ thuộc vào những gì đang được căn giữa so với vùng chứa bên ngoài.

Phương pháp chiều cao dòng

Phương pháp này hoạt động khi bạn muốn căn giữa một dòng văn bản theo chiều dọc. Tất cả những gì bạn phải làm là đặt chiều cao của dòng lớn hơn cỡ chữ.

Theo mặc định, khoảng trắng sẽ được phân bố đều ở đầu và cuối văn bản. Và dòng sẽ được căn giữa theo chiều dọc. Thông thường chiều cao của dòng được làm bằng chiều cao của phần tử.

HTML:

Văn bản bắt buộc

CSS:

#child ( chiều cao dòng: 200px; )

Phương pháp này hoạt động trên tất cả các trình duyệt, mặc dù nó chỉ có thể được sử dụng cho một dòng. Giá trị 200 px trong ví dụ được chọn tùy ý. Bạn có thể sử dụng bất kỳ giá trị nào lớn hơn kích thước phông chữ văn bản.

Căn giữa hình ảnh bằng chiều cao dòng

Nếu nội dung là hình ảnh thì sao? Phương pháp trên có hiệu quả không? Câu trả lời nằm ở một dòng mã CSS nữa.

HTML:

CSS:

#parent ( chiều cao dòng: 200px; ) #parent img ( căn chỉnh dọc: giữa; )

Giá trị của thuộc tính line-height phải lớn hơn chiều cao của hình ảnh.

Phương pháp bảng CSS

Ở trên đã đề cập rằng thuộc tính căn chỉnh dọc được sử dụng cho các ô của bảng, nơi nó hoạt động rất tốt. Chúng ta có thể hiển thị phần tử của mình dưới dạng ô bảng và sử dụng thuộc tính căn chỉnh dọc trên đó để căn giữa nội dung theo chiều dọc.

Ghi chú: Bảng CSS không giống với bảng HTML.

HTML:

Nội dung

CSS:

#parent (hiển thị: bảng;) #child ( hiển thị: ô bảng; căn dọc: giữa; )

Chúng tôi đặt đầu ra của bảng thành phần tử div cha và xuất phần tử div lồng nhau dưới dạng ô bảng. Bây giờ bạn có thể sử dụng thuộc tính căn chỉnh dọc trên vùng chứa bên trong. Mọi thứ trong đó sẽ được căn giữa theo chiều dọc.

Không giống như phương pháp trên, trong trường hợp này nội dung có thể động vì phần tử div sẽ thay đổi kích thước theo nội dung của nó.

Nhược điểm của phương pháp này là nó không hoạt động trong các phiên bản IE cũ hơn. Bạn phải sử dụng thuộc tính display: inline-block cho vùng chứa lồng nhau.

Định vị tuyệt đối và lề âm

Phương pháp này cũng hoạt động trong tất cả các trình duyệt. Nhưng nó yêu cầu phần tử được căn giữa phải có chiều cao.

Mã ví dụ thực hiện định tâm theo chiều ngang và chiều dọc cùng một lúc:

HTML:

Nội dung

CSS:

#parent (vị trí: tương đối;) #child ( vị trí: tuyệt đối; trên cùng: 50%; bên trái: 50%; chiều cao: 30%; chiều rộng: 50%; lề: -15% 0 0 -25%; )

Đầu tiên, chúng ta đặt loại định vị phần tử. Tiếp theo, chúng tôi đặt thuộc tính top và left của phần tử div lồng nhau thành 50%, tương ứng với tâm của phần tử cha. Nhưng chính giữa là góc trên cùng bên trái của phần tử lồng nhau. Do đó, bạn cần nâng nó lên (một nửa chiều cao) và di chuyển nó sang trái (một nửa chiều rộng), khi đó tâm sẽ trùng với tâm của phần tử gốc. Vì vậy việc biết chiều cao của phần tử trong trường hợp này là cần thiết. Sau đó, chúng ta đặt phần tử có lề trên và lề trái âm tương ứng bằng một nửa chiều cao và chiều rộng.

Phương pháp này không hoạt động trong tất cả các trình duyệt.

Định vị và kéo dài tuyệt đối

Mã ví dụ thực hiện định tâm theo chiều dọc và chiều ngang.

HTML:

Nội dung

CSS:

#parent (vị trí: tương đối;) #child ( vị trí: tuyệt đối; trên cùng: 0; dưới cùng: 0; trái: 0; phải: 0; chiều rộng: 50%; chiều cao: 30%; lề: tự động; )

Ý tưởng đằng sau phương pháp này là kéo dài phần tử lồng nhau đến cả 4 đường viền của phần tử cha bằng cách đặt các thuộc tính trên, dưới, phải và trái về 0.

Đặt lề để tự động tạo trên tất cả các cạnh sẽ đặt các giá trị bằng nhau ở cả 4 cạnh và căn giữa phần tử div lồng nhau của chúng ta trên phần tử gốc của nó.

Thật không may, phương pháp này không hoạt động trong IE7 trở xuống.

Không gian bên trên và bên dưới bằng nhau

Trong phương thức này, phần đệm bằng nhau được đặt rõ ràng ở trên và dưới phần tử cha.

HTML:

Nội dung

CSS:

#parent ( đệm: 5% 0; ) #child ( đệm: 10% 0; )

Mã CSS mẫu đặt phần đệm trên và dưới cho cả hai phần tử. Đối với phần tử lồng nhau, việc đặt phần đệm sẽ giúp căn giữa phần tử đó theo chiều dọc. Và phần đệm của phần tử cha sẽ căn giữa phần tử lồng nhau bên trong nó.

Đơn vị đo lường tương đối được sử dụng để thay đổi kích thước các phần tử một cách linh hoạt. Và đối với các đơn vị đo lường tuyệt đối, bạn sẽ phải thực hiện các phép tính.

Ví dụ: nếu phần tử cha có chiều cao 400px và phần tử lồng nhau là 100px thì cần có khoảng đệm 150px ở trên cùng và dưới cùng.

150 + 150 + 100 = 400

Việc sử dụng % cho phép bạn để lại các phép tính cho trình duyệt.

Phương pháp này hoạt động ở mọi nơi. Nhược điểm là cần tính toán.

Ghi chú: Phương pháp này hoạt động bằng cách đặt phần đệm bên ngoài của một phần tử. Bạn cũng có thể sử dụng lề trong một phần tử. Quyết định sử dụng lề hay phần đệm phải được đưa ra tùy thuộc vào đặc thù của dự án.

div nổi

Phương thức này sử dụng phần tử div trống nổi và giúp kiểm soát vị trí của phần tử lồng nhau trong tài liệu. Lưu ý rằng div nổi được đặt trước phần tử lồng nhau của chúng ta trong mã HTML.

HTML:

Nội dung

CSS:

#parent (chiều cao: 250px;) #floater ( float: trái; chiều cao: 50%; chiều rộng: 100%; lề dưới: -50px; ) #child ( clear: cả hai; chiều cao: 100px; )

Chúng tôi dịch chuyển div trống sang trái hoặc phải và đặt chiều cao của nó thành 50% phần tử gốc của nó. Bằng cách này, nó sẽ lấp đầy nửa trên của phần tử gốc.

Vì div này nổi nên nó bị xóa khỏi luồng tài liệu thông thường và chúng ta cần mở văn bản trên phần tử lồng nhau. Ví dụ này sử dụng clear: cả hai, nhưng nó khá đủ để sử dụng cùng hướng với phần bù của phần tử div trống nổi.

Đường viền trên cùng của phần tử div lồng nhau nằm ngay bên dưới đường viền dưới cùng của phần tử div trống. Chúng ta cần di chuyển phần tử lồng nhau lên một nửa chiều cao của phần tử trống nổi. Để giải quyết vấn đề, hãy sử dụng giá trị thuộc tính lề dưới âm cho phần tử div trống nổi.

Phương pháp này cũng hoạt động trong tất cả các trình duyệt. Tuy nhiên, việc sử dụng nó đòi hỏi phải có thêm một phần tử div trống và kiến ​​thức về chiều cao của phần tử lồng nhau.

Phần kết luận

Tất cả các phương pháp được mô tả đều dễ sử dụng. Khó khăn là không có cái nào phù hợp cho mọi trường hợp. Bạn cần phân tích dự án và chọn dự án phù hợp nhất với yêu cầu.