掌控浮动布局,主宰页面之美

浮动有很多的效果

  1. 实现文字环绕效果
  2. 导致一个元素脱离文档流
  3. 可以让块级元素水平排列
  4. 浮动元素可以用 marign, 但是不能使用 margin: 0 auto;

同时也会带来很多不好的效果

  • 如果我想要让文字在图片的旁边应该怎么做?

    这里我们就可以使用浮动float: left;去实现

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    img{
      width: 100px;
      float: left;
    }
  </style>
</head>
<body>
  <div class="box">
    <img src="https://q2.itc.cn/q_70/images03/20240401/f74179c3516c4f0685dd5c817898520b.jpeg" alt="">
    <p>神舟十七号载人飞船预计今天下午返回东风着陆场。央视新闻开启特别节目,带你看航天员返回之旅,实时关注前方最新情况↓,祝一路平安顺利,东风见!致敬追梦的中国航天!神舟十七号载人飞船预计今天下午返回东风着陆场。央视新闻开启特别节目,带你看航天员返回之旅,实时关注前方最新情况↓,祝一路平安顺利,东风见!致敬追梦的中国航天!   ​神舟十七号载人飞船预计今天下午返回东风着陆场。央视新闻开启特别节目,带你看航天员返回之旅,实时关注前方最新情况↓,祝一路平安顺利,东风见!致敬追梦的中国航天!   ​神舟十七号载人飞船预计今天下午返回东风着陆场。央视新闻开启特别节目,带你看航天员返回之旅,实时关注前方最新情况↓,祝一路平安顺利,东风见!致敬追梦的中国航天!   ​神舟十七号载人飞船预计今天下午返回东风着陆场。央视新闻开启特别节目,带你看航天员返回之旅,实时关注前方最新情况↓,祝一路平安顺利,东风见!致敬追梦的中国航天!   ​神舟十七号载人飞船预计今天下午返回东风着陆场。央视新闻开启特别节目,带你看航天员返回之旅,实时关注前方最新情况↓,祝一路平安顺利,东风见!致敬追梦的中国航天!   ​</p>
  </div>
</body>
</html>

再举个例子

这个效果也可以使用浮动去实现,给li加浮动即可

这里有个问题?浮动元素可以加margin吗?

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

js 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    /* ul{
      font-size: 0;
    } */

    li {
      list-style: none;
      font-size: 20px;
    }
    .item{
      width: 200px;
      height: 50px;
      /* display: inline-block; */
      float: left;
      margin: 10px;
      /* margin: 0 auto; */
    }
    .item:first-child{
      background-color: red;
    }
    .item:nth-child(2){
      background-color: blue;
    }
    .item:last-child{
      background-color: green;
    }
  </style>
</head>
<body>
  <ul>
    <li class="item">1</li>
    <li class="item">2</li>
    <li class="item">3</li>
  </ul>
</body>
</html>

但是如果我要的效果是以下呢?

添加一个标题,并且换行

如果直接添加一个div标签,由于li浮动的原因,脱离了文档流,就会产生重叠,并且会使ul的高度为零

ul的高度为零

div标签产生重叠

这里意味着我们必须消除浮动带来的影响才能使这个div标题正常的显示在下方

这里我们就要讲消除浮动,可以通过以下方式去消除

  1. 设置父元素高度
  2. 在父元素结束之前添加一个空元素,并设置 clear: both;
  3. 借助伪元素 ::after 清除浮动
  4. 把父容器设置成 BFC 容器
  5. 给后面受影响的元素设置 clear: both;
  • 由于li的高度是50px,只要给ul也加上50px的高度就能够抵消浮动带来的影响了,但是这种方式不好

    由于li的数据我们是无法确定有多少的,如果内容多了导致宽度变宽,ul加上50px就没有效果了

  • 在父元素结束之前添加一个空元素,并设置 clear: both;虽然也可以实现效果,但是这样就会有很多的冗余代码

  • 借助伪元素 ::after 清除浮动来清除浮动就相对来说优雅一些

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

可以直接给元素加伪元素,也可以通过添加对应的类名来实现

  • 还可以给后面受影响的元素设置 clear: both;

    但是这种方式是存在问题的,它最后相对的位置是相对于li,它是贴着li的

我们重点讲讲把父容器设置成 BFC 容器

  • 什么是BFC容器
    BFC(Block Formatting Context)即块格式化上下文,它是 Web 页面的可视 CSS 渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。

如果将父容器设置成 BFC 容器,bfc容器会把浮动容器设置高度。不会把所有脱离文档流的元素都设置高度比如绝对定位。所有能够实现这个功能

BFC容器有这些效果

  1. 内部的Box会在垂直方向,一个接一个的放置。
  2. bfc容器内部与外部的容器相互隔离,互不影响。---解决margin重叠问题。
  3. bfc容器内,相邻元素的margin在垂直方向会重叠。
  4. bfc容器会把浮动容器设置高度。不会把所有脱离文档流的元素都设置高度比如绝对定位。
相关推荐
道一232 分钟前
C# 判断文件是否存在的方法
开发语言·c#
信仰_2739932437 分钟前
Java面试题
java·开发语言
答案answer18 分钟前
一些经典的3D编辑器开源项目
前端·开源·three.js
闫有尽意无琼27 分钟前
银河麒麟v11 arm编译Qt creator8.0.2报错
开发语言·qt
亿元程序员34 分钟前
Creator都快4.0了,怎么能没有这样的功能?
前端
q***649736 分钟前
SpringMVC 请求参数接收
前端·javascript·算法
小此方39 分钟前
从零开始手搓堆:核心操作实现 + 堆排序 + TopK 算法+ 向上调整 vs 向下调整建堆的时间复杂度严密证明!
开发语言·数据结构·算法
万少39 分钟前
流碧卡片 6 小时闪电开发 AI gemini-3-pro-preview ! 秒出小红书爆款图,免下载直接用
前端·后端·ai编程
_OP_CHEN1 小时前
从零开始的Qt开发指南:(五)Qt 常用控件之 QWidget(上):解锁 Qt 界面开发的核心基石
开发语言·c++·qt·前端开发·qwidget·gui开发·qt常用控件
向葭奔赴♡1 小时前
若依系统权限控制全流程解析
前端·javascript·vue.js·ruoyi·navicat