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

浮动有很多的效果

  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容器会把浮动容器设置高度。不会把所有脱离文档流的元素都设置高度比如绝对定位。
相关推荐
汤米粥4 分钟前
小皮PHP连接数据库提示could not find driver
开发语言·php
冰淇淋烤布蕾7 分钟前
EasyExcel使用
java·开发语言·excel
拾荒的小海螺13 分钟前
JAVA:探索 EasyExcel 的技术指南
java·开发语言
涔溪36 分钟前
Ecmascript(ES)标准
前端·elasticsearch·ecmascript
马剑威(威哥爱编程)38 分钟前
哇喔!20种单例模式的实现与变异总结
java·开发语言·单例模式
榴莲千丞1 小时前
第8章利用CSS制作导航菜单
前端·css
白-胖-子1 小时前
【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-统计数字
开发语言·c++·算法·蓝桥杯·等考·13级
奔跑草-1 小时前
【前端】深入浅出 - TypeScript 的详细讲解
前端·javascript·react.js·typescript
好睡凯1 小时前
c++写一个死锁并且自己解锁
开发语言·c++·算法
java—大象1 小时前
基于java+springboot+layui的流浪动物交流信息平台设计实现
java·开发语言·spring boot·layui·课程设计