- vừa được xem lúc

Hướng dẫn đầy đủ về CSS Flexbox

0 0 26

Người đăng: Dương Nờ Vê

Theo Viblo Asia

CSS flexbox là một one-dimensional(hay còn gọi là 1D) layout pattern, một trong những pattern giúp bạn dễ dàng thiết kế layout một cách linh hoạt và hiệu quả. Phân chia không gian giữa các items và kiểm soát căn chỉnh chúng trong container flex layout(vùng chứa). Với flexbox, chúng ta có thể dễ dàng sắp xếp các items từ trái sang phải, từ trên xuống dưới, đồng thời kiểm soát khoảng cách và thứ tự của các items trong container.

Làm thế nào để nó hoạt động?

Trước khi đi vào tìm hiểu sâu hơn về Flexbox, chúng ta cần nắm qua cấu trúc của Flexbox là như thế nào đã:

Trong flexbox thì chủ yếu có hai thành phần chính là: thùng chứa cha (flex container) và các phần tử con nằm bên trong (flex items).
Ngoài ra chúng ta cũng cần quan tâm tới một số thuộc tính sau:

  • main start, main end, cross start, cross end: Điểu bắt đầu của container theo main axis được gọi là main start, điểm kết thúc của container theo main axis gọi là main end, với cross start và cross cũng tương tự nhưng dựa theo cross axis.
  • main axis: Trục này chính là hướng của các item hiển thị, mặc định thì sẽ chạy từ trái qua phải.
  • cross axis: Trục này vuông góc với main axis, chạy từ trên xuống dưới.
  • main size: Là kích thước của mỗi item dựa theo trục main axis.
  • cross size: Là kích thước của mỗi item dựa theo trục cross axis.

Các thuộc tính của flex container

Dưới đây là một số thuộc tính có thể sử dụng đối với flex container:

  • display
  • flex-direction
  • flex-wrap
  • flex-flow
  • justified-content
  • align-items
  • align-content

Không sử dụng flexbox

<div class="box"> <div class="box-item">1</div> <div class="box-item">2</div> <div class="box-item">3</div>
</div>

Dùng display để áp dụng flexbox

Chúng ta cần phải sử dụng thuộc tính display. Đây là cách mà chúng ta định nghĩa một flex container, và cũng là việc bắt buộc nếu bạn làm việc với flexbox.

<style>
.box { display: flex;
}
</style>
<div class="box"> <div class="box-item">1</div> <div class="box-item">2</div> <div class="box-item">3</div>
</div>

flex-direction

flex-direction dùng để chỉ định hướng hiển thì của các item, việc thay đổi hướng hiển thị flex cũng thể có thể cho phép ta thay đổi vị trí của các flex item.

flex-direction: row

flex-direction: row là giá trị mặc định khi sử dụng flexbox, không thực hiện bất kỳ thay đổi nào, chỉ đặt các item từ trái qua phải theo trục chính.

<style>
.box { display: flex; flex-direction: row;
}
</style>
<div class="box"> <div class="box-item">1</div> <div class="box-item">2</div> <div class="box-item">3</div>
</div>

flex-direction: row-reverse

Giống với tên gọi, flex-direction: row-reverse ngược lại với row, các item sẽ được đặt từ phải qua trái.

<style>
.box { display: flex; flex-direction: row-reverse;
}
</style>
<div class="box"> <div class="box-item">1</div> <div class="box-item">2</div> <div class="box-item">3</div>
</div>

flex-direction: column

Khi chúng ta xét flex-direction: column, lúc này trục chính sẽ đi từ trên xuống dưới vậy nên giờ đây các items sẽ được xếp chồng lên nhau.

<style>
.box { display: flex; flex-direction: column;
}
</style>
<div class="box"> <div class="box-item">1</div> <div class="box-item">2</div> <div class="box-item">3</div>
</div>

flex-direction: column-reverse

Khi đó các items sẽ được xếp chống lên nhau nhưng theo chiều ngược lại. Hay để ý sẽ thấy ở ví dụ trên (1) sẽ ở trên cùng, nhưng khi sử dụng column-reverse (1) sẽ ở dưới cùng.

<style>
.box { display: flex; flex-direction: column-reverse;
}
</style>
<div class="box"> <div class="box-item">1</div> <div class="box-item">2</div> <div class="box-item">3</div>
</div>

flex-wrap

