主要布局技术如下:
-
浮动(Float): 最初用于文本环绕图像,但后来被用于布局。通过
float
属性,元素可以向左或向右移动,直到它的外边缘接触到包含框或另一个浮动元素的边缘。 -
定位(Positioning): 包括绝对定位(absolute)、相对定位(relative)、固定定位(fixed)和粘性定位(sticky)。这些属性允许元素相对于其正常位置或其包含元素进行定位。
-
显示属性(Display): 如
block
、inline
、inline-block
等,控制元素如何显示以及它们如何布局。 -
弹性盒子布局(Flexbox): 一种现代的布局模式,使得在各种大小的屏幕上对元素进行灵活排列变得更加简单。通过
display: flex
属性,可以轻松控制轴线、方向、对齐等。 -
网格布局(Grid): CSS网格布局是一个二维的布局系统,允许创建复杂的布局结构,提供行和列的布局控制。通过
display: grid
启用,并通过网格线、网格区域等进行布局控制。
浮动(Float)
CSS中的float
属性是一个用于实现元素的浮动布局的属性。当你对一个元素应用float
属性时,它会脱离正常的文档流,并向指定的方向移动,直到它的外边缘碰到包含框或另一个浮动元素的边缘为止。
float
属性主要有以下几个值:
left
:元素向左浮动。right
:元素向右浮动。none
:默认值,元素不浮动,并会显示在其在文档流中的正常位置。inherit
:继承父元素的float
属性。
使用float
时通常需要注意以下几点:
- 浮动元素会影响其周围元素的布局。非浮动元素可能会围绕浮动元素排列。
- 浮动可能导致父元素高度塌陷,因为浮动元素不再占据正常的文档流空间。这通常通过清除浮动(使用
clear
属性)来解决。 - 在现代网页布局中,
float
用得较少,Flexbox和Grid布局提供了更灵活和强大的布局选项。
定位(Positioning)
-
静态定位(Static Positioning):
- 默认方式
-
相对定位(Relative Positioning):
- 元素首先按照静态定位放置,然后相对于其正常位置进行偏移。
- 可以使用
top
,bottom
,left
,right
属性来指定偏移量。 - 元素仍然占据其在文档流中的空间。
-
-
绝对定位(Absolute Positioning):
- 元素脱离正常文档流,相对于最近的已定位(非static)祖先元素进行定位。不动了
- 使用
top
,bottom
,left
,right
属性来指定位置。 - 会覆盖
-
-
-
-
12345678910111213141516171819202122232425262728293031
<template>
<div
class
=
"container"
>
这是一个普通的容器。
<div
class
=
"absolute-box"
>
这是一个绝对定位的盒子。
</div>
</div>
</template>
<script>
export
default
{
name:
'AbsolutePositioningDemo'
}
</script>
<style>
.container {
border: 1px solid black;
padding: 20px;
width: 300px;
height: 300px;
}
.absolute-box {
position: absolute;
top: 50px;
left: 50px;
border: 1px solid red;
padding: 10px;
}
</style>
-
固定定位(Fixed Positioning):
- 类似于绝对定位,但是元素是相对于浏览器窗口进行定位的。
- 即使页面滚动,元素也会保持在相同的位置。
- 使用
top
,bottom
,left
,right
属性来指定位置。 - 元素不占据文档流中的空间。
-
-
粘性定位(Sticky Positioning):
- 是相对定位和固定定位的混合体。
- 元素根据正常文档流定位,但当页面滚动到达某个阈值时(如
top
设置的值),元素会像固定定位那样固定在页面上。 - 使用
top
,bottom
,left
,right
属性来指定阈值
显示属性(Display)
-
none
:- 元素不会被显示,完全从文档流中移除。
- 元素及其子元素都不会渲染,且不占据任何空间。
-
block
:- 元素会显示为块级元素。
- 可以设置宽度、高度、边距和填充。
-
-
inline
:- 元素会显示为内联元素。
- 不能设置宽度和高度。
-
table
,table-row
,table-cell
等:- 使元素表现得类似于HTML表格中的
<table>
,<tr>
,<td>
等标签。
- 使元素表现得类似于HTML表格中的
弹性盒子布局(Flexbox)
主要处理一维布局(行或列)
display: flex;
时,该元素变成了一个弹性容器,其直接子元素则成为弹性项目(flex items)
对齐:
justify-content
(沿主轴对齐)
-
flex-start:项目被对齐到容器的起始线。这是默认值,项目会排列在容器的开始处。
-
flex-end:项目被对齐到容器的结束线。项目会挤在容器的末端。
-
center:项目居中对齐。项目会集中在容器的中间。
-
space-between:项目之间的空间相等。第一个项目在容器的开始处,最后一个项目在容器的末端,其余项目则平均分布在它们之间。
-
space-around:项目周围的空间相等。每个项目两侧的空间相等,所以项目之间的空间是项目与容器边缘空间的两倍。
-
space-evenly:所有项目和边缘之间的空间都相等。这意味着每个项目之间的空间与项目与容器边缘的空间相同。
align-items
(沿交叉轴对齐)
-
flex-start:项目被对齐到容器的交叉轴起始线。项目将放置在容器交叉轴的开始处。
-
flex-end:项目被对齐到容器的交叉轴结束线。项目将放置在容器交叉轴的末端。
-
center:项目在交叉轴上居中对齐。项目将在容器的中间沿交叉轴对齐。
-
baseline:项目在容器的基线上对齐。所有项目的文本基线将对齐。
-
stretch:如果项目未设置固定高度(或宽度,取决于交叉轴的方向),它们将扩展以占据容器的整个交叉轴空间。这是默认值。
方向
网格布局(Grid)
处理二维布局,同时处理行和列
行和列:用来创建空间内容器的多少
固定大小的列:
1 | grid-template-columns: 100px 200px 300px; |
百分比大小的列:
1 | grid-template-columns: 20% 30% 50%; |
使用 fr 单位:
1 | grid-template-columns: 1fr 2fr 1fr; |
重复的列:
1 | grid-template-columns: repeat(4, 1fr); |
自动布局列:
1 | grid-template-columns: auto auto auto; |
跨行或跨列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!