Flex和Grid

Flex

基础概念

弹性盒子概念:

Flex容器:采用Flex布局的父元素

Flex项目:采用Flex布局容器里面的子元素

横轴:水平方向轴线

纵轴:垂直方向轴线

主轴:触发弹性盒子之后,项目的排列方向(项目默认主轴排列)

侧轴:触发弹性盒子之后,与主轴对立方向

容器属性

默认的情况下项目都是纵向排列的

原因:项目是块级元素,块级本质就是纵向排列

给容器(父元素)触发弹性盒子     display:flex;

触发弹性盒子之后: 项目默认横向显示, 主轴在横向,交叉轴在纵向

修改主轴方向
flex-direction属性触发:        

取值: row的时候, 默认值就是横向

 取值: row-reverse的时候, 主轴在横向,项目是反方向排列的

 取值: column的时候, 主轴在纵向, 项目正向显示

取值: column-reverse的时候, 主轴在纵向, 项目反方向显示

调整间距
主轴

 justify-content来触发      

取值为: flex-start的时候, 代表的是主轴的开始位置显示, 默认值

取值为: flex-end的时候, 代表的是主轴的结束位置显示

取值为: center的时候, 代表的是主轴的居中位置显示

 取值为: space-between的时候, 代表的是主轴的两端对其

 取值为: space-around的时候, 代表的是主轴的两端环绕

取值为: space-evenly的时候, 代表的是主轴的间距均分

侧轴

align-items触发

取值: flex-start的时候, 位于交叉轴的开始位置显示,也是一个默认值

取值: flex-end的时候, 位于交叉轴的结束位置显示

取值: center的时候, 位于交叉轴的中间位置显示

取值: baseline的时候, 位于交叉轴的基线位置显示,效果与flex-start一致(了解即可)

取值: stretch的时候, 效果为拉伸效果,但是项目前提是没有高度的,或者是高度是自适应的

放置多项目

没有触发弹性盒子之前, 子元素过多的时候, 默认会产生溢出效果, 元素有自己的宽度和高度 当给父元素触发完弹性盒子之后, display: flex 子元素会横向显示, 没有折行, 并且原有宽度被挤压了

flex-wrap触发        

取值为:nowrap的时候,就是默认值不折行

取值为:wrap的时候, 代表的是折行显示

调整多行间距

align-content完成

取值为: flex-start的时候, 会实现在侧轴的开始位置显示, 没有行间距

取值为: flex-end的时候, 会实现在侧轴的结束位置显示, 没有行间距

取值为: center的时候, 会实现在侧周的居中位置显示, 没有行间距

取值为: space-between的时候, 会实现在侧周的两端对其位置显示

取值为: space-around的时候, 会实现在侧轴的行间距环绕

取值为: space-evenly的时候, 会实现侧轴行间距均分

项目属性

使用属性: align-self        分别为每一个项目添加对应的取值

align-self: flex-start; 侧轴开始位置

align-self: flex-end; 侧轴的结束位置   

align-self: center; 侧轴的居中位置       

align-self: baseline; 侧轴的基线位置     

align-self: stretch; 侧轴默认拉伸

调整项目的显示顺序   

属性: order属性, 取值就是为数值          默认order取值为: auto;可以理解成0;

   例如:元素添加, order:5; 位于最后显示          元素添加, order:-1; 位于最前面显示

order取值可以为正数,可以为负数, 取值越大越靠后面

占剩余控件的所有

flex:1来实现

主轴在横向, 三个元素都有自己的宽度 当我给其中一个项目添加flex:1 的时候 实现占剩余宽度的所有;所有项目都添加flex:1, 代表的是平均分成3份, 每一个盒子各一份

主轴在纵向, 所有项目都拥有自己的宽度高度; 当给其中一个项目添加一个flex:1; 则会实现:占剩余高度的;所有项目都添加flex:1, 则高度实现均分 代表的是平均分成3份每一个盒子各一份

flex-grow:定义项目的的放大比例;      默认为0,即 即使存在剩余空间,也不会放大;      所有项目的flex-grow为1:等分剩余空间(自动放大占位);      flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。

 flex-shrink: 定义项目的缩小比例      取值为0/1   主要用于:制作移动端横向滚动

