Quy tắc CSS sau đây làm gì:
.clear { clear: both; }
Và tại sao chúng ta cần sử dụng nó?
Quy tắc CSS sau đây làm gì:
.clear { clear: both; }
Và tại sao chúng ta cần sử dụng nó?
Câu trả lời:
Tôi sẽ không giải thích làm thế nào các phao hoạt động ở đây (chi tiết), vì câu hỏi này thường tập trung vào Tại sao sử dụng clear: both;
HOẶC clear: both;
chính xác làm gì ...
Tôi sẽ giữ câu trả lời này đơn giản, và cho điểm, và sẽ giải thích cho bạn bằng đồ họa tại sao lại clear: both;
bắt buộc hoặc nó làm gì ...
Nói chung, các nhà thiết kế nổi các phần tử, bên trái hoặc bên phải, điều này tạo ra một không gian trống ở phía bên kia cho phép các phần tử khác chiếm không gian còn lại.
Các phần tử được thả nổi khi người thiết kế cần 2 phần tử mức khối cạnh nhau. Ví dụ: chúng tôi muốn thiết kế một trang web cơ bản có bố cục như bên dưới ...
Ví dụ trực tiếp của hình ảnh demo.
Mã cho bản demo
Lưu ý: Bạn có thể phải thêm header
, footer
, aside
, section
(và các yếu tố HTML5 khác) như display: block;
trong stylesheet của bạn cho rõ ràng đề cập rằng các yếu tố là những yếu tố khối cấp.
Tôi có bố cục cơ bản, 1 tiêu đề, 1 thanh bên, 1 khu vực nội dung và 1 chân trang.
Không có dấu phẩy nào header
, tiếp theo là aside
thẻ tôi sẽ sử dụng cho thanh bên trang web của mình, vì vậy tôi sẽ thả phần tử sang trái.
Lưu ý: Theo mặc định, phần tử cấp khối chiếm tài liệu 100% chiều rộng, nhưng khi nổi sang trái hoặc phải, nó sẽ thay đổi kích thước theo nội dung mà nó giữ.
Vì vậy, như bạn lưu ý, phần nổi bên trái div
để không gian bên phải không được sử dụng, điều này sẽ cho phép phần div
sau thay đổi trong phần còn lại.
div
Sẽ kết xuất cái này đến cái khác nếu chúng KHÔNG được thả nổidiv
sẽ dịch chuyển cạnh nhau nếu nổi sang trái hoặc phảiOk, đây là cách các phần tử mức khối hoạt động khi nổi bên trái hoặc bên phải, vậy bây giờ tại sao lại được clear: both;
yêu cầu và tại sao?
Vì vậy, nếu bạn lưu ý trong bản demo bố cục - trong trường hợp bạn quên, đây là ..
Tôi đang sử dụng một lớp được gọi .clear
và nó giữ một thuộc tính được gọi clear
với giá trị là both
. Vì vậy, hãy xem tại sao nó cần both
.
Tôi đã trôi nổi aside
và section
các yếu tố ở bên trái, vì vậy hãy giả sử một kịch bản, nơi chúng ta có một hồ bơi, nơi header
có đất liền aside
và section
đang trôi nổi trong hồ bơi và chân trang lại là vùng đất rắn, đại loại như thế này ..
Vì vậy, nước trong xanh không biết khu vực của các phần tử nổi là gì, chúng có thể lớn hơn bể bơi hoặc nhỏ hơn, do đó, đây là một vấn đề phổ biến gây rắc rối cho 90% người mới bắt đầu CSS: tại sao nền của phần tử container không được kéo dài khi nó giữ các phần tử nổi. Đó là bởi vì phần tử container là một POOL ở đây và POOL không biết có bao nhiêu vật thể nổi, hoặc chiều dài hoặc chiều rộng của các phần tử nổi là gì, vì vậy nó chỉ đơn giản là không kéo dài.
(Tham khảo phần [Clearfix] của câu trả lời này để biết cách làm gọn gàng. Tôi đang sử dụng một div
ví dụ trống có chủ đích cho mục đích giải thích)
Tôi đã cung cấp 3 ví dụ ở trên, thứ nhất là luồng tài liệu bình thường trong đó red
nền sẽ hiển thị như mong đợi vì container không chứa bất kỳ đối tượng nổi nào.
Trong ví dụ thứ hai, khi đối tượng được thả sang trái, phần tử container (POOL) sẽ không biết kích thước của các phần tử nổi và do đó nó sẽ không kéo dài đến chiều cao của phần tử nổi.
Sau khi sử dụng clear: both;
, phần tử container sẽ được kéo dài theo kích thước phần tử nổi của nó.
Một lý do khác clear: both;
được sử dụng là để ngăn phần tử dịch chuyển lên trong không gian còn lại.
Giả sử bạn muốn 2 phần tử cạnh nhau và một phần tử khác bên dưới chúng ... Vì vậy, bạn sẽ thả 2 phần tử sang trái và bạn muốn phần tử bên dưới chúng.
div
Tràn ngập bên trái dẫn đến section
di chuyển vào không gian còn lạidiv
sạch để section
thẻ sẽ hiển thị bên dưới div
s nổi Cuối cùng nhưng không kém phần quan trọng, footer
thẻ sẽ được hiển thị sau các phần tử nổi khi tôi đã sử dụng clear
lớp trước khi khai báo footer
các thẻ của mình , điều này đảm bảo rằng tất cả các phần tử nổi (trái / phải) sẽ bị xóa cho đến thời điểm đó.
Đến với Clearfix có liên quan đến phao. Như đã được @Elky chỉ định , cách chúng tôi xóa các số float này không phải là một cách rõ ràng để làm điều đó vì chúng tôi đang sử dụng một div
phần tử trống không phải là một div
phần tử dành cho. Do đó ở đây có tiền tố.
Hãy nghĩ về nó như một yếu tố ảo sẽ tạo ra một yếu tố trống cho bạn trước khi yếu tố cha mẹ của bạn kết thúc. Điều này sẽ tự xóa phần tử bao bọc của bạn giữ các phần tử nổi. Phần tử này sẽ không tồn tại trong DOM của bạn theo nghĩa đen nhưng sẽ thực hiện công việc.
Để tự xóa bất kỳ phần tử trình bao bọc nào có các phần tử nổi, chúng ta có thể sử dụng
.wrapper_having_floated_elements:after { /* Imaginary class name */
content: "";
clear: both;
display: table;
}
Lưu ý :after
yếu tố giả được tôi sử dụng cho điều đó class
. Điều đó sẽ tạo ra một phần tử ảo cho phần tử trình bao bọc ngay trước khi nó tự đóng. Nếu chúng ta nhìn vào dom bạn có thể thấy nó hiển thị như thế nào trong cây Tài liệu.
Vì vậy, nếu bạn thấy, nó được hiển thị sau khi con nổi div
, trong đó chúng ta xóa các phao không có gì ngoài tương đương với một div
phần tử trống với thuộc clear: both;
tính mà chúng ta cũng đang sử dụng cho điều này. Bây giờ tại sao display: table;
và content
nằm ngoài phạm vi câu trả lời này nhưng bạn có thể tìm hiểu thêm về yếu tố giả ở đây .
Lưu ý rằng điều này cũng sẽ hoạt động trong IE8 vì IE8 hỗ trợ :after
giả .
Hầu hết các nhà phát triển thả nội dung của họ sang trái hoặc phải trên trang của họ, có thể là div giữ logo, thanh bên, nội dung, v.v., các div này được thả sang trái hoặc phải, khiến phần còn lại của không gian không được sử dụng và do đó nếu bạn đặt các thùng chứa khác, nó sẽ trôi nổi trong không gian còn lại, vì vậy để ngăn chặn việc clear: both;
sử dụng, nó sẽ xóa tất cả các phần tử nổi bên trái hoặc bên phải.
------------------ ----------------------------------
div1(Floated Left) Other div takes up the space here
------------------ ----------------------------------
Bây giờ nếu bạn muốn làm cho div khác hiển thị bên dưới div1
, thì bạn sẽ sử dụng clear: both;
nó để đảm bảo bạn xóa tất cả các float, trái hoặc phải
------------------
div1(Floated Left)
------------------
<div style="clear: both;"><!--This <div> acts as a separator--></div>
----------------------------------
Other div renders here now
----------------------------------
display: inline-block
một phần tử, và trên cha mẹ bạn có thể sử dụng text-align: left
, text-align: center
hoặc text-align: right
ví dụ.
Các clear
bất động sản chỉ ra rằng trái, phải hoặc cả hai bên của một phần tử không thể tiếp giáp với các yếu tố đầu nổi trong bối cảnh định dạng cùng một khối. Các phần tử đã xóa được đẩy xuống dưới các phần tử nổi tương ứng. Ví dụ:
clear: none;
Phần tử vẫn liền kề với phần tử nổiclear: left;
Phần tử đẩy bên dưới phần tử nổi bên tráiclear: right;
Phần tử đẩy bên dưới phần tử nổi bên phảiclear: both;
Phần tử được đẩy xuống dưới tất cả các phần tử nổiclear
không ảnh hưởng đến số float bên ngoài bối cảnh định dạng khối hiện tạidisplay: inline-block;
css khỏi kịch bản này? Nó sẽ kéo dài inline-block
phần tử cha thành phần tử anh chị em có lớp float-left
. Điều này làm cho câu lệnh "xóa không ảnh hưởng đến số float bên ngoài ngữ cảnh định dạng khối hiện tại" sai. Ai đó có thể giải thích?
display: inline-block
có nghĩa là nó không còn tạo ra bối cảnh định dạng khối (b) các float / xóa bên trong phần tử đó và float đầu tiên đều trở thành một phần của bối cảnh định dạng khối giống nhau (khung nhìn).
Chỉ cần cố gắng loại bỏ clear:both
tài sản khỏi div
với class
sample
và xem làm thế nào nó trôi nổi divs
.
Câu trả lời của ông Alien là hoàn hảo, nhưng dù sao tôi cũng không khuyên bạn nên sử dụng <div class="clear"></div>
vì đây chỉ là một bản hack khiến cho việc đánh dấu của bạn bị bẩn. Điều này là vô dụng trống div
về cấu trúc xấu và ngữ nghĩa, điều này cũng làm cho mã của bạn không linh hoạt. Trong một số trình duyệt, div này gây ra chiều cao bổ sung và bạn phải thêm height: 0;
cái nào tệ hơn nữa. Nhưng những rắc rối thực sự bắt đầu khi bạn muốn thêm nền hoặc đường viền xung quanh các yếu tố nổi của mình - nó sẽ sụp đổ vì web được thiết kế xấu . Tôi khuyên bạn nên quấn yếu tố nổi vào container trong đó có clearfix quy tắc CSS. Đây cũng là hack, nhưng đẹp, linh hoạt hơn để sử dụng và có thể đọc được cho robot người và SEO.
clearfix
: stackoverflow.com/questions/211383/ Kẻ
Khi bạn muốn một phần tử được đặt ở dưới cùng phần tử khác, bạn sử dụng mã này trong CSS. Nó được sử dụng cho phao.
Nếu bạn thả nổi nội dung, bạn có thể nổi sang trái hoặc phải ... vì vậy trong một bố cục chung, bạn có thể có một điều hướng bên trái, div nội dung và chân trang.
Để đảm bảo chân trang nằm dưới cả hai phao này (nếu bạn đã nổi trái và phải) thì bạn đặt chân trang là clear: both
.
Bằng cách này, nó sẽ ở dưới cả hai phao.
(Nếu bạn chỉ xóa bên trái thì bạn chỉ thực sự cần clear: left;
.)
Đi qua hướng dẫn này:
float
và muốn phần tử tiếp theo bên dưới, không phải ở bên phải hoặc bên trái.