当前位置: 首页 > news >正文

深入理解 CSS 浮动(Float):详尽指南

“批判他人总是想的太简单 剖析自己总是想的太困难”

文章目录

  • 前言
    • 文章有误敬请斧正 不胜感恩!
    • 目录
    • 1. 什么是 CSS 浮动?
    • 2. CSS 浮动的历史背景
    • 3. 基本用法
      • `float` 属性值
      • 浮动元素的行为
    • 4. 浮动对文档流的影响
    • 5. 清除浮动
      • `clear` 属性
      • 清除浮动的技巧
        • 1. 使用 `clear` 元素
        • 2. 使用“clearfix”技术
    • 6. 常见应用场景
      • 图片环绕文本
      • 多列布局
    • 7. 浮动的常见问题与解决方案
      • 1. 父容器高度塌陷
      • 2. 浮动元素导致后续元素错位
      • 3. 响应式布局困难
    • 8. 浮动的替代方案
    • 9. 实例演示
      • 示例1:图片环绕文本
      • 示例2:三栏布局
    • 10. 结论
  • 总结


前言

写在开始:

在学习 CSS 布局时,你可能经常会听到“浮动”这个词。虽然现代布局工具如 Flexbox 和 Grid 已经成为主流,但 float 仍然是 CSS 里一个非常重要的属性。它不仅在一些特定场景中有用,还为我们理解布局的运作原理提供了基础。本文将详细介绍 float 的用法、常见应用及其对文档流的影响,带你逐步掌握这个经典但重要的布局工具。


在这里插入图片描述


文章有误敬请斧正 不胜感恩!

以下是本篇文章正文内容,


在网页设计的早期阶段,CSS 的 float 属性曾是布局的核心工具。尽管现代 CSS 提供了更强大的布局模块,如 Flexbox 和 Grid,理解 float 仍然对前端开发者至关重要。本篇博客将全面、通俗地解析 CSS 浮动,帮助你掌握这一基础但重要的概念。

目录

  1. 什么是 CSS 浮动?
  2. CSS 浮动的历史背景
  3. 基本用法
    • float 属性值
    • 浮动元素的行为
  4. 浮动对文档流的影响
  5. 清除浮动
    • clear 属性
    • 清除浮动的技巧
  6. 常见应用场景
    • 图片环绕文本
    • 多列布局
  7. 浮动的常见问题与解决方案
  8. 浮动的替代方案
  9. 实例演示
  10. 结论

1. 什么是 CSS 浮动?

CSS 浮动(float)是一种将元素从其正常文档流中移出,并使其向左或向右浮动的布局方式。浮动元素的周围内容会环绕其周围,常用于图文混排和简单的多列布局。

2. CSS 浮动的历史背景

在 CSS 早期,网页布局的选择有限,float 成为了实现多栏布局和复杂布局的主要工具。尽管现代布局模块如 Flexbox 和 Grid 提供了更简洁和强大的功能,float 仍然在某些场景中被广泛使用,特别是在需要兼容旧浏览器时。

3. 基本用法

float 属性值

  • left:元素向左浮动,周围内容环绕其右侧。
  • right:元素向右浮动,周围内容环绕其左侧。
  • none:默认值,元素不浮动。
  • inherit:继承父元素的 float 属性值。

浮动元素的行为

当一个元素被设置为浮动时,它会脱离正常的文档流,向指定方向移动,其他非浮动元素会围绕它排列。浮动元素的宽度需要明确指定,否则它将根据内容自动调整。

.float-left {float: left;width: 200px;
}.float-right {float: right;width: 200px;
}

4. 浮动对文档流的影响

浮动元素脱离了正常的文档流,这意味着它们不会影响到后续元素的位置。然而,包含浮动元素的父容器可能会“塌陷”,因为父容器无法感知浮动子元素的高度。

<div class="container"><div class="float-left">浮动元素</div><p>这段文本会环绕在浮动元素的周围。</p>
</div>

在上述例子中,如果不处理,.container 容器的高度可能无法包含 .float-left 元素,导致布局问题。

5. 清除浮动

为了让父容器正确包裹浮动子元素,需要清除浮动。

