前端flex、grid布局

flex布局

弹性布局是指通过调整其内元素的宽高,从而在任何的显示设备上实现对可用显示空间最佳填充的能力。弹性容器扩展其内元素来填充可用空间,或将其收缩来避免溢出

简单来说,弹性盒子模型,是为了你的网页可以在不同分辨率设备上自适应展示而生的一种布局方式

以下面的例子来理解弹性布局:

<div id="main">
  <div style="background-color:coral;">A</div>
  <div style="background-color:lightblue;">B</div>
  <div style="background-color:khaki;">C</div>
  <div style="background-color:pink;">D</div>
  <div style="background-color:lightgrey;">E</div>
  <div style="background-color:lightgreen;">F</div>
</div>

弹性容器:包含着弹性项目的父元素,即上面的 #main

弹性项目:弹性容器的每个子元素,弹性容器直接包含的文本将被包覆成匿名弹性单元

每个弹性框布局都包含两个轴,弹性项目沿其依次排列的那根轴称为主轴,垂直于主轴的那根轴称为侧轴

在这里插入图片描述

flex-direction

flex-direction 可以确立主轴,这个属性一共有 6 个值

row:默认值,水平展开
row-reverse:与 row 相同,但是以相反的顺序
column:弹性项目将垂直展示
column-reverse:与 column 相同,但是以相反的顺序
initial:设置该属性为它的默认值
inherit:从父元素继承该属性

justify-content

justify-content: 定义了在当前行上,弹性项目沿主轴如何排布

flex-start:默认值,项目位于容器的开头
flex-end: 项目位于容器的结尾
center:项目位于容器的中间
space-between: 项目位于各行之间留有空白的容器内
space-around:项目位于各行之前、之间、之后都留有空白的容器内
initial:设置该属性为它的默认值
inherit:从父元素继承该属性

align-items

align-items: 定义了弹性项目在侧轴是如何排布

stretch:默认值,项目被拉伸以适应容器
center:项目位于容器的中心
flex-start:项目位于容器的开头
flex-end:项目位于容器的结尾
baseline:项目位于容器的基线上
initial:设置该属性为它的默认值
inherit:从父元素继承该属性

如果只想改变单个弹性项目的对齐方式,就用align-self,它定义了单个弹性项目在侧轴上应当如何对齐,这个定义会覆盖由 align-items 所确立的默认值

order: 属性将元素与序号关联起来,以此决定哪些元素先出现

flex-wrap

flex-wrap:规定 flex 容器是单行或者多行,同时横轴的方向决定了新行堆叠的方向

nowrap:默认值,规定灵活的项目不拆行或不拆列
wrap:默认值,规定灵活的项目在必要时拆行或拆列
wrap-reverse:规定灵活的项目在必要的时候拆行或拆列,但是以相反的顺序
initial:设置该属性为它的默认值
inherit:从父元素继承该属性

flex-flow:是 flex-direction 和 flex-wrap 属性的简写,决定弹性项目如何排布

flex-grow、flex-shrink 和 flex-basis

flex 属性是 flex-grow、flex-shrink 和 flex-basis 的简写,描述弹性项目的整体伸缩性

1)flex-grow

flex-grow: 用于设置或检索弹性盒的扩展比率,默认等于 0,即使用本来的宽度,不拉伸;等于 1 时,就表示该项目宽度拉伸,占据当前行的所有剩余宽度

#main{
  width: 500px;
  height: 200px;
  border: 1px solid #c3c3c3;
  display:flex;
  background: red;
}
#main div{
  width: 40px;
}
.a{
  flex-grow: 2;
}
.b{
  flex-grow: 3;
}
.c{
  flex-grow: 1;
}
.d{
  flex-grow: 3;
}
.e{
  flex-grow: 2;
}
.f{
  flex-grow: 1;
}

在这里插入图片描述

2)flex-shrink

flex-shrink: 指定了 flex 元素的收缩规则,默认值为 1,当父元素的宽度小于所有子元素的宽度的和时,子元素的宽度会减小。值越大,减小越厉害;如果值为0,表示不减小

