目录

一、浮动(float):让盒子从垂直变水平

1.1、核心作用

1.2、基本使用

1.3、浮动的核心特点(脱标特性)

1.4、关键注意点

1.5、清除浮动:解决父元素高度塌陷问题

为什么要清除浮动?

方法 1:额外标签法

核心原理

代码实现

优缺点

方法 2:父元素固定高度法

核心原理

代码实现

优缺点

方法 3:父元素 overflow:hidden 法

核心原理

代码实现

优缺点

方法 4:双伪元素清除法(推荐)

核心原理

代码实现

优缺点

方法对比与实战选型建议

二、定位(position):让元素精准摆放在任意位置

2.1、核心作用

2.2、定位的使用规则

2.3、四大定位方式

2.4、偏移值设置

2.5、经典布局:子绝父相

2.6、元素层级控制:z-index

使用场景

基本使用

注意点

2.7、定位的注意点


        在 CSS 网页布局中,浮动(float)和定位(position)是实现非标准流布局的核心手段,浮动主打水平布局实现,定位侧重元素精准摆放与层叠控制

一、浮动(float):让盒子从垂直变水平

1.1、核心作用

打破 HTML 标签默认的垂直标准流布局,实现盒子水平排列(如左、右分栏,导航栏横向排列),是网页横向布局的基础。

1.2、基本使用

  1. 属性名:float
  2. 核心属性值:left(元素向左浮动)right(元素向右浮动)
  3. 案例:
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<style>
  * {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
  }

  .big-box {
    width: 200px;
    height: 50px;
    background-color: yellow;
  }

  .small-box1 {
    /* 左浮动 */
    float: left;
    width: 50px;
    height: 50px;
    background-color: red;
  }

  .small-box2 {
    /* 右浮动 */
    float: right;
    width: 50px;
    height: 50px;
    background-color: blue;
  }
</style>

<body>
  <div class="big-box">
    <div class="small-box1">左浮动</div>
    <div class="small-box2">右浮动</div>
  </div>
</body>

</html>

1.3、浮动的核心特点(脱标特性)

浮动元素会脱离标准流(简称:脱标),这是其所有特性的根源,具体表现为:

  1. 不占标准流位置:浮动元素从标准流中 “飘起”,下方标准流元素会向上填充其原本位置;
  2. 层级略高:浮动元素比标准流元素高半个级别,可覆盖标准流元素;
  3. 同行排列:浮动找浮动,多个浮动元素会在同一行依次排列(空间不足则换行);
  4. 受边界限制:浮动元素会受上方元素的边界影响,不会超出父元素或上方元素的范围;
  5. 行内块特性:浮动元素自带 “行内块” 效果,一行可显示多个,且能自由设置宽高。

1.4、关键注意点

浮动元素无法通过 text-align:center(父元素居中)或 margin:0 auto(自身居中)实现水平居中,需通过其他布局方式辅助。

1.5、清除浮动:解决父元素高度塌陷问题

在 CSS 布局中,浮动(float)会让元素脱离标准流,导致父元素高度塌陷、后续元素布局错乱等问题。

为什么要清除浮动?

示例代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<style>
  * {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
  }

  .big-box {
    border: 1px solid pink;
  }

  .small-box1 {
    float: left;
    width: 50px;
    height: 50px;
    background-color: red;
  }

  .small-box2 {
    float: right;
    width: 50px;
    height: 50px;
    background-color: blue;
  }

  .box3 {
    /* width: 200px; */
    height: 200px;
    background-color: black;
  }
</style>

<body>
  <div class="big-box">
    <div class="small-box1">左浮动</div>
    <div class="small-box2">右浮动</div>

  </div>
  <div class="box3">
  </div>
</body>

</html>

示例代码中,.big-box 作为父容器,内部子元素.small-box1(左浮动)、.small-box2(右浮动)脱离了标准流,若不清除浮动,.big-box 会失去高度(无法被子元素撑开),导致下方的 .box3 会向上 “贴” 到浮动元素下方,破坏整体布局。

方法 1:额外标签法

核心原理

在所有浮动子元素的最后面,添加一个空的块级元素,给该元素设置 clear: both(清除左右两侧的浮动影响),让父元素能识别到浮动元素的高度,从而撑开父容器。

代码实现
<style>
  .clearfix {
    clear: both; /* 核心属性:清除左右浮动 */
  }
</style>
  <div class="big-box">
    <div class="small-box1">左浮动</div>
    <div class="small-box2">右浮动</div>
    <!-- 新增空标签清除浮动 -->
    <div class="clearfix"></div>
  </div>
优缺点
  • 优点:原理简单、新手易理解,兼容性极好(支持所有浏览器);
  • 缺点:违背 “结构与样式分离” 的原则,新增无意义的空标签,增加 HTML 冗余,维护成本高。

方法 2:父元素固定高度法

核心原理

直接给浮动元素的父容器设置固定高度,强制父容器拥有高度,即使子元素浮动脱标,父容器也不会塌陷,间接 “规避” 浮动带来的布局问题。

代码实现
.big-box {
  height: 400px; /* 固定父元素高度 */
  border: 1px solid pink;
  }
优缺点
  • 优点:操作简单,无需额外 CSS/HTML 代码;
  • 缺点:仅适用于父元素高度固定的场景(如导航栏),若子元素高度变化(如响应式布局、动态内容),会导致布局错位,灵活性极差。

方法 3:父元素 overflow:hidden 法

核心原理

