CSS sang trái

Chào mừng các bạn đến với một kỹ thuật rất quan trọng trong CSS Layout, mà đã từng làm nhiều người phải “sợ” nó, đó chính là học cách chia cột trên CSS. Có thể nói rằng, website bạn soạn ra bằng văn bản HTML sẽ luôn luôn có một cột duy nhất mà nếu bạn muốn làm một website có hai hoặc nhiều cột thì chắc chắn phải dùng đến CSS.




Chia cột trong CSS là thế nào?

Việc chia cột trong CSS là việc bạn thiết lập những phần tử con trong một phần tử mẹ nằm trên cùng một hàng. Ví dụ, mình muốn phần nội dung website của mình có hai cột thì mình sẽ tạo ra 3 cái

, một cái
 mình gọi nó là container hoặc phần tử mẹ, hai cái
 còn lại mình gọi là column (cột).

[html]

Nội dung của #post

[/html]

Ở ví dụ trên, mình có phần #content chứa hai cột đó là

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

0 và

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

1. Sở dĩ mình dùng thêm class

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

2 cho #content là vì mình muốn sau này có muốn chia thêm cột cho các phần tử khác trong website thì sẽ có thể tái sử dụng cái class này, đơn giản là thói quen của mình thôi chứ bạn không cần cũng được.

Và bây giờ, nhiệm vụ của chúng ta trong bài này là sẽ làm thế nào để cái

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

0 và

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

1 nằm thẳng hàng với nhau.

Các bước chia cột trong CSS

Khi chia cột trong CSS, bạn nên làm tuần tự đầy đủ các bước sau để chia cột được chính xác:

  1. Các cột phải luôn có một container, tức là phần tử mẹ bao bọc nó.
  2. Thiết lập chiều rộng cho container.
  3. Thiết lập chiều rộng cho hai cột, tổng chiều rộng trong hai cột phải luôn bằng hoặc ít hơn chiều rộng của container.
  4. Nên sử dụng

    /*==cột #post==*/
    #post {
    width: 660px;
    height: 150px;
    background: #e8e8e8;
    }

    6 để tính toán kích thước chính xác.
  5. Sử dụng thuộc tính

    /*==cột #post==*/
    #post {
    width: 660px;
    height: 150px;
    background: #e8e8e8;
    }

    7 với giá trị

    /*==cột #post==*/
    #post {
    width: 660px;
    height: 150px;
    background: #e8e8e8;
    }

    8 và

    /*==cột #post==*/
    #post {
    width: 660px;
    height: 150px;
    background: #e8e8e8;
    }

    9 để đẩy phần tử về sang trái hoặc phải.
  6. Tiến hành clear float.

Cách chia cột trong CSS

Bây giờ mình sẽ tiến hành chia cột dựa theo đoạn HTML mẫu ở trên nhé.

Trước tiên, chúng ta sẽ tiến hành thiết lập chiều rộng cho class

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

2, nên thêm một cái border để tí nữa bạn sẽ hiểu clear float là thế nào:

/*==Thiết lập container==*/

.container {
width: 960px;
border: 1px solid #333;
padding: 10px;
}

Tiếp tục, chúng ta thiết lập chiều rộng của #post và mình sẽ muốn cột #post sẽ chiếm 660px, đồng thời thêm màu sắc cho hai thằng này để dễ nhìn một xíu.

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

Tương tự với

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

1 nhưng ta muốn cột

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

1 chỉ 300px mà thôi.

/*==cột #sidebar==*/
#sidebar {
width: 300px;
height: 150px;
background: #b1b1b1;
}

Giờ ta đã có được như thế này:

CSS sang trái

Okay, bây giờ mình muốn cái

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

0 nó sẽ nằm bên trái của

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

1, nên mình sẽ gắn thêm cho

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

0một thuộc tính

/*==cột #sidebar==*/
#sidebar {
width: 300px;
height: 150px;
background: #b1b1b1;
}

6 với giá trị là

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

8.

float: left;

Đồng thời, mình muốn thằng

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

1 sẽ nhảy qua bên phải nên mình sẽ có thuộc tính

/*==cột #sidebar==*/
#sidebar {
width: 300px;
height: 150px;
background: #b1b1b1;
}

6 cho nó với giá trị là

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

9.

float: right;

Kết quả thật dễ thương, hai em ấy đã nằm trên cùng một hàng.

CSS sang trái

Nhưng bạn có để ý là cái container nó bị co lại bên trên không? Nói đúng hơn là bây giờ thằng #post và #sidebar đã nhảy ra khỏi cái container luôn rồi. Thế làm sao để cho 2 cột này hiển thị bên trong container đây? Bạn sẽ làm gì? Đặt height cho container dài ra thêm hả? Không hề, mà chúng ta sẽ tiến hành clear float.

Clear float là như thế nào?

Khi chúng ta sử dụng thuộc tính float thì nghĩa là sẽ thiết lập cho một phần tử được đẩy sang trái hoặc phải và cho phép các phần tử gần đó có thể hiển thị bao bọc xung quanh nó. Thế nhưng một vấn đề xảy ra là khi bạn cho toàn bộ các phần tử trong một container float hết thì có nghĩa là thằng container cũng sẽ hiển thị bao bọc xung quanh các phần tử được float, thành ra nó mới bị cái lỗi buồn cười như ở trên.

Do vậy khi tiến hành float các phần tử, việc bạn nên làm là phải tạo ra điểm kết thúc cho việc float này, tức là bạn sẽ muốn nó bắt đầu không float ở đâu nữa. Gọi theo thuật ngữ CSS là clear float.

Về clear float thì có rất nhiều cách, tùy theo trường hợp mà chúng ta sẽ sử dụng cách phù hợp.

Cách 1. Sử dụng thẻ div trống

Cách này khá phổ biến từ rất lâu rồi, đó là chúng ta sẽ tạo ra một class riêng cho việc clear float và khai báo thêm một thẻ

 nữa với class này rồi đặt nó bên dưới của cột cuối cùng.

Bây giờ mình sẽ viết một đoạn CSS cho class tên là

float: left;
2 như sau:

.clear { clear: both }

Thuộc tính clear này nghĩa là thiết lập không cho phép các phần tử khác float xuống nó, nó có các giá trị là

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

float: left;
5 và
float: left;
6. Và bạn chỉ nên dùng giá trị both thôi để clear cả 2 bên.

Bây giờ, mình sẽ khai báo một thẻ

 với class là clear và đặt nó ngay bên dưới cái cột

/*==cột #post==*/
#post {
width: 660px;
height: 150px;
background: #e8e8e8;
}

1 (cột cuối cùng của hàng).

[html]

Nội dung của #post


[/html]

Kết quả:

CSS sang trái

Cách 2. Sử dụng overflow

Cách này thì gọn lẹ hơn, không cần sửa HTML mà chỉ cần viết thêm

float: left;
9 cho container là được.

Kết quả y hệt ở trên.

[codepen id=”EaBOgM”]

Lời kết

Nếu bạn đọc tới đây thì có thể sẽ rất vui vì mình biết là có rất nhiều bạn có nhu cầu chia cột cho website mà không biết làm thế nào, đó chính là sử dụng các thuộc tính float mình đã đề cập ở trên và nhớ là clear float cho mỗi container.