Flexbox Trong Css
1. Giới thiệu
Flex css là một kiểu dàn trang mà khi sử dụng nó sẽ tự cân đối kích thước của các thành phần để hiển thị trong mọi thiết bị. Điều đó có nghĩa là chúng ta không cần phải canh chỉnh kích thước của các phần tử. Theo cơ chế làm việc của flex thì các phần tử bên trong sẽ tự hiển thị theo một cơ chế được định nghĩa trước.
2. Cấu trúc của flex css
Trong flex css có hai thành phần chính quan trọng là container và item có mối quan hệ được thể hiện theo cấu trúc dưới đây.
Các thành phần trong flex css
- - Container: là thành phần lớn bao quanh các phần tử bên trong, các item bên trong sẽ hiển thị dựa trên thiết lập của container này.
- - Item: là phần tử con của container, bạn có thể thiết lập nó sẽ sử dụng bao nhiêu cột trong một container, hoặc thiết lập thứ tự hiển thị của nó.
- - Main axis: đây là trục chính để điều khiển hướng mà các item sẽ hiển thị. Lưu ý, main axis không phải lúc nào cũng nằm ngang như sơ đồ trên, bạn có thể sử dụng thuộc tính flex-direction để thay đổi hướng của trục và lúc đó các item sẽ hiển thị theo nó.
- - Main-start | main-end: khi thiết lập flexbox, các item nằm trong container hiển thị từ điểm bắt đầu gọi là main-start tới điểm kết thúc gọi là main-end.
- - Main size: kích thước (chiều rộng hoặc chiều cao) của các item, tùy thuộc vào hướng của main axis.
- - Cross axis: cross axis luôn là trục vuông góc của main axis. Hướng của nó phụ thuộc vào hướng của main axis.
- - Cross-start | cross-end: có ý nghĩa tương tự nhưng luôn vuông góc với main start, main end.
- - Cross size: kích thước (chiều rộng hoặc chiều cao) của các item dựa trên trục cross axis, tùy thuộc vào hướng của main axis.
3. Các thuộc tính trong flex css
3.1. Đặc tả bài toán
3.1.1. Khai báo chung
Trước khi chúng ta đi vào khảo xác, chúng ta cần qui ước với nhau rằng:
- - Display: flex;.
- - Flex-direction: row; (đây là trường hợp mặc định khi xem xét về phương canh lề theo phương đứng hay phương ngang. Nếu thay đổi thuộc tính này từ row thành column thì hiệu ứng canh lề sẽ ngược lại theo phương đứng và phương ngang).
3.1.2. Khai báo htm
Ví dụ:
<div class="container">
<div class="box1">box1</div>
<div class="box2">box2</div>
<div class="box3">box3</div>
<div class="box4">box4</div>
<div class="box5">box5</div>
</div>
3.1.3. Khai báo css
Ví dụ:
<style type="text/css">
.container {
border: 2px solid red;
height: 400px;
display: flex;
flex-direction: column;
justify-content: center;
}
.box1 {
height: 70px;
width: 70px;
line-height: 70px;
background-color: yellow;
}
.box2 {
height: 60px;
width: 60px;
line-height: 60px;
background-color: green;
}
.box3 {
height: 50px;
width: 50px;
line-height: 50px;
background-color: blue;
}
.box4 {
height: 40px;
width: 40px;
line-height: 40px;
background-color: grey;
}
.box5 {
height: 30px;
width: 30px;
line-height: 30px;
background-color: pink;
}
</style>
3.2. Flex-direction
Thuộc tính flex- direction quy định cách trình bày chính với các mục linh hoạt trong khung hình theo một trục chính. Các hướng được trình bày theo hàng ngang hoặc hàng dọc.
Flex- direction có thể có 4 giá trị:
- - row : trục chạy từ trái sang phải.
- - row-reverse: trục chạy từ phải sang trái.
- - column: trục chính chạy từ trên xuống dưới.
- - column-reverse: trục chính chạy từ dưới lên trên.
3.3. Align-items
Thuộc tính này qui định các đối tượng con bên trong canh lề theo flex-direction. Nếu flex-direction là:
- - row: thì canh lề theo phương ngang.
- - column: thì canh lề theo phương đứng.
Khi chúng ta ta chọn:
- - align-items: flex-start : thì các đối tượng con sẽ được canh lề ở vị trí bắt đầu.
- - align-items: flex-end: thì các đối tượng con sẽ được canh lề ở vị trí cuối.
- - align-items: center: thì các đối tượng con sẽ được canh lề ở giữa.
Ví dụ:
- - flex-direction: row;
- - align-items: center;
3.4. Justify-content
Thuộc tính này có liên hệ rất gần với thuộc tính align-item. Đây là một cập thuộc tính có tính hoán đổi tính chất cho nhau khi chúng ta thay đổi thuộc tính flex-direction từ row thành column và ngược lại.
Tóm lại: align-item và justify-content là 2 thuộc đính định vị trí theo phương ngang và phương đứng cho các đối tượng con.
Thuộc tính này qui định các đối tượng con bên trong canh lề theo flex-direction. Nếu flex-direction là:
- - row: thì canh lề theo phương đứng.
- - column: thì canh lề theo phương ngang.
Thuộc tính justify-content có các giá trị như:
- - flex-start: đặt các đối tượng con tại vị trí bắt đầu.
- - flex-end: đặt các đối tượng con tại vị trí cuối.
- - center: đặt các đối tượng con tại vị trí giữa.
- - space-between: các đối tượng con sẽ phân đều khoảng cách trong đối tượng cha.
- - space-around: các đối tượng con sẽ phân đều khoảng cách trong đối tượng cha từ đầu đến cuối trong đối tượng cha.
Ví dụ:
- - flex-direction: row;
- - justify-content: center;
3.5. Flex-wrap
Thuộc tính này sẽ qui định hay không cho các đối tượng con bên trong được phép nhảy xuống hàng mới khi cửa sổ trình duyệt nhỏ lại và ngược lại.
- - Nowrap : không cho các đối tượng con xuống hàng xuống hàng.
- - Wrap : các item sẽ bọc trọn trong container.
Ví dụ:
- - width: 200px;
- - display: flex;
- - flex-direction: row;
- - justify-content: center;
- - flex-wrap: wrap;
3.6. Flex-flow
Thuộc tình này là một dạng viết tắt cho hai thuộc tính là flex-direction (giá trị đầu tiên) và flex-wrap (giá trị thứ 2).
Cú pháp:
- flex-flow: <'flex-direction'> || <'flex-wrap'>
Ví dụ:
- - width: 200px;
- - display: flex;
- - flex-flow: row wrap;
- - justify-content: center;
3.7. Flex-grow
Trên thực tế đối tượng bao ngoài là container sẽ co lại, hay giãn ra tương thích với môi trường thay đổi, nếu vậy các đối tượng bên trong cũng phải thay đổi để thích nghi.
Thuộc tính flex-grow sẽ qui định sự co giãn các đối tượng sao cho lấp đầy các khoảng trống của container. Giá trị mặc định của của thuộc tính này với các phần tử là 0.
Ví dụ:
<style type="text/css">
.box3 {
height: 50px;
width: 50px;
line-height: 50px;
background-color: blue;
flex-grow: 1;
}
<style>
Trích dẫn: (http://khonggiankythuat.com)