CSS浮动,BFC,清除浮动,高度塌陷以及最终解决方法

Posted 开到荼蘼223's

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSS浮动,BFC,清除浮动,高度塌陷以及最终解决方法相关的知识,希望对你有一定的参考价值。

浮动

在我们进行静态页面布局时往往会用到浮动这一功能,通过浮动可以使一个元素向其父元素的左侧或者右侧移动,使用float 属性来设置来元素的浮动。
可选值:

  • none 不浮动
  • left 向左浮动
  • right 向右浮动

让box1浮动

        .box1{
            width:200px;
            height:200px;
            background-color: orange;
            float:left;
        }

浮动的特点

  • 浮动的元素会完全脱离文档流
  • 元素浮动以后元素会向父元素的左侧或右侧移动
  • 浮动元素默认不会从父元素中移出
  • 浮动元素向左向右移动时 不会超过它前边的其他浮动元素
  • 如果浮动元素上边是一个没有浮动的块元素,则浮动元素无法上移
  • 浮动元素不会超过它上边浮动的兄弟元素,最多和他一样高

注意:元素设置浮动以后,水平布局的等式不需要强制成立。
元素设置浮动以后,会完全从文档流脱离,不再占用文档流的位置,所以元素下边的还在文档流中的元素会自动向上移动。并且浮动元素不会盖住文字,文字会自动环绕在浮动元素的周围,所以我们可以利用浮动来设置文字环绕图片的效果。

总结: 浮动目前来讲主要作用是让页面中的元素可以水平排列,通过浮动可以制作一些水平方向的布局。

元素浮动后的特点

元素设置浮动会从文档流脱离,脱离文档流后元素的一些特点也会发生变化,脱离文档流的特点:

  • 块元素
    块元素不在独占一行,脱离文档流后,块元素的宽度和高度默认都被内容撑开。
  • 行内元素
    行内元素脱离文档流后会变成行内块元素,特点和脱离文档流后的块元素一样。脱离文档流后,不需要在区分块元素和行内元素了。

高度塌陷问题

在浮动的布局中,父元素的高度是默认被子元素撑开的,当子元素浮动后会完全脱离文档流,子元素从文档流中脱离, 将会无法撑起父元素的高度,导致父元素的高度丢失,父元素高度丢失后,其下的元素会自动上移,导致页面的布局混乱,所以高度塌陷是浮动布局中比较常见的一个问题,解决高度塌陷可以通过为元素设置BFC来解决。

<style>

        .outer{
            border:10px solid pink;
        }
        .inner{
            width:100px;
            height: 100px;
            background-color: aqua;
            float: left;           
        }
    </style>
</head>
<body>
    <div class="outer">
        <div class="inner"></div>
    </div>
</body>

子元素浮动后脱离文档流导致父元素高度塌陷
在这里插入图片描述

BFC

BFC(Block Formatting Context)块级格式化环境,BFC是CSS中一个隐藏的属性,可以为一个元素开启BFC,开启BFC该元素会变成一个独立的布局区域。

元素开启BFC后的特点:

  • 开启BFC的元素不会被浮动元素所覆盖
  • 开启BFC的元素 子元素和父元素外边距不会重叠
  • 开启BFC的元素可以包含浮动的子元素

可以通过一些特殊的方法开启BFC
1.设置元素浮动 (不推荐)
2.将元素设置为行内块元素 (不推荐)
3.将元素的overflow设置为一个非visible的值

常用的方式:为元素设置overflow:hidden,开启其BFC以使其可以包含浮动的元素

给上述父元素开启BFC

	 .outer{
            border:10px pink solid;
            overflow: hidden;
			}

高度塌陷问题解决
在这里插入图片描述

清除浮动

如果我们不希望某个元素因为其他元素浮动的影响改变位置,可以通过clear属性来清除浮动元素对当前元素所产生的影响。

clear属性作用:清除浮动对当前元素的影响

可选值:

  • left:清除左侧浮动元素对当前元素的影响
  • right:清除右侧浮动元素对当前元素的影响
  • both: 清楚两侧中最大影响的那侧

原理:设置清除浮动以后,浏览器会自动为元素添加一个上边的外边距,使其位置不受其他元素的影响。

clearfix

上述中解决高度塌陷用到了BFC,实际上解决高度塌陷的方法有很多种,其中我用的最多是设置clearfix,clearfix这个样式可以同时解决高度塌陷和外边距重叠的问题,当你遇到这些问题可以直接使用clearfix这个类即可。

<style>
		.clearfix::before,
        .clearfix::after{
            content:"";
            display:table;
            clear:both;
        }
        .box1{
        	border: 10px solid pink;
        }
        .box2{
            width:100px;
            height:100px;
            background-color:yellow;
            float:left;
        }
    </style>
</head>
<body>
    <div class="box1 clearfix">
        <div class="box2"></div>
    </div>
</body>

在这里插入图片描述

以上是关于CSS浮动,BFC,清除浮动,高度塌陷以及最终解决方法的主要内容,如果未能解决你的问题,请参考以下文章

解决高度塌陷-CSS

Web前端之高度塌陷与BFC

学习笔记:清除浮动的原理(BFC与hasLayout)

Web前端HTML5&CSS310-高度塌陷与BFC

css高度自适应以及高度塌陷总结

CSS 清除浮动