Web前端入门第 40 问:CSS float 浮动布局应用场景
CSS float 浮动属性最早用于文字环绕图片效果,就像传统报纸上的印刷排版一样。
CSS2 的规范推动了浮动用于其他元素,float 便被大范围应用于布局,当年常说的 div + css
布局,float 绝对占有一席之地,float 用于布局手段便颠覆了再之前的表格布局,如今表格只用于数据展示。
而今 CSS3 推动 flex 弹性盒子和 grid 网格布局规范,float 的地位有点像当年的表格布局一样,有种退出舞台的感觉,但一些简单的布局用 float 比 flex 更简单。而且最初的文字环绕效果,其他的 CSS 属性都不好使,非 float 莫属。
float 应用场景
虽说如今 CSS 的 float 浮动属性在布局领域败北,被 flex 一脚踢在了岸边上,但这一脚还不至死,float 多少还有一口气在~
两列左右布局
还是以经典的左右两端布局为例,看看浮动的用处:
看 left 和 right 两个位置,分别位于左右两侧,使用 float 的实现:
<div class="box">
<div class="left">left</div>
<div class="right">right</div>
</div>
<style>
.box {
margin: 20px 0;
width: 400px;
}
.left {
float: left;
}
.right {
float: right;
}
</style>
直接将两个元素分别设置 float
即可实现以上布局,但这里埋了一个坑!
父级元素高度塌陷
我们给 .box
的容器添加一个小小的边框属性,看看效果就会发现问题:
<div class="box">
<div class="left">left</div>
<div class="right">right</div>
</div>
<style>
.box {
margin: 20px 0;
width: 400px;
border: 2px solid rgba(255, 71, 87,0.3);
}
.left {
float: left;
}
.right {
float: right;
}
</style>
显示效果:
父级元素高度没有了,四条边框变成了一条线,这是为何?
原因便是 float 的名字 浮动
,float 不只是名字叫浮动,还在于它的作用也是 浮动
,让元素飘起来,不在占用空间位置,但是与定位又不一样,float 的元素还受父级控制,但又不占用父级元素空间,所以就造成了高度塌陷,那怎么解决这个问题??
最简易的做法是给 .box
添加一个 overflow: hidden;
便可以让父级高度恢复:
<div class="box">
<div class="left">left</div>
<div class="right">right</div>
</div>
<style>
.box {
margin: 20px 0;
width: 400px;
border: 2px solid rgba(255, 71, 87,0.3);
overflow: hidden;
}
.left {
float: left;
}
.right {
float: right;
}
</style>
显示效果:
overflow: hidden; 的问题:
虽然高度塌陷的问题是解决了,但是 overflow: hidden;
也会造成其他问题,比如:如果有内容溢出了容器,就再也看不到了~~
此方法仅适用于没有内容溢出的容器清除浮动。
最佳的清除浮动方法
MDN 的一个小角落里面,有这么一个 CSS 属性 clear
,它的名称就是它的作用:清除
,对头,就是用来清除浮动的,没其他意思。
用法嘛,它有多个属性值,别想那么多,就用最常见的 both
就行,其他值等要用了再说,扣代码这么多年的前端经历,也没见用上其他值~~
这儿建议用一个伪对象 after
,别问为什么,问就是不想再新增一个空的 html 元素用来清除浮动,代码如下:
/**清除浮动**/
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
.clearfix {
*zoom:1;
}
至于为什么要那么多的代码,嘿嘿...为了兼容各种赖克宝浏览器。百度首页的代码中都还找到有这样的代码,嘿,说明百度还在支持赖克宝浏览器~~
如果不考虑兼容,直接可以这样玩:
.clearfix:after {
content: "";
display: block;
clear: both;
}
用法:
<div class="box clearfix">
<div class="left">left</div>
<div class="right">right</div>
</div>
<style>
.clearfix:after {
content: "";
display: block;
clear: both;
}
.box {
border: 2px solid rgba(255, 71, 87,0.3);
margin: 20px 0;
width: 400px;
}
.left {
float: left;
}
.right {
float: right;
}
</style>
显示效果:
这个 clearfix
类可丢公用样式中,要清除浮动时候,直接加载容器盒子上即可!
美中不足的是,容器 box 伪对象 after
被占用了,其他地方再想使用伪对象就会有冲突!!
改变元素位置
某某天,产品突发奇想,在左边的那个 left
给我放在右边去呗,右边的 right
给放在左边来下吧。
按照懒人思想,我肯定不想再去动 HTML 结构了,看看使用 float 来做到 flex 的 order 排序效果:
<div class="box clearfix">
<div class="left">left</div>
<div class="right">right</div>
</div>
<style>
.clearfix:after {
content: "";
display: block;
clear: both;
}
.box {
border: 2px solid rgba(255, 71, 87,0.3);
margin: 20px 0;
width: 400px;
}
.left {
float: right;
}
.right {
float: left;
}
</style>
注意看代码中的 float: right;
和 float: left;
位置。
仅需要对调一下 float 的位置,即可实现左右互换,而不用改变 HTML 结构!显示效果:
终极应用场景
float 的初衷是用于文字排版,虽说在布局方面,float 干不过 flex 和 grid,但在文字环绕这个场景中,float 还是老大哥。
文字环绕
以上这种文字环绕的效果,如果用 flex 和 grid 来做,不知道要将 HTML 结构拆成啥样,但对于 float 来说就是信手拈来的事儿。
代码:
<div class="box">
<p>CSS float 浮动属性最早用于文字环绕图片效果,就像传统报纸上的印刷排版一样。</p>
<div class="left">浮动元素 left</div>
<div class="right">浮动元素 right</div>
<p>CSS2 的规范推动了浮动用于其他元素,float 便被大范围应用于布局,当年常说的 `div + css` 布局,float 绝对占有一席之地,float 用于布局手段便颠覆了再之前的表格布局,如今表格只用于数据展示。</p>
</div>
<style>
.box {
border: 2px solid rgba(255, 71, 87,0.3);
margin: 20px 0;
padding: 20px;
width: 400px;
}
.left,
.right {
width: 80px;
height: 80px;
background-color: #000736;
color: #fff;
border: 2px solid #ff4757;
}
.left {
float: left;
margin: 10px 10px 10px 0;
}
.right {
float: right;
margin: 10px 0 10px 10px;
}
</style>
几何形状文字环绕
利用 shape-outside
属性,可实现各种几何图形的文字环绕效果:
<div class="box">
<p>CSS float 浮动属性最早用于文字环绕图片效果,就像传统报纸上的印刷排版一样。</p>
<div class="left">浮动元素 left</div>
<div class="right">浮动元素 right</div>
<p>CSS2 的规范推动了浮动用于其他元素,float 便被大范围应用于布局,当年常说的 `div + css` 布局,float 绝对占有一席之地,float 用于布局手段便颠覆了再之前的表格布局,如今表格只用于数据展示。</p>
</div>
<style>
.box {
border: 2px solid rgba(255, 71, 87,0.3);
margin: 20px 0;
padding: 20px;
width: 400px;
}
.left,
.right {
width: 80px;
height: 80px;
background-color: #000736;
color: #fff;
border: 2px solid #ff4757;
border-radius: 50%;
shape-outside: circle(50%); /* 定义圆形环绕区域 */
}
.left {
float: left;
margin: 10px 10px 10px 0;
}
.right {
float: right;
margin: 10px 0 10px 10px;
}
</style>
以上代码定义了一个 circle
的圆形区域,文字将会围绕这个圆形区域显示,效果:
更多几何图形参考 MDN:https://developer.mozilla.org/zh-CN/docs/Web/CSS/basic-shape
float 新的属性值
float 属性值除了常用的 left
、right
和none
外,2023 的规范还新增了 inline-start
、inline-end
这俩兄弟,他们主要用于处理不同的书写方式,比如有些语言是从右往左的书写模式,float: inline-start;
就会浮动到语言书写开始的地方,看例子:
将 float: left
改成 float: inline-start;
再将 box 的书写方向改为 direction: rtl;
,再看效果:
可以看到 inline-start 就是往文字开始的地方浮动,这个值对于不同的书写方向还是有用的。但需注意兼容性,毕竟 2023 年才新增的。
总结
虽说 float 浮动属性很少再用于布局,但在文字环绕排版时,还是需要掏出 float。
技术的发展让曾经的经典布局已经逐渐退出舞台,我们在学习新的方案时,也需要回望一下过去,也许某个需求,这些旧的技术也会重新被摆上案桌。
Web前端入门第 40 问:CSS float 浮动布局应用场景的更多相关文章
- 好程序员web前端分享值得参考的css理论:OOCSS、SMACSS与BEM
好程序员web前端分享值得参考的css理论:OOCSS.SMACSS与BEM 最近在The Sass Way里看到了Modular CSS typography一文,发现文章在开头部分就提到了OOCS ...
- web前端入坑第五篇:秒懂Vuejs、Angular、React原理和前端发展历史
秒懂Vuejs.Angular.React原理和前端发展历史 2017-04-07 小北哥哥 前端你别闹 今天来说说 "前端发展历史和框架" 「前端程序发展的历史」 「 不学自知, ...
- 好程序员web前端分享18个用CSS制作出来的东西
好程序员web前端分享18个用CSS制作出来的东西,与流行的看法相反,CSS不仅仅是用来提供一个WEB页面的基本风格,以使它看起来更有吸引力.还有很多其他的事情,CSS也可以做的很好.由于它创建动画和 ...
- 进击的Python【第十三章】:Web前端基础之HTML与CSS样式
进击的Python[第十四章]:Web前端基础之HTML与CSS样式 一.web框架的本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客 ...
- Android零基础入门第40节:自定义ArrayAdapter
原文:Android零基础入门第40节:自定义ArrayAdapter ListView用起来还是比较简单的,也是Android应用程序中最重要的一个组件,但其他ListView可以随你所愿,能够完成 ...
- 对css float 浮动的学习心得
css float浮动详解 @(css float)[hasLayout|clear float|妙瞳] css float的定义和用法 float 属性定义元素在哪个方向浮动.以往这个属性总应用于图 ...
- [转] CSS float 浮动属性
http://www.cnblogs.com/polk6/p/3142187.html CSS float 浮动属性 本篇主要介绍float属性:定义元素朝哪个方向浮动. 目录: 1. 页面布局方式: ...
- 解决子级用css float浮动 而父级div没高度不能自适应高度
解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内容撑开解决方法,父级div没有高度解决方法. 最外层的父级DIV不能自适应高度-不能随对象撑开没有高度 当在对象内的盒子 ...
- CSS| 解决子级用css float浮动 而父级div没高度不能自适应高度
解决子级用css float浮动 而父级div没高度不能自适应高度 解决子级对象使用css float浮动 而父级div不能自适应高度,不能被父级内容撑开解决方法,父级div没有高度解决方法. 最外层 ...
- CSS之浮动布局(float,浮动原理,清除/闭合浮动方法)
css之浮动布局 本人博客:查看文章 1.什么是浮动:在我们布局的时用到的一种技术,能够方便我们进行布局,通过让元素浮动,我们可以使元素在水平上左右移动,再通过margin属性调整位置 2.浮动的 ...
随机推荐
- FLink12--KeyByReduceApp
一.依赖 参考博文:https://www.cnblogs.com/robots2/p/16048648.html 二.代码 package net.xdclass.class9; import ja ...
- Luogu P8112 [Cnoi2021] 符文破译 题解 [ 蓝 ] [ KMP ] [ 线性 dp ] [ 决策单调性 dp ]
符文破译:KMP + dp 的好题. 暴力 dp 不难打出一个暴力 dp:设计 \(dp_i\) 表示当前前 \(i\) 位全部完成了匹配,所需的最小分割数. 转移也是简单的,我们在 KMP 的过程中 ...
- 基于iscsi存储池
命令行 [root@kvm1 ~]# virsh pool-define-as --name stor2 --type iscsi \ > --source-host 192.168.114.1 ...
- P2730 [USACO3.2] 魔板 Magic Squares 题解
一些废话 夜深人静的夜晚,我开了这道题.看起来,完成它是一件轻而易举的事.我想了想,打开Dev-C++,开始写代码. 然而,那时的我还不知道,我踏入了深渊...... 咳咳,中二病犯了,前面的文字请忽 ...
- (抄自己luogu上的博客)莫队总结
虽然当时文风很2,但是觉得写的蛮好的,就在这里贴一下吧. 最近学了分块(太难想了 \(qwq\) )和莫队(太神奇了 \(0w0\) ),写一个阶段性总结~ 分块 总所周知,分块是一种神奇的暴力,用 ...
- SQL取系统时间的前一个月的月份和年份
SQL SERVER 提供了一些时间函数:取当前时间:select getdate()取前一个月的时间:SELECT DATEADD(MONTH,-1,GETDATE()) 月份减一个月取年份:SEL ...
- QT5笔记: 31. 文件目录操作
开发的时候,QtCreator F1 查看相关类的信息
- 从汇编层解读Golang的闭包实现:逃逸分析与性能影响
本文精心梳理了一系列面试中具有一定难度的高频Golang问题,其中部分知识点可能你之前未曾深入探究,然而它们却在面试和实际工作中至关重要. 包括:Golang的基础语法.并发模型.内存管理等核心知识点 ...
- redux vs redux-toolkit 及源码实现
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:霜序 前言 为何讲这个内容?以为后续大家会使用 redux ...
- 【Unit2】电梯调度(多线程设计)-作业总结
第一次作业 1.1 题目概述 5座楼,每座楼单电梯,类型相同,请求不跨楼层 1.2 个人处理思路 红色加粗为线程类,绿色块为临界区(共享对象) /...鄙人还在加班加点的赶制中.qwq./ 1.3 B ...