给父容器设置 overflow: hidden,触发 BFC(块级格式化上下文)。BFC 的特性是 “包裹内部浮动元素”,能让父容器自动识别浮动子元素的高度,从而清除浮动影响。

代码实现
.big-box {
  border: 1px solid pink;
  overflow: hidden; /* 触发BFC清除浮动 */
  }
优缺点
  • 优点:代码简洁,无需新增标签,兼容性较好;
  • 缺点:若子元素有超出父容器的内容(如下拉菜单、弹出层),会被 overflow: hidden 裁剪隐藏;无法用于需要显示溢出内容的场景(如自定义滚动条、悬浮提示)。

方法 4:双伪元素清除法(推荐)

核心原理

利用 CSS 伪元素 ::before 和 ::after,在父容器的内部首尾添加虚拟元素,通过 ::after 实现 “额外标签法” 的效果(清除浮动),::before 解决父容器顶部 margin 塌陷问题,是 “额外标签法” 的无侵入优化版。

代码实现
/* 双伪元素清除浮动的通用类 */
.clearfix::before,
.clearfix::after {
  content: ""; /* 伪元素必须设置content,空内容即可 */
  display: table; /* 转换为表格元素,解决margin塌陷 */
}
.clearfix::after {
  clear: both; /* 核心:清除左右浮动 */
}
<div class="big-box clearfix"> <!-- 父容器添加clearfix类 -->
  <div class="box1">我是第一个div</div>
  <div class="box2">我是第二个div</div>
</div>
优缺点
  • 优点:无冗余 HTML 标签,符合 “结构与样式分离”;同时解决浮动塌陷和 margin 塌陷问题;兼容性好(支持 IE8 + 及现代浏览器);可封装为通用类,全站复用;
  • 缺点:相比overflow:hidden代码稍多。

方法对比与实战选型建议

清除浮动方法

核心原理

优点

缺点

适用场景

额外标签法

新增标签 + clear:both

简单易理解、兼容性好

冗余标签、违背结构样式分离

临时调试、极老项目兼容

父元素固定高度法

强制父容器高度

操作最简单

高度固定、灵活性差

高度固定的静态布局(如导航栏)

overflow:hidden 法

触发 BFC 包裹浮动元素

代码简洁、无冗余

裁剪溢出内容

无溢出内容的简单布局

双伪元素法

伪元素 + clear:both

无冗余、通用、功能全

代码稍多

企业级项目、响应式布局(推荐)

二、定位(position):让元素精准摆放在任意位置

2.1、核心作用

突破标准流 / 浮动限制,实现元素精准定位 + 层叠控制,适配悬浮、固定、精准摆放场景。

2.2、定位的使用规则

定位的使用必须满足两步走,缺一不可:

  1. 设置定位方式:通过position属性定义元素的定位规则;
  2. 设置偏移值:left/right/top/bottom偏移值确定元素的具体位置。

2.3、四大定位方式

CSS 提供四种定位方式,其中静态定位为默认值,相对、绝对、固定定位为核心,三者均需配合偏移值使用。

定位方式

属性值

定位参考

是否脱标

核心特点 & 应用场景

静态定位

static

无(遵循标准流)

CSS 默认定位,无偏移值,仅用于取消其他定位,几乎无实战场景

相对定位

relative

元素自身原本的标准流位置

1. 小范围移动元素(不影响其他布局);2. 配合绝对定位实现 “子绝父相”,作为绝对定位的参考容器

绝对定位

absolute

最近的非静态定位(relative/absolute/fixed) 父元素,无则参考浏览器可视区域

精准定位子元素,需依赖父元素的相对定位,实现元素在父容器内的自由摆放

固定定位

fixed

浏览器可视区域

元素固定在屏幕某个位置,滚动页面时位置不变,适用于悬浮导航、回到顶部按钮、固定广告等

2.4、偏移值设置

偏移值分为水平垂直两个方向,每个方向任选一个属性使用(就近原则:离哪边近用哪个),属性值均为数字 + px

方向

偏移属性

含义

水平

left

元素距离左侧的距离

水平

right

元素距离右侧的距离

垂直

top

元素距离顶部的距离

垂直

bottom

元素距离底部的距离

2.5、经典布局:子绝父相

这是 CSS 定位中最常用的实战技巧,解决绝对定位的参考容器问题。

  1. 含义:子元素设置绝对定位(absolute),父元素设置相对定位(relative)
  2. 核心好处:父元素相对定位不脱标,对整体网页布局无影响,同时能让子元素以父元素为参考进行精准定位;
  3. 注意:父元素只需是 “非静态定位” 即可,但若设置 absolute/fixed 会脱标,因此 relative 是最优选择。

2.6、元素层级控制:z-index

使用场景

多个定位元素(脱标元素)重叠时,控制元素的上下层叠顺序。

基本使用

  • 属性名:z-index
  • 属性值:纯数字(无单位,如 1、10、100),默认值为 0;
  • 规则:数字越大,元素层级越高,越显示在顶层;层级相同则遵循 “后来者居上”。

注意点

z-index仅对定位元素生效(relative/absolute/fixed),标准流和浮动元素无法使用。

2.7、定位的注意点

  1. 定位元素脱标后,宽高默认由内容撑开,需手动设置宽高以实现预期效果;
  2. 固定定位元素始终参考浏览器可视区域,即使父元素设置了定位,也不会改变其参考对象;
  3. 绝对定位的父元素若未设置宽高,会随子元素的宽高自适应,需按需控制。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