【笔记】CSS浮动的超详细介绍

    技术2026-02-09  4

    为什么需要浮动

    问题一:如何让三个div盒子放在同一行显示? 虽然转换为行内块元素可以实现在一行显示,但是他们之间会有大的空白缝隙。不知道缝隙大小,影响布局,这个问题又该如何拒绝。

    问题二:如何让两个盒子实现一个左对齐,一个右对齐

    总结: 有很多的布局效果标准流没有办法完成,此时就需要利用浮动完成布局。因为浮动可以改变元素标签默认的排列方式.

    浮动最典型的应用: 可以让多个块级元素一行内排列显示。

    如何添加浮动

    float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。

    语法: 选择器{ float : 属性值; }

    属性值描述none元素不浮动(默认值)left元素向左浮动right元素向右浮动

    案例:

    <style> .first { float: left; width: 100px; height: 100px; background-color: pink; } .second { float: right; width: 100px; height: 100px; background-color: blue; } </style> <body> <div class="first"></div> <div class="second"></div> </body>

    如果两个盒子都是添加左浮动float: left;,则两个盒子会一起移到左边,第二个盒子紧贴着第一个盒子

    如果第一个盒子左浮动float: left;,第二个盒子右浮动float: left;。则会各自贴着浮动框的左边缘和右边缘

    浮动有什么特性

    1. 浮动元素会脱离标准流

    脱离标准普通流的控制(浮)移动到指定位置, (俗称脱标)浮动的盒子不再保留原先的位置 即如果A盒子添加浮动效果,B盒子没有添加浮动。则A浮动起来不占用原来位置,B盒子就会跑到A盒子的位置上去,如图示:

    2. 浮动的元素会一行内显示并且元素顶部对齐

    如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列。

    注意: 浮动的元素是互相贴靠在一起的(不会有缝隙) , 如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐

    3. 浮动的元素会具有行内块元素的特性.

    如果行内元素有了浮动,则不需要转换块级或行内块元素就可以直接给高度和宽度 span{ float: left;/*span 添加浮动之后可以设置宽和高*/ width: 50px; height: 50px; } 如果块级盒子没有设置宽度 ,默认宽度和父级一样宽,但是添加浮动后,它的大小根据内容来决定

    浮动布局注意点

    浮动和标准流的父盒子搭配。 先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置。

    一个元素浮动了,理论上其余的兄弟元素也要浮动 一个盒子里面有多个子盒子,如果其中一个盒子浮动了, 那么其他兄弟元素也应该浮动,以防引起脱标问题。 注意: 浮动的盒子只会影响浮动盒子后面的标准流不会影响前面的标准流

    为什么要清除浮动

    前面讲的浮动元素有一个标准流的父元素,都是有高度的。但是,所有的父盒子都必须有高度吗?

    由于很多情况下父级盒子不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为0时,就会影响下面的标准流盒子。 所以理想中的状态应该是,让子盒子撑开,父盒子有多少子盒子,我父盒子就有多高。
    清除浮动本质
    清除浮动的本质是清除浮动元素造成的影响如果父盒子本身有高度 ,则不需要清除浮动清除浮动之后,父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了

    如何清除浮动

    语法:选择器{ clear: 属性值; }

    属性值描述left清除左侧浮动的影响right清除右侧浮动的影响both同时清除左右两侧浮动的影响

    清除浮动的策略是: 闭合浮动

    清除浮动有哪些方法

    额外标签法也称为隔墙法,是W3C推荐的做法。 额外标签法会在浮动元素末尾添加一个空的标签。 例如<div style=" clear.both" > </div> ,或者其他标签(如<br/>等) 注意: 要求这个新的空标签必须是块级元素

    父级添加overflow属性 可以给父级添加overflow属性,将其属性值设置为hidden、auto或scroll。注意是给父元素添加代码!

    父级添加after伪元素

    . clearfix:after { content : ""; display: block; height: 0; clear: both; visibility: hidden; } . clearfix { /* IE6、7专有*/ *zoom: 1; }

    after伪元素是在我们父盒子后面添加了一个新盒子,这个新盒子可以清除我们的浮动。在实际使用时,可以直接把以代码复制过去,然后哪个父盒子需要清除浮动,就给那个父盒子添加个类名clearfix,如<div class="clearfix"></div>。

    父级添加双伪元素 .clearfix:before,.clearfix:after { content:""; display: table; } .clearfix:after { clear:both; } . clearfix { *zoom:1;

    .clearfix:before, .clearfix:after是给父盒子前后各添加一个新盒子来清除浮动。实际使用时,可以直接把以代码复制过去,然后哪个父盒子需要清除浮动,就给那个父盒子添加个类名clearfix。

    Processed: 0.028, SQL: 9