解锁CSS浮动之谜:面试者的必备技能

在面试中考察css的时候面试官可能会让你聊一聊浮动,那么接下来我们将总结css中浮动的常见的问题

浮动的特点

  • 文字环绕效果 :通过设置float属性,我们可以轻松实现图文混排,让文字围绕在浮动元素周围,增强了页面设计的灵活性和可读性。
  • 脱离文档流:当一个元素浮动后,它将不再遵循正常的文档流顺序排列,而是移动到其所在容器边缘,并尽可能向左或向右浮动。原本在其下方的内容会向上填充该元素原先在文档流中的位置。 参考下方例子,使用浮动之后span标签盖住了div标签
  • 赋予行内元素尺寸控制权 :通常情况下,行内元素(如<span>)不能直接设置宽度和高度。然而,一旦设置了浮动,这些元素就具有了类似块级元素的特性,允许开发者为其设定明确的宽高尺寸。

为span标签设置宽高但是检查发现宽高失效

使用浮动:


我们可以看到上述的span标签的宽高生效,并且将div容器给盖住了

缺点

尽管浮动功能强大,但它的一个显著副作用就是可能导致后续元素布局的混乱:

后续元素布局错乱:由于浮动元素脱离了文档流,紧随其后的元素可能会填补浮动元素腾出的空间,进而破坏原有的布局结构,尤其是在未正确处理浮动闭合的情况下。

消除浮动

为了克服上述布局难题,有几种常见的清除浮动技术,其中一种是通过使用伪元素来清除浮动,另外一种则是利用Block Formatting Context(BFC)容器来包容浮动元素并恢复有序布局。

清除浮动的传统手段

  • 增加额外标签清除浮动 :在浮动元素之后增加一个空元素,设置clear:both,这样后面的元素便不会受到浮动的影响,或者给其伪元素设置样式
  • 直接设置父容器尺寸:如果情况允许,也可以简单地为浮动元素的父容器设置固定的宽高,但这并不总是最佳解决方案,因为它无法自适应内容的变化。

利用BFC容器

BFC(Block Formatting Context)是一种特殊的布局环境,在此环境下,内部元素的行为更易于预测和控制。以下是BFC的特点:

  • 内部元素垂直堆叠:BFC内的子元素将会彼此垂直对齐,不相互重叠。
  • 边距重叠限制 :在同一BFC中的相邻块级元素,其垂直边距不会与外部元素合并,避免了常见的边距合并问题。点击查看边距重叠问题
  • 防止元素被浮动元素覆盖:BFC有助于保持布局稳定性,防止非浮动元素被浮动元素所覆盖。
  • 计算高度时包含浮动元素:BFC在计算自身高度时会把浮动元素的高度考虑进去,保证了容器的高度能够正确反映内容的高度。

创建BFC容器的方法

创建一个BFC容器可以通过以下途径实现:

  1. 设置overflow属性 :将容器的overflow属性设为autohiddenscroll,这会使浏览器自动为该容器创建一个新的BFC。
css 复制代码
.container {
  overflow: auto; /* 或 hidden、scroll */
}
  1. 更改display属性 :将容器的display属性设置为inline-blocktable-cellflexinline-flex其中之一,同样能触发BFC的创建。
css 复制代码
.container {
  display: inline-block; /* 或 table-cell、flex、inline-flex */
}
  1. 设置浮动 :虽然不是理想的创建BFC场景,但将元素设置为浮动(即float属性不为none)也能形成新的BFC。

  2. 利用伪元素创建BFC并清除浮动:在父容器后添加伪元素,并通过特定样式使其成为BFC的同时清除浮动。

css 复制代码
 .parent:after{
  /* 设置添加子元素的内容是空 */
    content: '';  
    /* 设置添加子元素为块级元素 */
    display: block;
    /* 设置添加的子元素的高度0 */
    height: 0;
    /* 设置添加子元素看不见 */
    visibility: hidden;
    /* 设置clear:both */
    clear: both;

}

浮动总结

特点:

  1. 实现文字环绕效果
  2. 能够让行内元素设置宽高
  3. 能够使元素脱离文档流,而之前占据的空间将会被其他元素占据

缺点: 造成后面的布局错乱,增加布局的难度

清除浮动的影响:

  1. 为父容器设置宽高,如果条件允许
  2. 增加额外的元素在浮动元素最后面,并设置clear:both;,或者是在其伪元素:after设置样式
  3. 将父容器变为bfc容器
    1. 父容器属性overflowatuo,scroll,hidden
    2. 设置父容器浮动
    3. 给父容器的伪类:after设置样式
    4. 父容器display的值设置为inline-flex,flex,table-cell,inline-block其中一个

BFC容器特点:

  1. 没有边距重叠问题
  2. 浮动元素不会遮住其它元素,并将其高度计算在内

本人还在学习中,水平有限,文章可能存在纰漏或错误,如有问题欢迎指正,感谢你阅读这篇文章,如果你觉得写得还行的话,不要忘记点赞、评论、收藏哦!祝事业有成,生活愉快!😘

相关推荐
带娃的IT创业者5 小时前
TypeScript + React + Ant Design 前端架构入门:搭建一个 Flask 个人博客前端
前端·react.js·typescript
非凡ghost6 小时前
MPC-BE视频播放器(强大视频播放器) 中文绿色版
前端·windows·音视频·软件需求
Stanford_11066 小时前
React前端框架有哪些?
前端·微信小程序·前端框架·微信公众平台·twitter·微信开放平台
洛可可白6 小时前
把 Vue2 项目“黑盒”嵌进 Vue3:qiankun 微前端实战笔记
前端·vue.js·笔记
学习同学7 小时前
从0到1制作一个go语言游戏服务器(二)web服务搭建
服务器·前端·golang
-D调定义之崽崽7 小时前
【初学】调试 MCP Server
前端·mcp
四月_h7 小时前
vue2动态实现多Y轴echarts图表,及节点点击事件
前端·javascript·vue.js·echarts
文心快码BaiduComate8 小时前
用Zulu轻松搭建国庆旅行4行诗网站
前端·javascript·后端
行者..................9 小时前
手动编译 OpenCV 4.1.0 源码,生成 ARM64 动态库 (.so),然后在 Petalinux 中打包使用。
前端·webpack·node.js
聪明的笨猪猪10 小时前
Java SE “JDK1.8新特性”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试