浮动布局与清除浮动

前言

浮动布局是CSS中用于创建多列和文本环绕效果的技术。通过设置元素为左浮或右浮,可实现并排显示和内容环绕,适用于多栏布局和图片嵌入文本。虽有局限性,如父元素高度塌陷问题,但结合清除浮动技巧,仍为网页设计提供灵活性和高效性能。

浮动布局的效果

1.实现文字环绕效果

不设置float标签的情况下:

加上float标签后

2. 会导致一个元素脱离文档流

我们检查页面元素可以看到p标签和image标签重叠了,标签重叠就说明某个标签脱离了文档流。

注意,float只有leftright,没有top

3.可以让块级元素水平排列

li标签是块级元素,所以它们在页面上的显示不会在同一行

加入float标签后:

三个li去到了同一行,而且我们查看元素可以发现,ul是没有高度的,因为ul里的子标签全部都浮动了,没有元素去撑开ul,所以高度为0

代码:

html 复制代码
<style>
    li {
      list-style: none;
      font-size: 20px;
    }
    .item{
      width: 200px;
      height: 50px;
      float: left;
    }
    .item:first-child{
      background-color: rgb(149, 74, 74);
    }
    .item:nth-child(2){
      background-color: rgb(71, 71, 139);
    }
    .item:last-child{
      background-color: rgb(73, 148, 73);
    }
  </style>
</head>
<body>
  <ul>
    <li class="item">1</li>
    <li class="item">2</li>
    <li class="item">3</li>
  </ul>
</body>

4.浮动元素可以用 marign, 但是不能使用 margin: 0 auto;

margin: 0 auto;与浮动元素的冲突

  1. 浮动元素的特性 :浮动元素会脱离正常的文档流,允许其他内容环绕它。float属性决定了元素应该向左或向右对齐,而不是居中。

  2. margin: 0 auto;的作用 :这个CSS属性是用于在左右两边分配相等的外边距,从而实现水平居中。但是,当元素浮动时,margin: 0 auto;的效果会被忽略,因为它试图在浮动元素上进行水平居中操作,而这与浮动元素的布局逻辑不符。

示例

Html 复制代码
<div class="floated">
  浮动元素
</div>
Css 复制代码
floated {
float: left;
width: 200px;
height: 200px;
background-color: lightblue;
margin: 0 auto;
}

在这种情况下,margin: 0 auto;不会使.floated元素居中。相反,由于float: left;的存在,元素会向左浮动,并且margin: 0 auto;中的auto值不会被解析为水平居中的指令,而是被视为默认值(即0),因此margin实际上等同于margin: 0 0;

清除浮动

清除浮动并不是把浮动清除掉,而是解决一些元素在浮动中受到的影响。

以下是几种常用的清除浮动的方法:

  1. 设置父元素高度
  2. 在父元素结束之前添加一个空元素,并设置 clear: both;
  3. 借助伪元素 ::after 清除浮动
  4. 把父容器设置成 BFC 容器

接下来进行逐一介绍:

1. 设置父元素高度

最简单粗暴的办法就是直接设置父元素宽度:

css 复制代码
   ul{
      height: 50px;//已知li的高度都是50px
    }

这种方法并不是真正的"清除浮动",而是通过给父元素设置一个明确的高度来避免高度塌陷。然而,这种方法不够灵活,因为需要预先知道或计算出确切的高度值。

2. 在父元素结束之前添加一个空元素,并设置 clear: both;

这种方法涉及在浮动元素之后插入一个额外的元素,并设置其clear属性为both。这样可以阻止后续元素继续环绕浮动元素,从而间接"清除"浮动的影响。

css 复制代码
    .clear{
      clear: both;
    }
html 复制代码
<body>
  <ul>
    <li class="item">1</li>
    <li class="item">2</li>
    <li class="item">3</li>
    <div class="clear"></div>
  </ul>

  <div class="title">这是标题</div>

</body>

3. 借助伪元素 ::after 清除浮动

这是最常用的方法之一,通过在父元素后添加一个伪元素::after并设置clear: both;display: block; content: "";以及clear: both;来清除浮动。通常还需要将父元素设置为相对定位(position: relative;),以便伪元素能正确工作。

css 复制代码
  ul::after{
      content: '';
      clear: both;
      display: block;
    }

4. 把父容器设置成 BFC 容器

BFC是CSS中的一个概念,用于描述块级元素如何在其内部进行布局。将一个元素设置为BFC容器可以自动清除其内部的浮动。这可以通过overflow属性设置为autohiddenscroll,或者通过display属性设置为flexgrid来实现。

css 复制代码
    ul{
      overflow: auto;
    }

结语

以上就是关于浮动和清除浮动的介绍,希望本篇文章对你有所帮助,感谢阅读!

相关推荐
南囝coding2 小时前
2025年CSS新特性大盘点
前端·css
颜渊呐4 小时前
Vue3 + Less 实现动态圆角 TabBar:从代码到优化实践
前端·css
yby15414 小时前
【人类写的】anki卡片制作入门
css
卸任5 小时前
解密Flex布局:为什么flex:1仍会导致内容溢出
前端·css·flexbox
Jing_Rainbow8 小时前
【前端三剑客-9 /Lesson17(2025-11-01)】CSS 盒子模型详解:从标准盒模型到怪异(IE)盒模型📦
前端·css·前端框架
程序员小寒1 天前
前端高频面试题之CSS篇(一)
前端·css·面试·css3
fruge1 天前
低版本浏览器兼容方案:IE11 适配 ES6 语法与 CSS 新特性
前端·css·es6
han_2 天前
前端高频面试题之CSS篇(一)
前端·css·面试
不会玩电脑的Xin.2 天前
HTML + CSS
前端·css·html
悟能不能悟2 天前
<style scoped>vue中怎么引用css文件
css·vue.js