关于浮动float

Posted by 松一老贼 on September 6, 2021
对其他元素排版的影响

一个元素浮动时,其他非浮动元素的内容会“环绕”该浮动元素。

内容:指css盒模型中的content,width-height部分,不含内外边距和边框

环绕:左浮动,后边的内容出现在右边;右浮动,后边的内容出现的左边

原则:
  1. 浮动元素会生成一个块级框,无论这个元素本身是否为块级元素
  2. 浮动元素不能超出包含块的左右边界
  3. 同一个行的浮动元素不会叠加导致重复
  4. 浮动元素的顶端不能比其父元素的内顶端更高
  5. 浮动元素的顶端不能比之前所有浮动元素或块级元素的顶端更高
  6. 浮动元素在满足前边约束的情况下,会浮动的尽量高(顶端对齐)
一些注意点:
  1. 从规则还可以看出,浮动规则只处理了和其父元素的左、右和上边界,没有涉及下边界,所以浮动元素是可以超出其父元素的下边界的。
  2. 虽然规则上浮动元素不能超出左右上边界,但是可以通过设置负的margin超出边界,但这可能破坏后边内容对浮动元素的环绕,即有可能覆盖原有的内容,所以并不建议使用负的margin值
  3. 如果浮动元素的宽度大于父元素的宽度,也会让浮动元素超出父元素的左右边界。
当上述2,3条发生后,被覆盖内容(不是正常环绕的内容)怎么显示?css2.1规定如下:
  • 行内元素与一个浮动元素重叠时,其边框、背景和内容都在该浮动元素之上显示
  • 块级元素与一个浮动元素重叠时,其边框和背景在该浮动元素之下显示,而内容在浮动元素之上显示
清除浮动

clear: left/right/both;

比较通用的解决方案是在父元素后添加after伪元素块:

.clearfix::after {
    content: '';
    display: block;
    clear: both;
    height: 0;
    visibility: hidden;
  }
  .clearfix {
    /* 触发IEhasLayout */
    zoom: 1;
  }