flex-wrap dùng để kiểm soát việc bọc các items nằm gọn trong container. Nếu chúng ta giảm chiều rộng của trình duyệt, chúng ta có thể không nhìn thấy một số item trên cùng một dòng. Thuộc tính flex-wrap có thể giải quyết vấn đề đó:

  • nowrap (mặc định): Không có gì thay đổi
  • wrap: các items sẽ được bọc trọn trong container
  • wrap-reverse
<style>
.box { display: flex; flex-wrap: nowrap;
}
</style>
<div class="box"> <div class="box-item">1</div> <div class="box-item">2</div> <div class="box-item">3</div> <div class="box-item">4</div> <div class="box-item">5</div> <div class="box-item">6</div> <div class="box-item">7</div> <div class="box-item">8</div> <div class="box-item">9</div>
</div>

nowrap


wrap

wrap-reverse

flex-flow

flex-flow là cách viết rút gọn của flex-directionflex-wrap. Trong flex-flow giá trị đầu tiên là flex-direction và thứ 2 là flex-wrap

<style>
.box { display: flex; flex-flow: row-reverse wrap;
}
</style>
<div class="box"> <div class="box-item">1</div> <div class="box-item">2</div> <div class="box-item">3</div> <div class="box-item">4</div> <div class="box-item">5</div> <div class="box-item">6</div> <div class="box-item">7</div> <div class="box-item">8</div> <div class="box-item">9</div>
</div>

justified-content

justified-content dùng để căn chỉnh vị trí của các items so với trục chính(main axis). Có 6 giá trị có thể dùng đối với thuộc tính justified-content:

  • flex-start: sẽ đặt item bắt đầu từ main start (và đây cũng là giá trị mặc định)
  • flex-end:sẽ đặt item bắt đầu từ main end
  • center: sẽ đặt tất cả item ở giữa trục main axis
  • space-between: sẽ chia đều khoảng cách thừa và thêm nó vào giữa các item
  • space-around: sẽ chia khoảng cách ở đầu và cuối. Khoảng cách ở đầu và cuối sẽ bằng 1 nửa khoảng cách ở giữa 2 item với nhau
  • space-evenly: sẽ chia khoảng cách đều khoảng cách giữa các item với item, item và main start, item với main end bằng nhau

<style>
.box { display: flex; justify-content: flex-start;
}
</style>
<div class="box"> <div class="box-item">1</div> <div class="box-item">2</div> <div class="box-item">3</div> <div class="box-item">4</div>
</div>

flex-start


flex-end

center

space-between

space-around

space-evenly

align-items

Thuộc tính align-items dùng để xác định cách mà các flex item được đặt trong container dọc theo chiều cross axis.

  • align-items: stretch: Chiều dài của item sẽ bằng chiều dài của cross axis.
  • align-items: flex-start: Item được đặt ở điểm bắt đầu của cross start(trên cùng bên trái), và kích thước item không bị thay đổi.
  • align-items: flex-end: Item được đặt ở điểm bắt đầu của cross end(dưới cùng bên trái)
  • align-items: center: Item được đặt ở giữa điểm bắt đầu của cross start và điểm bắt đầu của cross end (ở giữa bên trái)
  • align-items: baseline: Item sẽ được đặt dữ theo các ký tự thuộc item đó. Mục đích chính là căn chỉnh dữa liệu dòng văn bản của các item.
<style>
.box { height: 300px; display: flex; align-items: stretch;
}
</style>
<div class="box"> <div class="box-item">1</div> <div class="box-item">2</div> <div class="box-item">3</div> <div class="box-item">4</div>
</div>

align-items: stretch


align-items: flex-start

align-items: flex-end

align-items: center

align-items: baseline

align-content

Tương tự như justify-content chỉ khác một chỗ là thay vì căn theo trục main axis thì align-content căn theo trục cros axis.

  • align-content: stretch
  • align-content: flex-start
  • align-content: flex-end
  • align-content: center
  • align-content: space-between
  • align-content: space-around
<style>
.box { height: 300px; display: flex; flex-wrap: wrap; align-content: stretch;
}
</style>
<div class="box"> <div class="box-item">1</div> <div class="box-item">2</div> <div class="box-item">3</div> <div class="box-item">4</div>
</div>

align-content: stretch


align-content: flex-start

align-content: flex-end

align-content: center

align-content: space-between

align-content: space-around

Tham khảo

https://medium.com/better-programming/a-complete-guide-css-flex-box-24f4a9a1e02

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 500

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 376

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 701

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 335

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 421

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 414