CSS通用样式2——Flex布局

Bootstrap4与Bootstrap3最大的区别是Bootstrap 4使用弹性盒子来布局,而不是使用浮动来布局。弹性盒子也是CSS的一种新的布局模式,更适合响应式的设计。

一.定义弹性盒子

使用display通用类d-flexd-inline-flex类创建一个flexbox容器,并将子元素转换为flex属性。其中,d-flex类设置对象为弹性伸缩盒子,d-inline-flex类设置对象为内联块级弹性伸缩盒子。

Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。采用Flex布局的元素,称为Flex容器( flexcontainer),简称"容器"。它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称"项目"

弹性盒子容器案例:

 对于弹性盒子容器也存在相应变化,可根据不同的断点来设置。响应式类如下:

.d-{sm | md | lg | xl} -flex

.d-{sm | md | lg | xl}-inline-flex

二.排列方向

弹性盒子中子项目的排列方式包括水平排列和垂直排列,Bootstrap中定义了相应的类来进行设置。

水平方向:
使用.flex-row类可以设置弹性子元素水平显示,这是默认的。使用.flex-row-reverse类设置子项目从右侧开始排列

 水平方向布局还可以添加响应式设置,响应式类如下:

.d-{sm | md | lg | xl} -row

.d-{sm | md | lg | xl}-row-reverse

垂直方向:

使用.flex-column类可以设置弹性子元素垂直显示,.flex-column-reverse类设置子项目作垂直方向的反转。

 三.内容排列

使用flexbox容器上的.justify-content-*类可以改变flex子元素在主轴上的对齐(默认x轴开始,如果flex-direction:column则为y轴开始)。*可以是从start(浏览器默认值)、end. center .between或around。

justify-content-start  : 子元素位于容器的开头

justify-content-center : 子元素位于容器的中心

justify-content-end : 子元素位于容器的结尾

justify-content-between : 子元素位于各行之间留有空白的容器内

justify-content-around : 子元素位于各行之前,之间,之后都留有空白的容器内

 内容排列布局还可以添加响应式设置,响应式类如下:

.d-{sm | md | lg | xl} -start

.d-{sm | md | lg | xl}-end

.d-{sm | md | lg | xl}-center

.d-{sm | md | lg | xl}-between

.d-{sm | md | lg | xl}-around

四.项目对齐

在flexbox容器上使用.align-items-*类可以改变横轴上flex子项目的对齐(y轴开始,如果flex-
direction:column则为x轴)。从start、end、center、baseline或stretch(浏览器默认值)中选择。
 .align-items-{sm | md | lg | xl} -start

.align-items-{sm | md | lg | xl}-end

.align-items-{sm | md | lg | xl}-center

.align-items-{sm | md | lg | xl}-baseline

.align-items-{sm | md | lg | xl}-stretch

五.自身对齐

使用flexbox容器上的.align-self-类单独改变在横轴上的对齐(y轴开始,如果flex-direction:column则为x轴)。其拥有与.align-items相同的可选子项:start、end、center、baseline和stretch(浏览器默认值)。

 自身对齐布局还可以添加响应式设置,响应式类如下:

.align-self-{sm | md | lg | xl} -start

.align-self-{sm | md | lg | xl}-end

.align-self-{sm | md | lg | xl}-center

.align-self-{sm | md | lg | xl}-baseline

.align-self-{sm | md | lg | xl}-stretch

 六.自动相等

在相邻元素上使用.flex-fili类来强制它们在相同的宽度上分配所有可用的水平空间。

七.等宽变换

使用.flex-grow-*类别可以切换弹性子元素增长以填充可用空间。如有需要,可以使用.flex-shrink-*
类来切换调整项目的尺寸


 

八.排序

使用.order-*类可以改变flex子容器的排序顺序。Bootstrap仅提供将一个物件排在第一个或最后一个,以及重置DOM顺序。由于order只能使用整数值(例如5),对需要的任何额外值则需要自定义CSS。

 九.对齐内容

使用flexbox容器上的.align-content-*类可以将flex子元素于横轴上一起对齐。从start(浏览器预设)、end、center、between、around或者stretch中选择。为了呈现效果,下面示例中加入了flex-wrap: wrap及增加了flex子容器的数量。因为此特性对于单行的flex无作用。

 

### 实现 Flex 子项按最小高度对齐 为了确保 Flex 容器中的子项按照最小高度对齐,可以利用 `align-items` 属性设置为 `stretch` 的默认行为并加以调整。当希望所有子项依据其中最矮的那个进行对齐时,则需采取特定策略。 一种常见方法是在每个子元素上显式设定相同的固定高度或使用 `min-height` 来指定一个下限值;然而这并不总是理想方案,特别是对于动态内容而言。更好的办法是让父级容器内的所有直接子节点都遵循如下样式: ```css .flex-container { display: flex; } .flex-item { /* 让项目根据其自然尺寸显示 */ align-self: baseline; } ``` 但是上述代码仅适用于文本基线对齐的情况。如果目标是最小化整体高度而非基于文字基线,则应考虑另一种途径——即引入辅助伪类清除浮动效果带来的额外空间占用问题[^1]。 这里给出一段更加通用的解决方案,它能够有效地令所有的兄弟元素匹配到集合中最短者的高度: ```css /* 设置外层包裹盒模型 */ .parent { display: flex; flex-wrap: wrap; /* 如果需要多行排列则开启此选项 */ } .child { background-color: lightblue; /* 只是为了可视化区别各区块 */ padding: 20px; margin: 5px; border: 1px solid #ccc; /* 关键部分:移除默认伸展特性 */ align-self: flex-start; /* 额外处理:防止内部溢出影响外部表现 */ box-sizing: border-box; } ``` 通过将 `align-self` 设定为 `flex-start` 而不是继承自 `.parent` 的任何其他可能存在的 `align-items` 值(比如默认情况下会有的 `stretch`),这样就能保证即使某些 `.child` 具有较大内边距或其他因素导致视觉上的膨胀也不会强制撑大整个 row 的高度[^3]。 此外,在面对更为复杂的场景如响应式设计时,还可以借助媒体查询进一步优化不同设备下的用户体验[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值