news 2026/3/31 4:41:52

一文搞定前端CSS常用布局

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一文搞定前端CSS常用布局

1.浮动

本意

浮动最初的设计目的是为了实现文本环绕图片的效果,类似于报纸或杂志中常见的排版方式。通过给图片应用 float: left; 或 float: right;,可以使文字围绕图片排列。
优点:

简单实现文本环绕效果:这是浮动最原始且有效的用途。
布局灵活性:

1.当元素需要支持宽高的时候,并横向排列的时候,就可以用浮动

2.当元素一左一右进行排列,用浮动会比较方便(早期)
缺点

破坏文档流:使用浮动后,元素会脱离正常的文档流,导致父级元素的高度塌陷问题,需要额外清除浮动(如使用 clear:both; 或者 overflow 属性设置为 hidden 等方法)。
维护复杂性增加:随着页面复杂度的增加,管理多个浮动元素变得困难,容易出现意外的布局行为。
不适合复杂的响应式设计:浮动对于现代响应式设计的支持不够友好,难以处理不同屏幕尺寸下的自适应需求。
实现代码如下

float left 左浮动 right 右浮动 none 不浮动

清浮动

不是把浮动清掉,是用来处理浮动元素脱离文档流,造成父级高度为0,页面蹿行的问题的操作,就是清浮动。 理解父级的高度,由于是利用子级的高度撑开的,如果子级浮动,脱离文档流,会造成父级高度为0,下面的元素会由于正 常文档流的原因,造成蹿行。

清浮动方式:

1.父级也浮动 弊端:左右居中会失效,通篇全是浮动 可以理解为:父级如果有浮动,子级不需要做清浮动的操作 2.父级加display:inline-block 弊端:左右居中会失效 可以理解为:父级如果有display:inline-block,子级不需要做清浮动的操作 3.给父级加高度 弊端:不利于扩展 可以理解为:父级如果有固定高度,并且万年不变,子级不需要做清浮动的操作 4.给父级加overflow:hidden; 弊端:裁刀,子级超出的部分会被干掉 overflow hidden 溢出隐藏 auto 出现滚动条 scroll 出现滚动条 5.伪类清浮动 弊端:代码太长,需要封装重复调用 clear: 就是表示元素的某一侧不允许出现浮动元素。 left 左边不许有 right 右边不许有 both 两边不许有 none 没有用 结构 样式 行为 三者分离 :after 表示也标签的后面插入一个内容 1.第一步: 在标签后面插入一个内容 #box1:after{ content:''; } 2.第二步: 把这个空字符变成块类型 #box1:after{ content:''; display:block; } 3.第三步: 通过clear:both;来清浮动 #box1:after{ content:''; display:block; clear:both; }

目前浮动布局已经被淘汰,尽量不要再项目中使用浮动

2.定位

定位是一种更加高级的布局手段;通过定位可以把元素放到页面的任意位置; 使用position属性来设置定位; 可选值:static:默认值,元素静止,不开启定位;relative:开启元素的相对定位; absolute:开启元素的绝对定位 fixed:开启元素的固定定位;sticky:开启元素的粘滞定位;

优点

精准控制:可以非常精确地放置元素,适用于创建固定头部、侧边栏等需要精确定位的组件。

支持层叠上下文:通过 z-index 属性,能够控制元素之间的堆叠顺序,这对于构建层次丰富的界面至关重要。

局部调整:相对定位不会改变元素在文档流中的位置,但允许对其进行微调,适合用于局部修正布局。

缺点

过度依赖可能导致布局僵硬:如果滥用绝对定位,可能会导致页面布局失去流动性,难以适应不同的屏幕尺寸和设备类型。

影响可访问性:某些情况下,绝对定位可能会影响内容的实际阅读顺序,从而对可访问性和搜索引擎优化产生负面影响。

维护成本较高:当页面结构发生变化时,基于定位的布局可能需要大量修改才能保持正确的显示效果。

下面我们细致讲一下区别

元素层级

z-index只在“定位元素”(即position值为relativeabsolutefixedsticky的元素)上生效。值越大越先显示

父元素的层级再高也不会盖住子元素;