<p>div 总宽度为 500px, flex-basic 为 120px。</p>
<p>A, B, C 设置 flex-shrink:1。 D , E 设置为 flex-shrink:2</p>
<p>D , E 宽度与 A, B, C 不同</p>
<div id="content">
  <div class="box" style="background-color:red;">A</div>
  <div class="box" style="background-color:lightblue;">B</div>
  <div class="box" style="background-color:yellow;">C</div>
  <div class="box1" style="background-color:brown;">D</div>
  <div class="box1" style="background-color:lightgreen;">E</div>
</div>

在这里插入图片描述

3)flex-basis

flex-basis:用于设置或检索弹性盒伸缩基准值,初始值为 auto,指定了 item 在 flex 布局中的初始大小(前提是不改变盒模型的 box-sizing),所谓的初始尺寸就是元素在 flex-grow 和 flex-shrink 生效前的尺寸,它的优先级高于 width

grid布局

网格布局它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局

grid 布局与 flex 布局有一定的相似性,都可以指定容器内部多个项目的位置,但它们也存在重大区别:

  • flex 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局
  • grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局

css grid网格布局教程

### 三级标题:Flexbox布局的核心技巧 在前端开发中,Flexbox布局提供了一种更加高效的方式来对容器及其子元素进行排列、对齐分配空间。以下是一些使用Flexbox布局时的技巧常见问题的解决方法: #### 对齐控制 Flexbox提供了一系列属性来控制子元素在主轴交叉轴上的对齐方式。例如,`justify-content`可以控制主轴上的对齐方式,而`align-items`则控制交叉轴上的对齐方式。通过这些属性可以轻松实现元素的居中对齐、分散对齐等效果[^2]。 ```css .flex-container { display: flex; justify-content: center; /* 主轴居中对齐 */ align-items: center; /* 交叉轴居中对齐 */ } ``` #### 响应式设计 Flexbox非常适合用于创建响应式布局。通过媒体查询Flexbox的灵活性,可以轻松地根据不同的屏幕尺寸调整布局。例如,可以设置一个导航栏在小屏幕上堆叠成一列,在大屏幕上展开成一行[^1]。 ```css @media (max-width: 600px) { .nav-container { flex-direction: column; } } ``` #### 多行布局 当需要Flex容器内的项目在多行显示时,可以使用`flex-wrap`属性。这样可以在一行放不下所有项目时自动换行[^2]。 ```css .flex-container { flex-wrap: wrap; } ``` ### 三级标题:常见问题及解决方法 #### 内容挤压问题 在使用Flexbox时,可能会遇到内容被挤压的问题,特别是当`flex-shrink`属性被设置为非零值时。为了解决这个问题,可以将`flex-shrink`设置为0,或者给项目指定一个最小宽度[^4]。 ```css .flex-item { flex-shrink: 0; /* 阻止项目收缩 */ min-width: 200px; /* 设置最小宽度 */ } ``` #### 兼容性问题 虽然Flexbox在现代浏览器中得到了广泛支持,但在旧版浏览器中可能存在兼容性问题。特别是`gap`属性在某些浏览器中可能不被支持。可以通过使用边距(margin)来模拟`gap`的效果,或者使用JavaScript来检测并应用备用样式。 ```css .flex-container { display: flex; gap: 10px; /* 现代浏览器支持 */ } /* 对于不支持gap的浏览器 */ .no-gap .flex-item { margin-right: 10px; /* 手动添加边距 */ } .no-gap .flex-item:last-child { margin-right: 0; } ``` ### 三级标题:实战布局技巧 #### 垂直居中 Flexbox的一个非常有用的功能是能够轻松实现垂直居中。这在传统的CSS布局中是相对困难的。通过设置`align-items``justify-content`为`center`,可以轻松实现容器内项目的垂直水平居中[^3]。 ```css .container { display: flex; align-items: center; justify-content: center; height: 100vh; /* 设置容器高度为视口高度 */ } ``` #### 网格布局 虽然CSS Grid是专门设计用于二维布局的,但Flexbox也可以用来创建简单的网格布局。通过设置`flex-wrap`为`wrap`并调整`flex-basis`,可以创建一个响应式的网格布局[^1]。 ```css .grid-container { display: flex; flex-wrap: wrap; } .grid-item { flex: 0 0 33.33%; /* 每行三个项目 */ box-sizing: border-box; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值