浮动布局与清除浮动

前言

浮动布局是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;
    }

结语

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

相关推荐
iCOD3R3 小时前
Skill - kill-ai-slop 解决“AI 味”样式
前端·css·ai编程
努力成为AK大王11 小时前
CSS 入门完整笔记
前端·css
神明不懂浪漫1 天前
【第四章】CSS(二)——文本外观属性与复合选择器
前端·css·经验分享·笔记
H Journey1 天前
web开发学习:html、css、js
前端·css·html·js
用户059540174461 天前
AI Agent 记忆存储踩坑实录:这个问题让我排查了 3 天,最终用 pytest + Docker 实现秒级回归
前端·css
今日无bug1 天前
Emmet 语法速成指南
前端·css·html
Hello.Reader1 天前
Tailwind CSS v4.3 从入门到实战Vite 安装、响应式布局、暗黑模式与主题配置
前端·css
cxxcode2 天前
CSS Loader 与样式处理链路
前端·css
CappuccinoRose3 天前
CSS、Less、Sass(含 SCSS)、Stylus
前端·css·less·sass·stylus
用户059540174463 天前
把前端内存泄漏排查从2小时压到5分钟,我们把它集成进了CI
前端·css