设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间02 现在时间02 缓存数据 现已加入洗脑好歌曲豪华午餐

现已加入洗脑好歌曲豪华午餐 -- Outside

查看: 1382|回复: 4

css 如何清除浮动的示例代码

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:205
  • 打卡月天数:0
  • 打卡总奖励:2891
  • 最近打卡:2023-08-27 01:44:41
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
398
主题
362
精华
0
金钱
4059
积分
776
注册时间
2022-12-21
最后登录
2025-5-31

发表于 2023-2-11 07:24:25 | 显示全部楼层 |阅读模式

本文概述

本文的框架图如下:

082508usbv7s8g8ac7gnb3.png

一、浮动到底是什么?

W3school中给出的浮动定义为浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。由于浮动框脱离文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。

css浮动

在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的现象。这个现象叫浮动溢出,为了防止这个现象的出现而进行的CSS处理,就叫CSS清除浮动。
 

二、浮动有什么特点?

浮动的特点,可以用八个字总结:脱标、贴边、字围和收缩。

为了更好说明,请看下图:
当框 1 向左浮动时,它脱离文档流(脱标)并且向左移动(贴边),直到它的左边缘碰到包含框的左边缘。因为它不再处于文档流中,所以它不占据空间,实际上覆盖住了框 2,使框 2 从视图中消失。如果框2中有文字,就会围着框1排开(字围)。

如果把所有三个框都向左浮动,那么框 1 向左浮动直到碰到包含框,另外两个框向左浮动直到碰到前一个浮动框。

CSS 浮动实例 - 向左浮动的元素

下面着重讲解下第四个特点--收缩

一个浮动的内联元素(比如span img标签)不需要设置display:block就可以设置宽度。

  1. <style>
  2. div{
  3. float: left;
  4. background-color: greenyellow;
  5. }
  6. </style>
  7. </head>
  8. <body>
  9. <div>
  10. 这是一段文字
  11. </div>
  12. </body>
复制代码

得到以下的效果:

082509gam66ckrrl5mgyhl.png

我们都知道div标签是块级元素,会独占一行,然而上面的例子中将div设置为左浮后,其宽度不再是占满一行,而是收紧为内部元素的宽度,这就是浮动第四个特征的含义。

三、浮动有什么缺点?

先看下面这段代码:

  1. <style>
  2. .parent{
  3. border: solid 5px;
  4. width:300px;
  5. }
  6. .child:nth-child(1){
  7. height: 100px;
  8. width: 100px;
  9. background-color: yellow;
  10. float: left;
  11. }
  12. .child:nth-child(2){
  13. height: 100px;
  14. width: 100px;
  15. background-color: red;
  16. float: left;
  17. }
  18. .child:nth-child(3){
  19. height: 100px;
  20. width: 100px;
  21. background-color: greenyellow;
  22. float: left;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <div class="parent">
  28. <div class="child"></div>
  29. <div class="child"></div>
  30. <div class="child"></div>
  31. </div>
  32. </body>
复制代码

我们想让父容器包裹着三个浮动元素,然而事与愿违,得到却是这样的结果:

父容器高度塌陷

这就是浮动带来副作用----父容器高度塌陷,于是清理浮动就显着至关重要。

四、如何清理浮动?

清除浮动不是不用浮动,清除浮动产生的父容器高度塌陷。

套路1:给浮动元素的父元素添加高度(扩展性不好)

如果一个元素要浮动,那么它的父元素一定要有高度。高度的盒子,才能关住浮动。可以通过直接给父元素设置height,实际应用中我们不大可能给所有的盒子加高度,不仅麻烦,并且不能适应页面的快速变化;另外一种,父容器的高度可以通过内容撑开(比如img图片),实际当中此方法用的比较多。

套路2:clear:both;

在最后一个子元素新添加最后一个冗余元素,然后将其设置clear:both,这样就可以清除浮动。这里强调一点,即在父级元素末尾添加的元素必须是一个块级元素,否则无法撑起父级元素高度。

  1. <div id="wrap">
  2. <div id="inner"></div>
  3. <div style="clear: both;"></div>
  4. </div>
复制代码
  1. #wrap{
  2. border: 1px solid;
  3. }
  4. #inner{
  5. float: left;
  6. width: 200px;
  7. height: 200px;
  8. background: pink;
  9. }
