在CSS布局中,盒模型是构建页面结构的基础。每一个HTML元素都可以被视为一个矩形盒子,由内容区(content)、内边距(padding)、边框(border)和外边距(margin)组成。
box-sizing:
box-sizing: border-box; 可使 width 包含 padding 和 border,即整个盒子的实际宽度。border-box
当设置 box-sizing: border-box; 后,width 表示的是 content + padding + border 的总宽度,便于精确控制布局尺寸。
width/height
box-sizing 可实现对整体盒子宽度的精准控制padding
border
margin
margin: auto
CSS支持多种属性的简写语法,提升代码简洁性:
padding: 20px 10px 60px 80px; /* 顺序为:上 右 下 左 */
padding: 20px 10px; /* 上下为20px,左右为10px */
该规则同样适用于 margin 等四边属性。
当两个块级元素在垂直方向相邻时,它们之间的实际间距并非两者 margin 之和,而是取其中较大的那个值,这种现象称为“margin 塌陷”。
因此,在设置垂直间距时,通常只需为上方元素设置 margin-bottom 即可。
而水平方向上的 margin 则正常相加,无塌陷现象。
利用 margin: 0 auto; 可使块级子元素在其父容器中水平居中。
前提条件:必须显式设置子元素的 width,否则该方式无效。
margin=0 auto
尽管现代布局中 flex 更为流行,但此方法仍是一种简单高效的居中方案。
p { },选中所有 p 标签.class { },选中具有指定 class 的元素#id { },选中特定 ID 的元素.class li { }div > p { }div.box { }.box, p, #we { }当前主流布局策略强调组合使用 Grid(二维布局)、Flexbox(一维对齐)、Gap(间距管理)以及流体单位(如 fr、%、vw),形成灵活响应式结构。
控制项目在主轴方向上的排列方式(默认为水平方向):
flex-start |
左对齐(默认) | 适用于表单标签+输入框的标准布局 |
flex-end |
右对齐 | 常用于页面底部操作按钮组 |
center |
完全居中 | 适合导航栏logo或加载动画居中展示 |
space-between |
两端对齐,中间等距分布 | 【最常用】适用于导航菜单、卡片列表、页头页脚 |
space-around |
均匀分布,首尾间距为项目间距的一半 | 适合图标按钮组,避免紧贴边缘 |
space-evenly |
所有间距完全相等 | 应用于相册布局、仪表盘指标卡片 |
flex-start
flex-end
center
space-between
space-around
space-evenly
特例说明:当主轴为垂直方向时,水平居中需依赖交叉轴属性处理。
flex-direction=colum
align-items:
负责控制项目在交叉轴方向的对齐方式(默认为垂直方向):
stretch |
拉伸填满容器(默认) | 适用于卡片布局、侧边栏菜单 |
flex-start |
顶部对齐 | 常见于图文混排卡片、标签云 |
flex-end |
底部对齐 | 用于价格对比表、页脚操作区 |
center |
垂直居中 | 【最常用】适用于导航菜单、图标+文字组合、模态框 |
baseline |
基线对齐(基于文字底部) | 适用于带图标的按钮、表单提示信息 |
stretch
flex-start
flex-end
center
baseline
类似地,若交叉轴变为水平方向,则对应调整为水平对齐行为,原理一致。
决定容器内项目是否换行及换行方向:
nowrap:不换行(默认),项目被压缩以适应容器 —— 适用于导航栏、工具栏wrap:自动换行,从上至下排列 —— 常见于响应式卡片、标签云、图片画廊wrap-reverse:换行且从下至上堆叠 —— 多用于特殊视觉效果,较少使用nowrap
wrap
wrap-reverse
用于控制项目如何占用主轴空间:
flex: 1;)可让项目按比例填充剩余空间flex: none; 表示固定大小,不受容器影响flex:none
flex:1
典型应用:构建自适应布局,如侧边栏与主内容区的比例分配。
定义项目的排列方向,即主轴方向:
row:从左到右(默认)row-reverse:从右到左column:从上到下column-reverse:从下到上通过 position 属性实现元素精确定位,常见值包括 static、relative、absolute、fixed、sticky。
传统浮动布局方式,主要用于文本环绕图像或创建多列布局,现多被 Flex 和 Grid 替代。
用于描述元素的特殊状态:
合理使用伪类可增强用户体验,并减少额外的JavaScript逻辑。
用于创建不在DOM中的虚拟元素,常用于装饰性内容插入:
::before、::after、::first-line、::first-lettercontent 属性使用,即使为空也要声明例如,可通过 ::before 和 ::after 实现边框线条、气泡提示等视觉效果。
专用于伪元素中,定义插入的内容,可以是字符串、计数器、引用属性等。
针对列表项的特殊选择需求,可通过如下方式:
li:first-of-type:选中首个同类列表项li:last-child:最后一个子元素为 li 的情况li:nth-child(odd):奇数位置的列表项可用于实现隔行变色、首尾特殊样式等效果。
掌握 CSS 盒模型与布局机制是前端开发的核心技能之一。结合现代布局方式(如 Flex 与 Grid),能够高效实现复杂且响应式的界面设计。
理解伪类与伪元素的区别与应用场景,有助于提升样式的表达能力与维护性。
水平排列(从左到右,默认方向)常用于导航栏、按钮组以及水平列表等界面元素的排布。
row
在需要支持RTL(从右到左)语言的场景中,采用水平从右到左的布局方式,适用于阿拉伯语、希伯来语等语言环境,也可用于特殊视觉顺序的设计需求。
row-reverse
垂直从上到下的排列是最常见的布局形式,广泛应用于手机端菜单、表单输入项、垂直步骤条等结构化内容展示。
column
垂直从下到上的排列较为少见,主要用于实现特殊的动效或交互体验,使用频率较低。
column-reverse
自动 margin:通过设置 margin 为 auto 实现剩余空间的自动填充,是实现布局对齐最常用的方式之一。例如,在导航栏中将“登录”按钮靠右对齐即可使用该方法。
margin: auto
绝对定位(absolute):通过计算具体边距进行精确定位。使用时需注意,当项目应用 absolute 定位时,其父容器应设置为 relative,以确保定位基准正确:
.container {
position: relative; /* 使子元素基于此容器定位 */
}
position:absolute
| 属性值 | 在 Flex 容器中的行为 | 是否脱离文档流 | 典型应用场景 |
|---|---|---|---|
| static / relative(默认) | 正常参与 Flex 布局 | 否 | 默认状态,无需额外定位处理 |
| relative | 保持原有 Flex 空间,仅进行位置偏移 | 否 | 微调元素位置,或作为其他元素的定位参照 |
| absolute | 完全脱离 Flex 布局,不影响其他项目排列 | 是 | 角标、删除图标、下拉菜单等浮动组件 |
| fixed | 脱离 Flex,相对于视口定位 | 是 | 悬浮按钮、固定导航栏、模态框 |
| 混合使用(如 sticky) | 行为复杂,不完全受 Flex 控制 | 混合 | 表头固定等高级布局(建议谨慎使用) |
注意事项:
使用 absolute 定位时,元素会相对于最近的非 static 定位祖先元素进行偏移。
fixed 定位则始终相对于浏览器视口(viewport)进行固定。
补充说明:
非 static 定位的元素具有层叠上下文,可通过 z-index 控制堆叠顺序,数值越大越靠前。
对于 static 元素,z-index 属性无效。
z-index:
在现代布局中,float 已基本被 flex 和 grid 取代,但在处理文字环绕图片等传统排版需求时仍有应用价值。
伪元素(::before 和 ::after)必须配合 content 属性使用,常见用法包括:
.element::before {
content: ""; /* 插入空内容(最常用) */
content: "文本"; /* 添加字符串 */
content: url(icon.png); /* 引入图片资源 */
content: counter(number); /* 显示计数器值 */
}
伪元素默认为行内(inline)显示类型,位于宿主元素内容之前(::before)或之后(::after)。
可通过为宿主元素设置 relative 定位,并对伪元素使用 absolute 定位来精确控制其位置:
.parent {
position: relative; /* 创建定位上下文 */
}
.parent::before,
.parent::after {
position: absolute;
content: ''; /* 必须声明 */
}
p:hover:鼠标悬停时触发样式p:active:鼠标点击按下时生效注意: hover 样式规则必须写在 active 之前。因为当点击时元素同时处于 :hover 和 :active 状态,后定义的样式会覆盖前者。
当元素被点击并获得焦点时,可使用 p:focus 设置对应样式。此外,伪类还可影响其他相关元素:
div:hover > span { ... }div:hover + div { ... }可用于选中容器内的特定子元素,常见格式如下:
div>p:first-child{效果}
div>p:first-child
div>p:nth-child(n)
语法说明:括号中的 n 表示位置序号,“nth-child”为固定写法。例如:
ul > li:nth-child(3) {
background-color: #3687FC;
color: #FFFFFF;
}
该技术也可用于绘制边框线等视觉效果。使用时请先参考“伪元素位置”部分的方法,合理调整宿主与伪元素的关系。
若要对伪元素应用列表伪类,写法如下:
div:first-child::before {
/* 样式定义 */
}
border-radius: 50% 即可实现。利用 calc() 函数可动态计算尺寸,例如:
width: calc(100% - 200px);
表示元素宽度等于当前容器总宽度减去 200px,适用于响应式布局中的灵活适配。
扫码加好友,拉您进群



收藏
