欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

CSS浮动的超详细介绍

程序员文章站 2022-03-30 09:56:19
为什么需要浮动?有很多的布局效果,标准流没有办法完成,此时就需要利用``浮动``完成布局。因为``浮动可以改变元素标签默认的排列方式``. 什么是浮动?浮动有什么特性?浮动元素会脱离标准流,浮动的元素会一行内显示并且元素顶部对齐浮动布局需要注意什么点,为什么要清除浮动,清除浮动的本质是清除浮动元素造成的影响。清除浮动有哪些方法:额外标签法、 父级添加``after伪元素``、父级添加``双伪元素``父级添加``overflow``属性...

为什么需要浮动

问题一:如何让三个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;,则两个盒子会一起移到左边,第二个盒子紧贴着第一个盒子
    CSS浮动的超详细介绍

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

浮动有什么特性

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

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

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

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

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

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

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

浮动布局注意点

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

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

为什么要清除浮动

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

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

如何清除浮动

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

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

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

清除浮动有哪些方法

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

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

  3. 父级添加after伪元素

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

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

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

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

本文地址:https://blog.csdn.net/wutong_jun/article/details/107130115