clear 属性

clear 属性用于指定元素的哪一边不能有浮动元素。常见的值有:

  • left:元素上方和左侧不允许有浮动元素。
  • right:元素上方和右侧不允许有浮动元素。
  • both:元素上方不允许有任何浮动元素。
  • none:不清除浮动。
.clearfix {clear: both;
}

清除浮动的技巧

1. 使用 clear 元素

在浮动元素后添加一个具有 clear: both; 的元素。

<div class="container"><div class="float-left">浮动元素</div><p>环绕文本。</p><div style="clear: both;"></div>
</div>
2. 使用“clearfix”技术

为父容器添加一个伪元素,自动清除浮动。

.container::after {content: "";display: table;clear: both;
}

这种方法无需在 HTML 中添加额外的清除元素,更加简洁和语义化。

6. 常见应用场景

图片环绕文本

这是 float 最经典的应用之一,常用于文章中的插图。

<div><img src="image.jpg" class="float-left" alt="示例图片"><p>这是环绕在图片周围的文本内容。</p>
</div>

多列布局

在 Flexbox 和 Grid 出现之前,float 被广泛用于实现多列布局。

<div class="row"><div class="column">列1</div><div class="column">列2</div><div class="column">列3</div>
</div>
.column {float: left;width: 33.33%;
}
.row::after {content: "";display: table;clear: both;
}

7. 浮动的常见问题与解决方案

1. 父容器高度塌陷

问题:父容器无法包含浮动子元素,导致高度塌陷。

解决方案:使用 clearfix 技术,或在父容器上设置 overflow: hidden;

.container {overflow: hidden;
}

2. 浮动元素导致后续元素错位

问题:浮动元素后面的内容没有正确环绕,导致布局混乱。

解决方案:确保浮动后进行清除,或调整浮动元素的宽度和布局。

3. 响应式布局困难

问题:使用 float 实现响应式布局较为复杂,需要额外的媒体查询和调整。

解决方案:在需要响应式布局时,考虑使用 Flexbox 或 Grid 等现代布局模块。

8. 浮动的替代方案

虽然 float 曾是布局的主力,但现代 CSS 提供了更强大和灵活的布局工具:

  • Flexbox:适用于一维布局(行或列),简化对齐和分布空间的控制。
  • CSS Grid:适用于二维布局(行和列),提供更复杂的布局结构。
  • Positioning:通过 position 属性实现元素的精确定位。

这些工具不仅更易于使用,还解决了 float 带来的一些布局问题。

9. 实例演示

示例1:图片环绕文本

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>图片环绕示例</title><style>.float-left {float: left;margin: 0 15px 15px 0;width: 200px;}.container::after {content: "";display: table;clear: both;}</style>
</head>
<body><div class="container"><img src="image.jpg" alt="示例图片" class="float-left"><p>这是一段示例文本,用于展示如何使用 CSS 浮动让文本环绕图片。通过设置图片为浮动元素,文本会自动围绕图片布局,形成美观的图文混排效果。</p></div>
</body>
</html>

