Thay vì sử align-self: centerdụng align-items: center.
Không cần phải thay đổi flex-directionhoặ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-selftài sản áp dụng cho các mục flex . Ngoại trừ của bạn likhông phải là một mục linh hoạt bởi vì cha mẹ của nó ul- không - display: flexhoặc không display: inline-flexđược áp dụng.
Do đó, ulkhông phải là một container flex, likhông phải là một mục flex và align-selfkhông có tác dụng.
Tài align-itemssản tương tự align-self, ngoại trừ nó áp dụng cho container flex .
Vì lilà một thùng chứa flex, align-itemscó 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-itemsvà align-selfcông việc ...
Các align-itemstà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: centercó 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-selfmụ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 lilà 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.