偏移量
当元素开启定位以后,我们可以通过偏移量来设置元素位置;
top:定位元素和定位位置上边的距离;
bottom: 定位元素和定位位置下边的距离;
定位元素垂直方向的位置由top和bottom两个属性来控制;
top值越大,定位元素越往下移动;
bottom值越大,元素越往上移动;
left:定位元素和定位位置左侧的距离;
right:定位元素和定位位置右侧的距离;
定位元素水平方向的位置由left和right两个属性控制;
left值越大,定位元素越靠右;
right值越大,定位元素越靠左;
top和bottom通常只用一个;
left和right通常也只用一个;

2.1相对定位

1.元素开启相对定位后,如果不设置偏移量,元素不会发生任何改变;
2.相对定位是参照元素在文档流中的位置进行定位的;
3.相对定位会提升元素的层级;
4.相对定位不会脱离文档流;
5.相对定位不会改变元素的性质,块还是块,行内还是行内;
效果图如下:

2.2绝对定位

开发中常用子绝父相 来进行页面布局 (子类使用绝对定位,父类使用相对定位)

1.开启绝对定位后,若不设置偏移量,元素的位置不会发生任何改变;
2.开启绝对定位后,元素会从文档流中脱离;
3.绝对定位会提高元素的层级;
4.绝对定位会改变元素的性质,行内变成块,高度由内容撑开;
5.绝对元素是相对于其包含块进行定位的;
包含块:
正常情况下,包含块就是当前元素最近的祖先块元素;
绝对定位元素的包含块,就是离它开启了定位的祖先元素,若所有的祖先元素都没有开启定位,则相对于根元素进行定位;

效果图如下:
有父元素开启定位

无父元素开启定位

2.3固定定位

1.固定定位也是一种绝对定位,所以固定定位的大部分特点与绝对定位一样;
2.唯一不同的是固定定位永远相对于浏览器的视口进行定位;
3.视口是固定不动的,根元素会根据滚动条的滑动而滑动;
4.固定定位不会跟随页面的移动而移动;

一般用于返回顶部按钮、悬浮客服、固定导航栏

示例代码如下:

2.4粘贴定位

粘滞定位与相对定位的特点基本一致; 不同的是粘滞定位可以在元素到达某个位置时将其固定;

示例代码如下:

3.弹性布局(flex布局)

"弹性布局" 用来为盒状模型提供最大的灵活性 任何一个容器都可以指定为flex布局, 当我们为父盒子设置为flex布局以后 子元素的float clear 和vertical-align属性将会失效,伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局在flex布局中,是分为主轴和侧轴两个方向,同样的叫法有:行和列、x轴和y轴,默认主轴方向就是x轴方向,水平向右,默认侧轴方向就是y轴方向,水平向下


注意:当父元素开启弹性布局之后,直接子元素提升为“弹性项目(flex items),行内元素状态改变,可以支持盒模型样式,但并不是变成块状元素

示例代码如下:

常用属性如下

