Khóa học IT CSS Cơ bản 032_Bố cục Flexbox
Bố cục Flexbox
Trong một thời gian dài, các công cụ đáng tin cậy và tương thích đa trình duyệt duy nhất để tạo bố cục CSS là float và position. Hai công cụ này hoạt động tốt trong hầu hết các trường hợp, nhưng ở một số khía cạnh, chúng có những hạn chế khiến việc hoàn thành nhiệm vụ trở nên khó khăn.
Các yêu cầu bố cục đơn giản sau đây khó hoặc không thể thực hiện một cách thuận tiện và linh hoạt với các công cụ này (float và position):
- Căn giữa theo chiều dọc một khối nội dung bên trong phần tử cha.
- Làm cho tất cả các phần tử con của container chiếm một lượng chiều rộng/chiều cao bằng nhau, bất kể có bao nhiêu chiều rộng/chiều cao khả dụng.
- Làm cho tất cả các cột trong bố cục nhiều cột có cùng chiều cao, ngay cả khi chúng chứa lượng nội dung khác nhau.

CSS Flexbox là một công cụ bố cục mạnh mẽ trong CSS có thể được sử dụng để tạo các bố cục linh hoạt khác nhau. Để thành thạo CSS Flexbox, bạn cần hiểu các khái niệm sau:
- Flex container (hộp chứa flex): Bố cục Flexbox bao gồm các flex container và flex item. Flex container là hộp chứa đặt các flex item vào bố cục flex. Flex container có thể là bất kỳ phần tử nào, nhưng thường sử dụng phần tử
div. - Flex item (mục flex): Flex item là phần tử được đặt trong flex container. Flex item có thể là bất kỳ phần tử nào, nhưng thường sử dụng phần tử
div. - Trục chính (main axis): Trục chính là hướng ngang hoặc dọc của các phần tử trong bố cục flex.
- Trục chéo (cross axis): Trục chéo là hướng dọc hoặc ngang của các phần tử trong bố cục flex.
Thuộc tính Flex Container
Flex container có các thuộc tính sau để điều khiển bố cục flex:
display: Đặt chế độ hiển thị của flex container. Flex container phải được đặt thànhdisplay: flexhoặcdisplay: inline-flexđể sử dụng bố cục flex.flex-direction: Đặt hướng trục chính của bố cục flex. Giá trị có thể làflex-startcăn theo đầu trục chính,flex-endcăn theo cuối trục chính,rowsắp xếp ngang trên trục chính,row-reversesắp xếp ngang ngược trên trục chính,columnsắp xếp dọc trên trục chính,column-reversesắp xếp dọc ngược trên trục chính.flex-wrap: Kiểm soát xem các mục trong flex container có xuống dòng hay không.nowrapgiá trị mặc định, không xuống dòng,wrapxuống dòng,wrap-reversexuống dòng ngược.flex-flow: Viết tắt củaflex-directionvàflex-wrap, hai giá trị tương ứng vớiflex-directionvàflex-wrap.justify-content: Đặt căn chỉnh của các flex item trên trục chính trong flex container. Giá trị có thể làflex-startcăn theo đầu trục chính,flex-endcăn theo cuối trục chính,centercăn giữa trên trục chính,space-betweenphân bố đều trên trục chính (căn theo mép container),space-aroundphân bố đều trên trục chính (khoảng cách giữa các mục bằng nhau), hoặcspace-evenlyphân bố đều trên trục chính (bao gồm khoảng cách hai đầu bằng nhau).align-items: Đặt căn chỉnh của các flex item trên trục chéo trong flex container. Giá trị có thể làflex-startcăn theo đầu trục chéo,flex-endcăn theo cuối trục chéo,centercăn giữa trên trục chéo,stretchgiá trị mặc định, hoặcbaselinecăn theo đường cơ sở văn bản dòng đầu tiên trên trục chéo. Chỉ ảnh hưởng đến các mục con của flex container.align-content: Giống nhưalign-items, đây là thuộc tính để kiểm soát căn chỉnh của các mục con trên trục chéo, chỉ có hiệu lực khi flex container có nhiều đường trục (trong trường hợp nhiều hàng hoặc nhiều cột).
Thuộc tính Flex Item
Flex item có các thuộc tính sau để điều khiển bố cục của flex item trong bố cục flex:
flex-grow: Đặt tỷ lệ mở rộng của flex item trên trục chính. Giá trị có thể là số thực từ 0 đến 1.flex-shrink: Đặt tỷ lệ co lại của flex item trên trục chính. Giá trị có thể là số thực từ 0 đến 1.flex-basis: Đặt chiều rộng hoặc chiều cao mặc định của flex item trên trục chính. Giá trị có thể là giá trị độ dài, giá trị phần trăm hoặcauto.order: Đặt thứ tự của flex item trên trục chính. Giá trị có thể là số nguyên từ 1 đến 65535.
Ví dụ:
/* Kiểu flex container */.flex-container { display: flex; flex-direction: row; /* Hướng trục chính là ngang */ justify-content: space-around; /* Căn chỉnh trên trục chính */ align-items: center; /* Căn chỉnh trên trục chéo */ height: 200px; /* Đặt chiều cao container */ border: 2px solid #333; /* Thêm viền để hiển thị rõ hơn */}/* Kiểu flex item */.flex-item { flex: 1; /* Phân bố đều không gian trục chính */ text-align: center; padding: 20px; background-color: #f2f2f2;}<!-- Flex container --><div class="flex-container"> <!-- Flex item 1 --> <div class="flex-item">Item 1</div> <!-- Flex item 2 --> <div class="flex-item">Item 2</div> <!-- Flex item 3 --> <div class="flex-item">Item 3</div></div>Hiệu ứng:
