flex布局与grid布局

本文详细介绍了CSS的多种布局方式。包括position、float、display布局,重点讲解了flex和grid布局。flex布局可通过多个属性控制项目位置和比例;grid布局能将网页划分成网格,通过众多属性指定行与列、设置间隔、定义区域等,实现多样布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

css布局

position布局

relative:相对于原位置来调整top,right,left,bottom且不会影响其他元素。

fixed:相对于视窗来定位;

absolute:相对于最近的“positioned”祖先元素除了static定位。如果绝对定位(position属性的值为absolute)的元素没有“positioned”祖先元素,那么它是相对于文档的 body 元素

float布局

使用漂浮后还是相对于父元素定位,但是可以溢出父元素;而且不会对文字造成影响,如果不溢出父元素的话,文字自动包围浮动块级元素。

另外浮动元素会使块级元素失去display:block;使两个会计元素位列与同一行。

若要是使浮动元素不溢出盒子,则需要令父元素盒子加上样式overflow:auto;(但是会有滚动条一个缺点是,在外部元素上使用边距和填充的某些组合可能会导致滚动条出现,但这可以通过将边距和填充放在另一个包含父元素的元素上来解决。)清理浮动

display布局

主要是改变行,块状态

flex布局

位置
flex-direction属性

flex-direction属性决定主轴的方向(即项目的排列方向)

flex-wrap属性

默认情况下,项目都排在一条线(又称"轴线")上。flex-wrap属性定义,如果一条轴线排不下,如何换行。

justify-content属性

justify-content属性定义了项目在主轴上的对齐方式。

align-items属性

align-items属性定义项目在交叉轴上如何对齐。

align-self属性(控制单个项目的位置)
比例
flex-grow属性(存在剩余空间时起作用)

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

flex-shrink属性(空间不足时起作用)

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。


Flex 布局教程:实例篇


grid布局

它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。(关键是要指定行与列)

grid-template-columns属性

定义每一列的列宽

grid-template-rows 属性

定义每一行的行高。

auto-fill 关键字

单元格的大小是固定的,但是容器的大小不确定。如果希望每一行(或每一列)容纳尽可能多的单元格,这时可以使用auto-fill关键字表示自动填充。

fr 关键字

如果两列的宽度分别为1fr和2fr,就表示后者是前者的两倍。

grid-row-gap 属性

grid-row-gap属性设置行与行的间隔(行间距)

grid-column-gap 属性

grid-column-gap属性设置列与列的间隔(列间距)

grid-template-areas 属性

网格布局允许指定"区域"(area),一个区域由单个或多个单元格组成。grid-template-areas属性用于定义区域。

.container {
  display: grid;
  grid-template-columns: 100px 100px 100px;
  grid-template-rows: 100px 100px 100px;
  grid-template-areas: 'a b c'
                       'd e f'
                       'g h i';
                       //上面代码先划分出9个单元,然后将其定名为a到i的九个区域,分别对应这九个单元格。
}

grid-auto-flow 属性

主要用于填满容器内的空格

划分网格以后,容器的子元素会按照顺序,自动放置在每一个网格。默认的放置顺序是"先行后列",即先填满第一行,再开始放入第二行,即下图数字的顺序。

justify-items 属性

(指项目里面的内容位置)
属性设置单元格内容的水平位置(左中右)

align-items

置单元格内容的垂直位置(上中下)

justify-content 属性

(指容器里面的项目位置)而且要在容器的width属性大于一行的width时起作用
整个内容区域在容器里面的水平位置(左中右)

align-content 属性

(指容器里面的项目位置)而且要在容器的height属性大于一列的height时起作用
整个内容区域的垂直位置(上中下)

grid-auto-columns 属性,grid-auto-rows 属性

用于处理新增或者多余的网格的长宽。若不设置的话就会由浏览器据其内容决定长宽。

项目的起始位置

grid-column-start属性:左边框所在的垂直网格线

grid-column-end属性:右边框所在的垂直网格线

grid-row-start属性:上边框所在的水平网格线

grid-row-end属性:下边框所在的水平网格线

可以指定网格线,也可以指定网格线名字

关键字span

表示"跨越",即左右边框(上下边框)之间跨越多少个网格

grid-area 属性

决定项目放在哪一个单元格中

justify-self 属性

在水平位置上用于单个项目间内容上的调整

align-self 属性

再垂直位置上调整单个项目的内容

### Flexbox 布局 CSS Grid 布局的区别及适用场景 #### 一、布局模型的本质区别 Flexbox 是一种 **一维布局模型**,主要用于处理单行或单列的布局需求。它的核心在于通过主轴(main axis)和交叉轴(cross axis)对齐元素,从而实现灵活的对齐、分布和顺序调整[^1]。而 CSS Grid 是一种 **二维布局模型**,允许同时定义行和列的布局结构,因此在处理复杂的多行多列布局时更加高效和直观[^2]。 #### 二、适用场景分析 - **Flexbox 的适用场景** Flexbox 更适合用于 **一维布局** 场景,例如水平导航栏、垂直列表、卡片式布局等。当需要在单一方向上对齐或分布元素时,Flexbox 是首选工具。例如,以下代码展示了一个简单的水平导航栏布局: ```html <style> .nav { display: flex; justify-content: space-around; align-items: center; } .nav-item { padding: 10px; } </style> <div class="nav"> <div class="nav-item">Home</div> <div class="nav-item">About</div> <div class="nav-item">Contact</div> </div> ``` 在上述示例中,`flex` 和 `justify-content` 属性确保了导航项在水平方向上的均匀分布[^2]。 - **CSS Grid 的适用场景** CSS Grid 更适合用于 **复杂多行多列布局** 场景,例如整个页面的网格化布局、仪表盘设计、图片画廊等。它可以通过明确的行列定义来精确控制每个元素的位置。以下是一个使用 CSS Grid 创建简单网格布局的示例: ```html <style> .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); grid-gap: 10px; } .grid-item { background-color: #f0f0f0; padding: 20px; text-align: center; } </style> <div class="grid-container"> <div class="grid-item">1</div> <div class="grid-item">2</div> <div class="grid-item">3</div> <div class="grid-item">4</div> <div class="grid-item">5</div> <div class="grid-item">6</div> </div> ``` 在这个例子中,`grid-template-columns` 定义了三列布局,而 `grid-gap` 控制了单元格之间的间距[^1]。 #### 三、局限性兼容性 - **Flexbox 的局限性** Flexbox 在处理复杂的多行多列布局时显得不够灵活。例如,当需要将多个元素分布在不同的行和列中时,Flexbox 需要借助额外的嵌套容器才能实现,这会增加代码复杂度[^1]。 - **CSS Grid 的局限性** 虽然 CSS Grid 功能强大,但在某些旧版浏览器(如 IE 系列)中可能存在兼容性问题。因此,在实际开发中需要考虑目标用户的浏览器环境,并做好降级方案[^1]。 #### 四、实际开发中的建议 为了充分发挥两种布局模型的优势,可以结合使用它们。例如,可以使用 CSS Grid 布局整个页面的结构,然后在某些区域使用 Flexbox 进行内部布局。这种混合使用的方式能够兼顾复杂布局的需求和局部对齐的灵活性。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值