类别属性常用值作用说明典型使用场景
容器(父元素)displayflex
inline-flex
启用弹性布局所有 Flex 布局的起点
flex-directionrow(默认)
row-reverse
column
column-reverse
设置主轴方向(子项排列方向)水平导航栏(row
垂直菜单(column
justify-contentflex-start(默认)
flex-end
center
space-between
space-around
space-evenly
主轴对齐方式(水平/垂直取决于主轴)居中按钮(center
两端对齐导航(space-between
align-itemsstretch(默认)
flex-start
flex-end
center
baseline
侧轴单行对齐方式垂直居中(center
等高卡片(stretch
flex-wrapnowrap(默认)
wrap
wrap-reverse
是否允许换行响应式标签列表(wrap
align-contentflex-start
center
space-between
stretch(默认)
多行在侧轴上的分布(仅当flex-wrap: wrap时有效)多行项目整体居中
项目(子元素)flex0 1 auto(默认)
1(=1 1 0%
0 0 200px
缩写:flex-grow flex-shrink flex-basis
控制伸缩与基础尺寸
自适应内容区(flex: 1
固定侧边栏(flex: 0 0 200px
align-selfauto(默认)
flex-start
center
flex-end
单个项目覆盖align-items的对齐方式聊天消息左右错位
order整数(默认0改变显示顺序(数值越小越靠前)特殊排序需求(慎用)

3.1 flex-direction 设置主轴方向

flex-direction属性决定主轴的方向(即项目的排列方向)注意:主轴和侧轴是会变化的,就看flex-direction设置谁为主轴,剩下的就是侧轴。而我们的子元素是跟着主轴来排列的

默认值:row 默认从左往右

row-reverse 从右往左

column 从上到下

column-reverse 从下到上

3.2 justify-content : 设置主轴上的子元素的排列方式

默认flex-start 从头部开始 如果主轴是x轴 则从左到右

flex-end 从尾部开始排列

center 在主轴居中对齐(如果主轴是x轴 则水平居中)

space-around 平分剩余空间

space-between 先两边贴边 再平分剩余空间

3.3flex-wrap : 设置子元素是否换行

默认情况下 项目都排在轴线上 flex-wra属性默认是不换行的 当子元素宽度排列大于父元素宽度时默认不换行,而是缩小每个子元素来达到适应父元素的宽度

nowrap 默认 不换行

wrap: 换行

换行了,但是中间有空格,因为flex容器高度固定,两行内容总高度只有 200px(每行 100px),剩余 空间 被平均分配到两行之间的空白区域,使得第二行看起来“上下等距”。

3.4align-items : 设置侧轴上的子元素的排列方式(单行)

该属性是控制子项在侧轴(默认是y轴)上的排列方式在子项为单项(单行)的时候使用

flex-start : 默认 从上到下

flex-end : 从下到上

center 居中

stretch : 拉伸 注意在使用时子元素不要设置高度

3.5align-content : 设置侧轴上的子元素的排列方式(多行)

设置子项在侧轴上的排列方式并且只能用于子项出现换行的情况(多行),在单行下是没有效果的

flex-start : 默认 在侧轴的头部开始排列

flex-end : 在侧轴的尾部开始排列

center : 在侧轴中间显示

space-around : 子项在侧轴平分剩余空间

space-between : 子项在侧轴先贴在两头 再平分剩余空间

3.6 flex-flow:复合属性

相当于同时设置了 flex-direction 和 flex-wrap

3.7 flex : 子项目占的份数

flex:1 等价于 flex:1 1 0%

复合属性如下:

部分含义
flex-grow放大比例(如何分配容器剩余空间)1
flex-shrink缩小比例(空间不足时如何压缩)1
flex-basis基准尺寸(在分配空间前的初始大小)0%

3.8 align-self : 控制子项自己在侧轴的排列方式

align-self 属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性

3.9 order : 定义子项的排列顺序 (前后顺序)

数值越小,可以为负数,排列越靠前,默认为0。注意:和z-index 不一样。

4.二维布局(grid布局)

Grid布局是CSS中一种强大的二维布局系统,允许开发者在行和列两个维度上精确控制元素的位置和大小。与Flexbox(一维布局)不同,Grid适用于复杂布局需求,如网页整体结构、仪表盘等。

常用属性如下:

类别属性作用说明常用值 & 含义典型使用场景
容器
(父元素)
display启用 Grid 布局grid:块级网格
inline-grid:行内网格
所有 Grid 布局起点
grid-template-columns定义列的数量和宽度100px 200px:固定列宽
1fr 2fr:弹性分配剩余空间
repeat(3, 1fr):重复3列等宽
repeat(auto-fill, minmax(150px, 1fr)):响应式卡片布局
多列布局、侧边栏+主内容、响应式网格
grid-template-rows定义行的数量和高度80px auto 1fr:头部固定、中间自适应
repeat(2, 200px):两行等高
页面分区(header/main/footer)
gap
(或row-gap/column-gap
设置行列之间的间距gap: 16px:行列同间距
gap: 10px 20px:行10px,列20px
卡片/图片网格间距,替代 margin
justify-items控制所有项目在单元格内的水平对齐start(左)
center(居中)
end(右)
stretch(拉伸,默认)
让所有卡片内容水平居中
align-items控制所有项目在单元格内的垂直对齐start(上)
center(居中)
end(下)
stretch(拉伸,默认)
让所有卡片内容垂直居中
justify-content当网格总宽 < 容器宽时,整体网格水平对齐center:整体居中
space-between:两端对齐
start:靠左(默认)
项目少时让网格居中显示
align-content当网格总高 < 容器高时,整体网格垂直对齐center:垂直居中
space-around:上下等间距
高度固定容器中垂直居中网格
grid-template-areas通过命名区域定义布局结构"header header" "nav main"
"."表示空单元格
清晰表达页面结构(如博客、后台)
项目
(子元素)
grid-column控制项目跨列范围2 / 4:从第2线到第4线(跨2列)
span 3:向右跨3列
1 / -1:通栏(占满整行)
横幅、标题跨多列
grid-row控制项目跨行范围1 / 3:跨2行
span 2:向下跨2行
侧边栏纵向延伸
grid-area两种用途
1. 放入命名区域
2. 简写行列范围
grid-area: main;(配合命名区域)
grid-area: 1 / 2 / 3 / 4;(= row 1-3, col 2-4)
快速定位或实现复杂跨区
justify-self单个项目在单元格内水平对齐(覆盖justify-itemscenter,end,stretch特殊按钮靠右对齐
align-self单个项目在单元格内垂直对齐(覆盖align-itemsstart,center,end某个卡片顶部对齐

光看文字还是乏力,下面代码演示:

4.1grid-template-column定义列的数量和宽度

grid-template-column可以填写px(像素) fr(比例等分),auto(自适应) 等单位

4.2grid-template-rows设置行列之间的间距

4.3justify-content水平对齐和align-content垂直对齐

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 0:16:48

赋能精准测温——电子体温计方案开发全解析

在后疫情时代健康意识全面觉醒的背景下&#xff0c;家用医疗健康设备市场迎来了前所未有的发展机遇&#xff0c;电子体温计作为家庭健康监测的核心刚需产品&#xff0c;其精准性、便捷性、安全性需求持续升级。为响应市场号召&#xff0c;夯实公司在健康科技领域的布局&#xf…

作者头像 李华
网站建设 2026/3/29 15:56:24

阿里 TOC(超时中心)深度解析:设计原理与实现方式

阿里TOC&#xff08;Timeout Center&#xff0c;超时中心&#xff09;是集团内部统一的分布式超时任务中台&#xff0c;并非简单的定时任务工具&#xff0c;而是为解决海量业务&#xff08;订单、退款、物流、营销等&#xff09;的超时场景而生&#xff0c;核心解决“精准触发、…

作者头像 李华
网站建设 2026/3/31 1:13:36

【CMake】在CMake项目中,Vcpkg、Conan或Spack用于C++依赖

#【CMake】在CMake项目中&#xff0c;Vcpkg、Conan或Spack用于C依赖 我最近用过一点 Vcpkg&#xff0c;也在更好地了解它。我也看过 Conan&#xff0c;但最近没怎么深入研究 Spack。我从开发者的角度来看&#xff0c;想改进第三方依赖的处理。这并不是要穷尽一切&#xff0c;而…

作者头像 李华
网站建设 2026/3/29 11:28:08

云手机 互联网 云端科技

云手机是云端科技在互联网环境下的具体应用&#xff0c;依托互联网与云端服务器相连&#xff0c;借助云端科技实现相关功能&#xff0c;三者紧密相关。互联网是连接用户与云手机的桥梁&#xff0c;用户通过互联网向云端服务器发送操作指令&#xff0c;如打开应用、播放视频等&a…

作者头像 李华
网站建设 2026/3/27 16:52:25

从待机功耗到峰值调度:智能Agent能源管理全流程详解

第一章&#xff1a;智能Agent能源管理的演进与挑战随着分布式计算和边缘智能的快速发展&#xff0c;智能Agent在能源管理系统中的角色日益关键。从早期基于规则的控制逻辑&#xff0c;到如今融合强化学习与联邦学习的自主决策系统&#xff0c;智能Agent已能动态响应电网负载、用…

作者头像 李华
网站建设 2026/3/26 20:30:11

Newtonsoft.Json 与 System.Text.Json 多态反序列化的安全性差异解析

多态反序列化是处理继承结构对象序列化的常见需求&#xff0c;但不同 JSON 序列化库的实现机制差异会带来显著的安全风险。微软 CA2326 规则明确警示&#xff1a;避免使用非安全的 JsonSerializerSettings 配置&#xff08;如 Newtonsoft.Json 的 TypeNameHandling 非 None 值&…

作者头像 李华