Grid

基本概念

image-20230216202917923

image-20230216203121127

容器属性

容器划分行列

  1. 取值为数值 grid-template-rows:100px 100px 100px
  2. 取值为百分比 grid-template-rows:20% 30% 50%
  3. 重复函数 grid-template-rows:repeat(3,20%)
  4. 自动填充 grid-template-rows:repeat(auto-fill, 30%)
  5. auto自动 grid-template-rows:100px auto 100px
  6. fr片段划分 grid-template-rows:1fr 2fr 1fr
  7. minmax() grid-template-rows:200px 200px minmax(100px,200px)

image-20230216205607291

image-20230216205635684

image-20230216205710712

image-20230216205031540

image-20230216205043840

image-20230216205247964

image-20230216205743766

调整间距属性

image-20230216210259623

容器内网格对齐方式

解释

网格相对于容器的对齐方式

image-20230216212726986

网格内项目对其方式

解释

项目相对于网格/区域的对齐方式

image-20230216211850992

项目排列顺序

image-20230216210624604

项目属性

合并单元格属性

image-20230216213656308

项目区域定义

grid-area

grid-area 属性还可用作 grid-row-startgrid-column-startgrid-row-endgrid-column-end 的合并简写形式,直接指定项目的位置。

单个项目位置

justify-self 和 align-self

justify-self 属性设置单元格内容的水平位置(左中右),跟 justify-items 属性的用法完全一致,但只作用于单个项目。

align-self 属性设置单元格内容的垂直位置(上中下),跟 align-items 属性的用法完全一致,也是只作用于单个项目。

### Flexbox CSS Grid 的布局差异与应用场景 #### 差异分析 Flexbox 是一种专注于 **一维布局** 的模型,适合用于单方向上的内容排列对齐[^1]。相比之下,CSS Grid 则是一种强大的 **二维布局** 模型,能够同时管理行列的布局结构[^2]。 - **维度支持**: Flexbox 主要解决的是水平或垂直单一轴线上的布局问题,而无法高效处理复杂的多行列布局场景[^3]。相反,CSS Grid 提供了一种更加直观的方式去定义网格容器内的行列,并允许开发者精确控制每一个单元格的位置及其大小[^4]。 - **设计理念的不同**: Flexbox 更加关注于如何让子项适应其父容器的空间分配逻辑,强调基于内容流的设计思路;而 CSS Grid 则是从整体布局的角度出发,先规划好整个页面或者区块的大致框架再填充具体内容。 #### 应用场景探讨 ##### Flexbox的应用场合 当面对简单的导航栏、按钮组或者其他只需要沿着一条直线布置元素的需求时,Flexbox 就显得尤为合适。例如实现居中显示的小部件群集或是创建具有弹性间距特性的列表视图等操作都可以轻松完成: ```css .container { display: flex; justify-content: center; /* 或其他属性 */ } ``` ##### CSS Grid的最佳实践领域 对于那些需要精细划分多个区域并保持良好比例关系的任务来说,则应该首选 CSS Grid 来构建基础架构。比如设计网页头部、主体部分以及侧边栏三者之间相互协调的整体版面安排就非常适合采用此方法论来进行编码工作: ```css .grid-container { display: grid; grid-template-columns: auto 2fr 1fr; /* 定义三列宽度比例 */ gap: 10px; /* 设置间隔距离 */ } ``` 此外,在实际开发过程中还可以将两者结合起来使用——利用 Grid 对全局进行宏观把控的同时借助局部范围内的 Flexbox 微调细节之处,从而达到最佳视觉效果及用户体验目标。 #### 兼容性响应式考量 值得注意的一点在于旧版本浏览器可能缺乏对这些现代技术的支持度,因此在项目初期就需要做好充分调研准备以便及时采取相应措施规避潜在风险因素存在可能性。与此同时无论选用哪种方式都应当考虑到设备多样性带来的挑战并通过媒体查询等方式确保最终呈现形式能够在各种屏幕上均表现出色性能表现特征出来才行啊! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值