Cascading Style Sheets

Thuộc tính float

Thuộc tính float được sử dụng để thay đổi vị trí của phần tử trong luồng dàn trang, dàn phần tử thông thường (luồng dàn phần tử trong browser khi không dùng CSS hay CSS nhận các giá trị mặc định). Thuộc tính này sẽ đẩy phần tử trôi về trái hoặc phải của phẩn tử chứa.

Cú pháp:

float: left | right | none | inherit;
  • left: phần tử được trôi về phía bên trái. Luồng nội dung thông thường sẽ giữ ở bên phải, bắt đầu ở phần đỉnh của phần tử. Luồng nội dung xung quanh box thay đổi tùy thuộc vào giá trị của thuộc tính clear .
  • left: phần tử được trôi về phía bên phải
  • none: phần tử không bị đẩy về phía nào, vị trí của nó theo luồng dựng thông thường.
  • inherit: giá trị float kế thừa từ phần tử cha.
<style>
    .imgright {
        float: right;
        background: #000000BF;
        width: 150px !important;
        height: auto;
        margin: 10px;
    }
</style>

<p>
    Đoạn văn này có một hình ảnh:
    <img src="https://xuanthulab.net/public/img/logo.png" class="imgright" />
    có thể thiết lập nó trôi về bên phải với <strong>float: right;</strong>, 
    bên trái với <strong>float: left;</strong>
    hay được sắp xếp theo luồng mặc định với <strong>float: none;</strong>.
    Thuộc tính float thiết lập trôi phần tử theo phương ngang về trái hoặc phải chứ không
    thể thiết lập trôi theo phương đứng lên trên, xuống dưới.
    Nếu có một vài phần tử cùng trôi theo nhau, nó sẽ nối đuôi nhau 
    (về trái hoặc về phải) nếu đủ chỗ để hiện thị phần tử.
</p>
Chọn để kiểm tra float:
right left none

Đoạn văn này có một hình ảnh, có thể thiết lập nó trôi về bên phải với float: right;, bên trái với float: left; hay được sắp xếp theo luồng mặc định với float: none;. Thuộc tính float thiết lập trôi phần tử theo phương ngang về trái hoặc phải chứ không thể thiết lập trôi theo phương đứng lên trên, xuống dưới. Nếu có một vài phần tử cùng trôi theo nhau, nó sẽ nối đuôi nhau (về trái hoặc về phải) nếu đủ chỗ để hiện thị phần tử.

Ảnh hưởng float đến chiều cao phần tử chứa

Khi một phần tử là float (right hoặc left), thì chiều cao phần tử chứa nó thu gọn sao cho vừa các nội dung còn lại (không float), chiều cao phần tử float không tác động gì trong tính toán chiều cao phần tử chứa. Như trường hợp phần tử chứa chỉ chứa bên trong nó các phần tủ float thì chiều cao của nó là không.

<div style="border: 1px dotted black;">
    <div style="margin: 5px; width: 100px; height: 100px; background: hotpink; float: left;">
        float: left;
    </div>
    <div style="margin: 5px; width: 100px; height: 50px; background: hotpink; float: right;">
        float: right;
    </div>
    Đây là nội dung trong phần tử cha
</div>
float: left;
float: right;
Đây là nội dung trong phần tử cha

Kỹ thuật với clear để loại bỏ ảnh hưởng float đến chiều cao

Tính chất này đôi khi gây ra những hiệu ứng phụ không mong muốn, phần tử float cao vượt quá kích thước phần tử cha, dẫn đến chiếm chỗ một cách không mong muốn cho các phần tử tiếp theo sau phần tử cha.

Một ví dụ như sau:

<div style="border: 1px dotted black;">
    <div style="margin: 5px; width: 100px; height: 100px; background: hotpink; float: left;">
        float: left;
    </div>
    Đây là nội dung trong phần tử chứa thứ nhất
</div>
<div style="border: 1px dotted red;">
    <div style="margin: 5px; width: 100px; height: 100px; background: hotpink; float: left;">
        float: left;
    </div>
    Đây là nội dung trong phần tử chứa thứ hai
</div>
float: left;
Đây là nội dung trong phần tử chứa thứ nhất
float: left;
Đây là nội dung trong phần tử chứa thứ hai

