Float và Clear là hai thuộc tính trong CSS dùng để kiểm soát cách các phần tử hiển thị và sắp xếp trên trang web. Mặc dù với sự ra đời của Flexbox và Grid, việc sử dụng float đã giảm dần, nhưng nó vẫn là công cụ hữu ích trong một số trường hợp nhất định, đặc biệt là khi làm việc với các bố cục truyền thống.

Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về float và clear, cách chúng hoạt động, và các ví dụ minh họa để giúp bạn nắm vững hai khái niệm này.

1. CSS Float là gì?

Thuộc tính float trong CSS được sử dụng để đẩy phần tử sang bên trái hoặc bên phải của vùng chứa nó, khiến các phần tử khác bao quanh phần tử đã float. Khi một phần tử được "float", nó sẽ rời khỏi dòng chảy tài liệu thông thường và các phần tử khác sẽ trôi xung quanh nó.

Cú pháp:

css
element {
    float: left | right | none | inherit;
}

Các giá trị của float:

  1. left: Phần tử sẽ được đẩy sang bên trái của vùng chứa.
  2. right: Phần tử sẽ được đẩy sang bên phải của vùng chứa.
  3. none: Mặc định, phần tử không được float, giữ nguyên vị trí trong dòng chảy tài liệu.
  4. inherit: Phần tử sẽ kế thừa giá trị float từ phần tử cha của nó.

Ví dụ về float:

css
img {
    float: left;
    margin: 10px;
}

Trong ví dụ này, hình ảnh sẽ được đẩy sang trái và văn bản sẽ bao quanh nó ở bên phải.

2. Cách hoạt động của CSS Float

Khi một phần tử được float, nó sẽ rời khỏi dòng chảy tài liệu thông thường và được đặt sang bên trái hoặc bên phải của vùng chứa, phần tử kế tiếp trong dòng chảy (không được float) sẽ bao quanh phần tử đó nếu có không gian.

Ví dụ:

html
<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ví dụ về CSS Float - codetuthub.com</title>
    <style>
        img {
            float: left;
            margin: 10px;
        }

        p {
            font-size: 16px;
        }
    </style>
</head>
<body>
    <img src="https://via.placeholder.com/150" alt="placeholder">
    <p>
        Đây là đoạn văn bản bao quanh hình ảnh được float sang trái. Nội dung này sẽ tiếp tục chạy xung quanh hình ảnh cho đến khi không còn chỗ trống.
    </p>
</body>
</html>

Trong ví dụ này, hình ảnh sẽ được đẩy sang trái và đoạn văn bản sẽ bao quanh nó ở bên phải.

3. Vấn đề khi sử dụng float

Một vấn đề phổ biến khi sử dụng float là các phần tử chứa (container) không tự động điều chỉnh chiều cao để bao gồm các phần tử con đã float, dẫn đến hiện tượng collapsed container. Điều này xảy ra vì phần tử float không nằm trong dòng chảy tài liệu thông thường, do đó phần tử chứa không nhận ra nó.

Ví dụ về vấn đề collapsed container:

html
index.html
<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Collapsed Container - codetuthub.com</title>
    <style>
        .container {
            background-color: lightblue;
        }

        .box {
            float: left;
            width: 100px;
            height: 100px;
            background-color: lightcoral;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box"></div>
    </div>
</body>
</html>

Trong ví dụ này, container không bao quanh được box vì box đã float và không còn trong dòng chảy tài liệu. Do đó, container không có chiều cao hiển thị.

4. CSS Clear là gì?

Thuộc tính clear trong CSS được sử dụng để kiểm soát hành vi của phần tử sau các phần tử được float. Khi sử dụng clear, phần tử đó sẽ tránh việc nằm bên cạnh (bao quanh) các phần tử float và bắt đầu ở dưới các phần tử đã float.

Cú pháp:

css
element {
    clear: left | right | both | none;
}

Các giá trị của clear:

  1. left: Phần tử sẽ không cho phép các phần tử float sang trái bao quanh nó.
  2. right: Phần tử sẽ không cho phép các phần tử float sang phải bao quanh nó.
  3. both: Phần tử sẽ không cho phép các phần tử float cả sang trái và phải bao quanh nó.
  4. none: Mặc định, không có giá trị clear nào được áp dụng.

Ví dụ về clear:

css
div {
    clear: both;
}

Trong ví dụ này, phần tử div sẽ không bị các phần tử float bên trái hoặc phải bao quanh nó.

5. Sử dụng clear để giải quyết vấn đề collapsed container

Để giải quyết vấn đề collapsed container, bạn có thể sử dụng thuộc tính clear để xóa bỏ float và đảm bảo container bao bọc các phần tử con đã float.

Ví dụ giải quyết vấn đề với clear:

html
index.html
<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Clear Float - codetuthub.com</title>
    <style>
        .container {
            background-color: lightblue;
            overflow: hidden;
        }

        .box {
            float: left;
            width: 100px;
            height: 100px;
            background-color: lightcoral;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box"></div>
    </div>
</body>
</html>

Trong ví dụ này, thuộc tính overflow: hidden đã được thêm vào phần tử container để khắc phục vấn đề collapsed container. Container sẽ bao bọc phần tử con đã float.

6. Phương pháp clearfix

Phương pháp clearfix là một kỹ thuật phổ biến để giải quyết vấn đề khi container không bao gồm được phần tử float. Thay vì dùng overflow: hidden, bạn có thể thêm một đoạn mã CSS để "clear" float một cách rõ ràng.

Ví dụ về clearfix:

css
.clearfix::after {
    content: "";
    display: block;
    clear: both;
}

Ví dụ sử dụng clearfix:

html
index.html
<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Clearfix - codetuthub.com</title>
    <style>
        .container {
            background-color: lightblue;
        }

        .box {
            float: left;
            width: 100px;
            height: 100px;
            background-color: lightcoral;
        }

        .clearfix::after {
            content: "";
            display: block;
            clear: both;
        }
    </style>
</head>
<body>
    <div class="container clearfix">
        <div class="box"></div>
    </div>
</body>
</html>

Trong ví dụ này, phương pháp clearfix được sử dụng để làm cho container bao bọc phần tử box đã float mà không gặp vấn đề về chiều cao.

7. Ví dụ về sử dụng float và clear

Ví dụ: Bố trí ảnh và văn bản với float

html
index.html
<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Float and Clear Example - codetuthub.com</title>
    <style>
        .container {
            width: 600px;
            margin: 0 auto;
        }

        .image {
            float: left;
            width: 200px;
            height: 150px;
            margin-right: 20px;
        }

        .text {
            font-size: 18px;
            line-height: 1.6;
        }

        .clearfix::after {
            content: "";
            display: table;
            clear: both;
        }
    </style>
</head>
<body>
    <div class="container clearfix">
        <img src="https://via.placeholder.com/200x150" class="image" alt="Placeholder Image">
        <div class="text">
            <p>
                Đây là một ví dụ minh họa cách sử dụng thuộc tính float và clear trong CSS. Hình ảnh được float sang bên trái và văn bản sẽ bao quanh hình ảnh này, giúp tạo ra bố cục gọn gàng và dễ đọc. Khi cần, thuộc tính clear có thể được sử dụng để tránh các phần tử tiếp theo bị ảnh hưởng bởi phần tử được float.
            </p>
        </div>
    </div>
</body>
</html>

Trong ví dụ này, hình ảnh được float sang trái và văn bản bao quanh nó. Kỹ thuật clearfix được sử dụng để đảm bảo không có vấn đề gì với việc hiển thị phần tử sau đó.

8. Kết luận

Thuộc tính float và clear trong CSS là những công cụ mạnh mẽ để kiểm soát bố cục của trang web. Float có thể được sử dụng để bố trí các phần tử theo chiều ngang, trong khi clear giúp tránh những vấn đề khi các phần tử float làm ảnh hưởng đến các phần tử khác. Mặc dù các phương pháp hiện đại như Flexbox và Grid đã thay thế phần lớn vai trò của float, nhưng nó vẫn là một công cụ hữu ích trong một số trường hợp nhất định.

Hy vọng qua bài viết này, bạn đã hiểu rõ hơn về cách sử dụng float và clear trong CSS và có thể áp dụng chúng một cách hiệu quả trong các dự án thiết kế web của mình!