复制代码

套路3:伪元素清除浮动

上面那种办法固然可以清除浮动,但是我们不想在页面中添加这些没有意义的冗余元素,此时如何清除浮动吗?
结合 :after 伪元素和 IEhack ,可以完美兼容当前主流的各大浏览器,这里的 IEhack 指的是触发 hasLayout。

  1. <div id="wrap" class="clearfix">
  2. <div id="inner"></div>
  3. </div>
复制代码
  1. #wrap {
  2. border: 1px solid;
  3. }
  4. #inner {
  5. float: left;
  6. width: 200px;
  7. height: 200px;
  8. background: pink;
  9. }
  10. /*开启haslayout*/
  11. .clearfix {
  12. *zoom: 1;
  13. }
  14. /*ie6 7 不支持伪元素*/
  15. .clearfix:after {
  16. content: '';
  17. display: block;
  18. clear: both;
  19. height:0;
  20. line-height:0;
  21. visibility:hidden;//允许浏览器渲染它,但是不显示出来
  22. }
复制代码

给浮动元素的父容器添加一个clearfix的class,然后给这个class添加一个:after伪元素,实现元素末尾添加一个看不见的块元素来清理浮动。这是通用的清理浮动方案,推荐使用

套路4:给父元素使用overflow:hidden;

这种方案让父容器形成了BFC(块级格式上下文),而BFC可以包含浮动,通常用来解决浮动父元素高度坍塌的问题。

BFC的触发方式

我们可以给父元素添加以下属性来触发BFC:

  • float 为 left | right
  • overflow 为 hidden | auto | scorll
  • display 为 table-cell | table-caption | inline-block
  • position 为 absolute | fixed

这里可以给父元素设置overflow:auto,但是为了兼容IE最好使用overflow:hidden。

但这种办法有个缺陷:如果有内容出了盒子,用这种方法就会把多的部分裁切掉,所以这时候不能使用。

BFC的主要特征:

  • BFC容器是一个隔离的容器,和其他元素互不干扰;所以我们可以用触发两个元素的BFC来解决垂直边距折叠问题。
  • BFC不会重叠浮动元素
  • BFC可以包含浮动,这可以清除浮动。套路5:br标签清浮动

br标签存在一个属性:clear。这个属性就是能够清除浮动的利器,在br标签中设置属性clear,并赋值all。即能清除掉浮动。

  1. <div id="wrap">
  2. <div id="inner"></div>
  3. <br clear="all" />
  4. </div>
复制代码
  1. #wrap {
  2. border: 1px solid;
  3. }
  4. #inner {
  5. float: left;
  6. width: 200px;
  7. height: 200px;
  8. background: pink;
  9. }
复制代码

如果觉得文章对你有些许帮助,欢迎在我的GitHub博客点赞和关注,感激不尽!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持晓枫资讯。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
17
积分
14
注册时间
2022-12-30
最后登录
2022-12-30

发表于 2023-3-20 14:50:30 | 显示全部楼层
感谢分享~~~~感谢分享~~~~
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
11
积分
2
注册时间
2023-11-3
最后登录
2023-11-3

发表于 2024-8-24 17:14:14 | 显示全部楼层
感谢楼主,顶。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:10
  • 最近打卡:2024-11-21 15:16:27
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
23
积分
6
注册时间
2023-11-3
最后登录
2024-11-21

发表于 2024-10-23 12:55:58 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
18
积分
16
注册时间
2022-12-29
最后登录
2022-12-29

发表于 5 天前 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼
4楼
5楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表