Ví dụ cho thấy phần tử float không tác động đến chiều cao phần tử chứa thứ nhất, chiều cao phần tử chứa thứ nhất không bao bọc hết phần tử float, phần tử float tràn xuống dưới dẫn tới chiếm chỗ phần tử chứa thứ hai, nó làm ảnh hưởng luôn tới luồng trình bày phần tử chứa thứ hai này.

Để khắc phục tình trạng này có thể dùng kỹ thuật xóa bỏ float trong phần tử chứa với thuộc tính clear. Xóa bỏ ảnh hưởng float sau phần tử float và trước khi kết thúc phần tử chứa.

Cách hay dùng đó là thêm một phần tử block <div> có css clear: both; vào cuối của phần tử chứa, phần tử đó dạng

<div style="clear:both;"></div>

Mọi người cũng hay tạo ra một class css có tên clearfix để áp dụng cho thuận tiện:

.clearfix {
    clear: both;
}

Ví dụ trên viết lại:

<style>
    .clearfix {
        clear: both;
    }
</style>

<div style="border: 1px dotted black;">
    <div style="margin: 5px; width: 100px; height: 100px; background: hotpink; float: left;">
        float: left;
    </div>
    Đây là nội dung trong phần tử chứa thứ nhất.
    <div class="clearfix"></div>
</div>
<div style="border: 1px dotted red;">
    <div style="margin: 5px; width: 100px; height: 100px; background: hotpink; float: left;">
        float: left;
    </div>
    Đây là nội dung trong phần tử chứa thứ hai
</div>
float: left;
Đây là nội dung trong phần tử chứa thứ nhất.
float: left;
Đây là nội dung trong phần tử chứa thứ hai

Phần tử chứa thứ nhất đã có chiều cao bao bọc hết phần tử float.

Kỹ thuật với :after để loại bỏ ảnh hưởng float đến chiều cao

Kỹ thuật này là đưa thuộc tính clear vào chính thành phần của phần tử chứa, đó là pseudo :after, lúc đó bạn không phải chèn thêm phần tử vào phần tử chứa, mà bản thân phần tử chứa sẽ tự sinh ra ở cuối thành phần :after có thuộc tính clear. Ví dụ, class có tên clearafter

.clearafter:after {
    content: ".";
    visibility: hidden;
    display: block;
    height: 0;
    clear: both;
}

Ví dụ trên có thể viết:

<style>
    .clearafter:after {
        content: ".";
        visibility: hidden;
        display: block;
        height: 0;
        clear: both;
    }
</style>

<div style="border: 1px dotted black;"; class="clearafter">
    <div style="margin: 5px; width: 100px; height: 100px; background: hotpink; float: left;">
        float: left;
    </div>
    Đây là nội dung trong phần tử chứa thứ nhất.
</div>
<div style="border: 1px dotted red;" class="clearafter">
    <div style="margin: 5px; width: 100px; height: 100px; background: hotpink; float: left;">
        float: left;
    </div>
    Đây là nội dung trong phần tử chứa thứ hai
</div>

Kết quả:

float: left;
Đây là nội dung trong phần tử chứa thứ nhất.
float: left;
Đây là nội dung trong phần tử chứa thứ hai

Bố cục với float

Thuộc tính float hữu ích để bố cụ dàn trang HTML. Hãy bắt đầu bằng cách tạo ra một khu vực chia làm hai cột, cột thứ nhất chiếm 40% cột thứ 2 là 60% phần tử chứa.

<style>
    .layout1-container {
        background: #ff5722;
        border: 1px dotted red;
        padding: 5px;
    }
    .layout1-container:after {
        content: ".";
        visibility: hidden;
        display: block;
        height: 0;
        clear: both;
    }
    .layout1-col1 {
        box-sizing: border-box;
        float: left;
        background: #ffc107;
        width: 40%;
        padding: 5px;
    }
    .layout1-col2 {
        box-sizing: border-box;
        float: left;
        background: #00bcd4;
        width: 60%;
        padding: 5px;
    }

</style>

<div class="layout1-container">
    <div class="layout1-col1">
        <p>Khối HTML1</p>
        <p>Nội dung ... </p>
        <p>Nội dung ... </p>
    </div>
    <div class="layout1-col2">
        Khối HTML2
        <p>Nội dung ... </p>
    </div>
</div>

Kết quả:

Khối HTML1

Nội dung ...

Nội dung ...

Khối HTML2

Nội dung ...


Đăng ký nhận bài viết mới