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

浮动有很多的效果

  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容器会把浮动容器设置高度。不会把所有脱离文档流的元素都设置高度比如绝对定位。
相关推荐
编程零零七1 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
北岛寒沫2 小时前
JavaScript(JS)学习笔记 1(简单介绍 注释和输入输出语句 变量 数据类型 运算符 流程控制 数组)
javascript·笔记·学习
2401_858286112 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
铁松溜达py2 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
everyStudy2 小时前
JavaScript如何判断输入的是空格
开发语言·javascript·ecmascript
(⊙o⊙)~哦3 小时前
JavaScript substring() 方法
前端
无心使然云中漫步4 小时前
GIS OGC之WMTS地图服务,通过Capabilities XML描述文档,获取matrixIds,origin,计算resolutions
前端·javascript
Bug缔造者4 小时前
Element-ui el-table 全局表格排序
前端·javascript·vue.js
C-SDN花园GGbond4 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
xnian_4 小时前
解决ruoyi-vue-pro-master框架引入报错,启动报错问题
前端·javascript·vue.js