示例2:三栏布局

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>三栏布局示例</title><style>.row::after {content: "";display: table;clear: both;}.column {float: left;width: 33.33%;padding: 10px;box-sizing: border-box;}.column:nth-child(odd) {background-color: #f2f2f2;}</style>
</head>
<body><div class="row"><div class="column">栏目1内容</div><div class="column">栏目2内容</div><div class="column">栏目3内容</div></div>
</body>
</html>

10. 结论

CSS 浮动曾是网页布局的重要工具,尽管现代布局模块如 Flexbox 和 Grid 提供了更强大的功能,float 依然在某些场景中发挥着作用。理解 float 的工作原理、常见应用和潜在问题,有助于开发者更全面地掌握 CSS 布局技术。在实际开发中,根据具体需求选择合适的布局方法,既能确保兼容性,又能提升开发效率和用户体验。


总结

虽然 float 的历史使命在逐渐减少,但它仍然在网页设计中有着独特的价值,特别是当你处理老旧项目或简单的图文混排时。理解 float 的工作机制可以帮助你更好地应对不同的布局场景,同时也为使用现代 CSS 布局工具打下坚实的基础。掌握 float,不仅仅是为了应付特殊需求,它也能丰富你的 CSS 知识库,让你在开发中更加灵活应对各种情况。

希望这篇文章让你对 float 有了更加清晰的认识。继续学习和实践,CSS 世界里还有更多有趣的知识等着你去探索!


相关文章:

深入理解 CSS 浮动(Float):详尽指南

“批判他人总是想的太简单 剖析自己总是想的太困难” 文章目录 前言文章有误敬请斧正 不胜感恩&#xff01;目录1. 什么是 CSS 浮动&#xff1f;2. CSS 浮动的历史背景3. 基本用法float 属性值浮动元素的行为 4. 浮动对文档流的影响5. 清除浮动clear 属性清除浮动的技巧1. 使用…...

ElasticSearch学习笔记(三)Ubuntu 2204 server elasticsearch集群配置

如果你只是学习elasticsearch的增、删、改、查等相关操作&#xff0c;那么在windows上安装一个ES就可以了。但是你如果想在你的生产环境中使用Elasticsearch提供的强大的功能&#xff0c;那么还是建议你使用Linux操作系统。 本文以在Ubuntu 2204 server中安装elasticsearch 8.…...

基于STM32的简易交通灯proteus仿真设计(仿真+程序+设计报告+讲解视频)

基于STM32的简易交通灯proteus仿真设计(仿真程序设计报告讲解视频&#xff09; 仿真图proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;C0091 **1.**主要功能 功能说明&#xff1a; 以STM32单片机和数码管、LED灯设计简易交通…...

linux下新增加一块sata硬盘并使用

1&#xff09;确认新硬盘能被正确识别到 2&#xff09;对新硬盘进行分区 说明&#xff1a;fdisk指令中输入“m”&#xff0c;可以看到详细的指令含义。 3&#xff09;确认新创建的分区 5&#xff09;格式化新创建的分区 6&#xff09;挂载新分区并使用...

主从复制遇到的问题点

1.解决主从复制的配置问题 大致逻辑&#xff1a; 主库&#xff1a; 进入mysql的my.in文件&#xff0c;配置 server-id 1 log-bin mysql-bin log-bin D:/mysql/log binlog-do-db 数据库名 从库 进入mysql的my.in文件&#xff0c;配置 server-id 2 replicate-do-db 数据库名…...

Macbook ToDesk 无法连接网络

描述 网络连接的是 Wi-Fi&#xff0c;打开浏览器能跟正常浏览内容&#xff0c;说明 Wi-Fi 是正常的。 现象&#xff1a;显示网络连接失败&#xff0c;一直无法登陆&#xff01; 检查防火墙是没有阻止ToDesk 的任何连接&#xff0c;说明防火墙也是正常的。 解决 检查登录项&a…...

C++-容器适配器- stack、queue、priority_queue和仿函数

目录 1.什么是适配器 2.deque 1.简单了解结构 2.deque的缺陷 3.为什么选择deque作为stack和queue的底层默认容器 3.stack&#xff08;栈&#xff09; 4.queue&#xff08;队列&#xff09; 5.仿函数 6.priority_queue&#xff08;优先级队列&#xff09;&#xff08;堆…...

C++游戏开发指南

C游戏开发指南 引言 在这个数字娱乐时代&#xff0c;游戏行业炙手可热&#xff0c;你是否也憧憬着能亲自开发出一款独特的游戏呢&#xff1f;你是否想过&#xff0c;为什么越来越多的开发者选择C作为他们的开发语言&#xff1f;没错&#xff0c;C不仅是一种高效的编程语言&am…...

k8s的pod管理及优化

资源管理介绍 资源管理方式 命令式对象管理&#xff1a;直接用命令去操作kubernetes资源 命令式对象配置&#xff1a;通过命令配置和配置文件去操作kubernets资源 声明式对象配置&#xff1a;通过apply命令和配置文件去操作kubernets资源 命令式对象管理&#xff1a; 资源类…...

HTML 常用的块级元素和行内元素

1. 常用的块级元素 块级元素具有如下特点&#xff1a; 占据父容器的整行宽度。通常从新的一行开始。可以包含其他块级元素和行内元素。 常用的块级元素&#xff1a; div&#xff1a;通用的容器&#xff0c;用于布局和分块内容。 h1 到 h6&#xff1a;标题标签&#xff0c;定义…...

js短路求值

短路求值&#xff08;short-circuit evaluation&#xff09;是指在逻辑运算中&#xff0c;如果前面的表达式已经能够确定整个表达式的结果&#xff0c;后面的表达式就不会被执行。短路求值常见于逻辑运算符 &&&#xff08;与&#xff09;和 ||&#xff08;或&#xff0…...

react 知识点汇总(非常全面)

React 是一个用于构建用户界面的 JavaScript 库&#xff0c;由 Facebook 开发并维护。它的核心理念是“组件化”&#xff0c;即将用户界面拆分为可重用的组件。 React 的组件通常使用 JSX&#xff08;JavaScript XML&#xff09;。JSX 是一种 JavaScript 语法扩展&#xff0c;…...

如何加密重要U盘?U盘怎么加密保护?

在日常生活中&#xff0c;我们常常使用U盘来存储和传输重要文件。然而&#xff0c;U盘的便携性也意味着它容易丢失或被盗。为了保护U盘中的数据安全&#xff0c;我们需要对U盘进行加密。本文将为您介绍如何加密重要U盘&#xff0c;以及U盘加密保护的方法。 BitLocker BitLocke…...

js编写一个中奖程序

好的&#xff0c;以下是一个用JavaScript编写的抽奖程序&#xff0c;它根据给定的概率来决定奖项。我们将使用随机数生成器来模拟抽奖过程。 function drawPrize() {const prizes [{ name: 特等奖, probability: 0.00000001 },{ name: 一等奖, probability: 0.00000003 },{ n…...

Mybatis-plus的基础用法

文章目录 1. 核心功能1.1 配置与编写规则1.2 条件构造器1.3 自定义SQL1.4 IService接口1.4.1 Lambda方法1.4.2 批量新增 1.5 分页查询 2. 拓展功能2.1 代码生成器2.2 DB静态工具2.3 逻辑删除2.4 枚举处理器 参考 1. 核心功能 1.1 配置与编写规则 Maven依赖&#xff1a; <…...

【网络篇】计算机网络——应用层详述(笔记)

目录 一、应用层协议原理 1. 进入应用层 2. 网络应用程序体系结构 &#xff08;1&#xff09;客户-服务器体系结构&#xff08;client-server architecture&#xff09; &#xff08;2&#xff09; P2P 体系结构&#xff08;P2P architecture&#xff09; 3. 进程间通讯 …...

力扣10.9

3171. 找到按位或最接近 K 的子数组 给你一个数组 nums 和一个整数 k 。你需要找到 nums 的一个 子数组 &#xff0c;满足子数组中所有元素按位或运算 OR 的值与 k 的 绝对差 尽可能 小 。换言之&#xff0c;你需要选择一个子数组 nums[l..r] 满足 |k - (nums[l] OR nums[l 1…...

@RequestMapping指定请求方式的用法

RequestMapping("/depts")public Result list() {log.info("查询全部部分数据");return Result.success();}上面代码没有指定请求方式&#xff0c;通过postman测试&#xff0c;可以用GET&#xff0c;POST&#xff0c;Delete的方式调用。 要想指定请求方式…...

卷积神经网络细节问题及知识点

一、Batch Normalization Batch Normalization&#xff08;BN&#xff0c;批归一化&#xff09; 是深度学习中的一种技术&#xff0c;主要用于加速神经网络的训练过程&#xff0c;同时提高网络的稳定性和收敛速度。它通过对每一层的输出进行归一化&#xff0c;减少梯度消失和梯…...

【图论】(一)图论理论基础与岛屿问题

图论理论基础与岛屿问题 图论理论基础深度搜索&#xff08;dfs&#xff09;广度搜索&#xff08;bfs&#xff09;岛屿问题概述 岛屿数量岛屿数量-深搜版岛屿数量-广搜版 岛屿的最大面积孤岛的总面积沉没孤岛建造最大人工岛水流问题岛屿的周长 图论理论基础 这里仅对图论相关核…...

PhotoMaker部署文档

一、介绍 PhotoMaker&#xff1a;一种高效的、个性化的文本转图像生成方法&#xff0c;能通过堆叠 ID 嵌入自定义逼真的人类照片。相当于把一张人的照片特征提取出来&#xff0c;然后可以生成你想要的不同风格照片&#xff0c;如写真等等。 主要特点&#xff1a; 在几秒钟内…...

双十一买什么最划算?2024年双十一选购攻略汇总!

随着一年一度的双十一购物狂欢节日益临近&#xff0c;消费者们纷纷摩拳擦掌&#xff0c;准备在这个全球最大的购物盛宴中抢购心仪已久的商品。双十一不仅是一场购物的狂欢&#xff0c;更是商家们推出优惠、促销的绝佳时机。然而&#xff0c;面对琳琅满目的商品和纷繁复杂的优惠…...

Oracle架构之物理存储之审计文件

文章目录 1 审计文件&#xff08;audit files&#xff09;1.1 定义1.2 查看审计信息1.3 审计相关参数1.4 审计的类型1.4.1 语句审计1.4.2 权限审计1.4.3 对象审计1.4.4 细粒度的审计 1.5 与审计相关的数据字典视图 1 审计文件&#xff08;audit files&#xff09; 1.1 定义 审…...

DAY6 面向对象

概念 对象是一种特殊的数据结构&#xff0c;可以用来记住一个事物的数据&#xff0c;从而代表该事物&#xff0c;可以理解为一个模板表&#xff0c;总而言之万物皆对象&#xff0c;比如一个人、一个物体等。 怎么创建对象 先设计对象的模板&#xff0c;也就是对象的设计图&a…...

代码随想录 (三)—— 哈希表部分刷题

当我们想使用哈希法来解决问题的时候&#xff0c;我们一般会选择如下三种数据结构。 数组set &#xff08;集合&#xff09;map(映射) 在java中有就是&#xff0c;hashmap, LinkedHashMap, TreeMap &#xff0c;HashTable 等 总结一下&#xff0c;当我们遇到了要快速判断一个…...

搜维尔科技:使用 SenseGlove Nova 2 远程操作机械手,实现了对鸡蛋的精细操控

使用SenseGlove Nova 2远程操作机械手&#xff0c;实现了对鸡蛋的精细操控 搜维尔科技&#xff1a;使用 SenseGlove Nova 2远程操作机械手&#xff0c;实现了对鸡蛋的精细操控...

Mybatis是什么?优缺点分别有哪些?

MyBatis 是一个开源的持久层框架&#xff0c;它提供了将 SQL 语句和 Java 对象进行映射的功能&#xff0c;使得开发者可以通过简单的配置来实现数据库操作&#xff0c;减少了手写 SQL 的工作量。 MyBatis 的优点&#xff1a; 1. 简单易用&#xff1a;MyBatis 采用了简单的配置…...

opencascade鼠标拖拽框选功能

1.首先在OccView中添加用于显示矩形框的类 //! rubber rectangle for the mouse selection.Handle(AIS_RubberBand) mRectBand; 2.设置框选的属性 mRectBand new AIS_RubberBand(); //设置属性 mRectBand->SetLineType(Aspect_TOL_SOLID); //设置变宽线型为实线 mRe…...

docker 部署 postgres

这里以postgres:12.6为例&#xff1a; 1. 拉取postgres镜像 docker pull postgres:12.62. 创建挂载目录 mkdir -p /mydata/docker/postgres-1/data3. 启动postgres容器 docker run --name postgres-12.6 \-e POSTGRES_PASSWORD123456 \-p 5432:5432 \-v /mydata/docker/pos…...

【重学 MySQL】五十、添加数据

【重学 MySQL】五十、添加数据 使用INSERT INTO语句添加数据基本语法示例插入多行数据注意事项 使用LOAD DATA INFILE语句批量添加数据其他插入数据的方式注意事项 在MySQL中&#xff0c;添加数据是数据库操作中的基本操作之一。 使用INSERT INTO语句添加数据 使用 INSERT IN…...