Thay vì sử align-self: center
dụng align-items: center
.
Không cần phải thay đổi flex-direction
hoặc sử dụng text-align
.
Đây là mã của bạn, với một điều chỉnh, để làm cho tất cả hoạt động:
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
/* align-self: center; <---- REMOVE */
align-items: center; /* <---- NEW */
background: silver;
width: 100%;
height: 20%;
}
Các align-self
tài sản áp dụng cho các mục flex . Ngoại trừ của bạn li
không phải là một mục linh hoạt bởi vì cha mẹ của nó ul
- không - display: flex
hoặc không display: inline-flex
được áp dụng.
Do đó, ul
không phải là một container flex, li
không phải là một mục flex và align-self
không có tác dụng.
Tài align-items
sản tương tự align-self
, ngoại trừ nó áp dụng cho container flex .
Vì li
là một thùng chứa flex, align-items
có thể được sử dụng để tập trung theo chiều dọc các phần tử con.
* {
padding: 0;
margin: 0;
}
html, body {
height: 100%;
}
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
/* align-self: center; */
align-items: center;
background: silver;
width: 100%;
height: 20%;
}
<ul>
<li>This is the text</li>
</ul>
bản demo
Về mặt kỹ thuật, đây là cách thức align-items
và align-self
công việc ...
Các align-items
tài sản (trên thùng) đặt giá trị mặc định của align-self
(vào các mục). Do đó, align-items: center
có nghĩa là tất cả các mục flex sẽ được đặt thành align-self: center
.
Nhưng bạn có thể ghi đè mặc định này bằng cách điều chỉnh các align-self
mục riêng lẻ.
Ví dụ: bạn có thể muốn các cột có chiều cao bằng nhau, vì vậy bộ chứa được đặt thành align-items: stretch
. Tuy nhiên, một mục phải được ghim lên trên cùng, vì vậy nó được đặt thành align-self: flex-start
.
thí dụ
Làm thế nào là văn bản một mục flex?
Một số người có thể tự hỏi làm thế nào một dòng văn bản ...
<li>This is the text</li>
là một yếu tố con của li
.
Lý do là văn bản không được bao bọc rõ ràng bởi một yếu tố cấp độ nội tuyến được gói bằng thuật toán bởi một hộp nội tuyến. Điều này làm cho nó trở thành một yếu tố nội tuyến ẩn danh và con của cha mẹ.
Từ thông số CSS:
9.2.2.1 Hộp nội tuyến ẩn danh
Bất kỳ văn bản nào được chứa trực tiếp bên trong một phần tử khối chứa phải được coi là một phần tử nội tuyến ẩn danh.
Đặc tả flexbox cung cấp cho hành vi tương tự.
4. Vật phẩm linh hoạt
Mỗi dòng con của một container flex trở thành một mục flex và mỗi dòng văn bản liền kề được chứa trực tiếp bên trong một container flex được bọc trong một mục flex ẩn danh.
Do đó, văn bản trong li
là một mục flex.
align-items: baseline
. Tốt cho các độ cao khác nhau đến từ các ký tự unicode khác nhau, v.v.