Code前端首页关于Code前端联系我们

CSS flexbox布局工具轻松搞定【垂直居中】

terry 2年前 (2023-09-27) 阅读数 83 #数据结构与算法

传统的CSS布局方法是基于盒子模型(根据盒子与父盒子以及相关盒子到指定尺寸的关系) 和位置算法),执行取决于区块inline桌子位置 float 这些属性对于某些特殊布局(例如垂直居中)来说并不容易实现。

Flexbox布局是一种新的布局方法,称为FlexibleLayout,它允许子元素(ITEMS)灵活,响应地适应父容器空间() .灵活的容器)允许元素轻松水平和垂直对齐,即使子元素的大小未知或动态。盒子模型

相对于流向blokinline放置,而灵活布局基于弹性流向( 弯曲-流向),基本思路如下图所示。容器

CSS 布局利器 flexbox 轻松搞定【垂直居中】

flex 中的子元素将沿着主轴 (从 main startmain end)或交叉轴(从交叉起点交叉终点)用于放置在以下位置:

  • 主轴 - 主轴,子元素排列轴的基础,请注意,不一定是水平的,取决于属性flex-direction
  • main-start | 的配置main-end - 从main start到main end的子元素灵活地放置在容器中。默认情况下,它们排列成一行。 不会包裹 ,除非设置了 flex-wrap
  • main size 属性。 - 子元素的主尺寸,如果主轴是水平的,则width为主尺寸;垂直,则 高度 是主要尺寸
  • 横轴 - 垂直于主轴的轴称为 横轴 ,方向取决于主轴 的方向横向起点| cross-end - 当子元素 包裹 时,每行从交叉起点到交叉终点之间间隔
  • cross-size - 与主尺寸相同,但相反flex容器使用以下代码将HTML元素指定为FLEX布局
    .container {
      display: flex; /* or inline-flex */
    }

    此元素称为FLEXContainer,内部的其他HTML元素称为称为弯曲对象flex 容器 有 6 个属性:

    • flex-direction
    • flex-wrap
    • flex-flow
    • justify-content
    • align-items 对齐内容

    flex-direction

    CSS 布局利器 flexbox 轻松搞定【垂直居中】

    指定主轴的方向,即内部单元排列的弹性方向。撇开换行不谈,Flexbox 是一个单向布局的概念,它始终将元素放置在水平行垂直列

    .container {
      flex-direction: row | row-reverse | column | column-reverse;
    }
    • row(默认):主轴水平,从左到右排列
    • row-reverse:主轴水平,从右到左排列
    • column:主轴垂直,从上到下排列
    • column-reverse:主轴垂直,从下到上排列

    flex-wrap

    CSS 布局利器 flexbox 轻松搞定【垂直居中】

    默认情况下,子元素不会换行,只会放置在同一行(或列)中。您可以使用此属性 设置换行符

    .container{
      flex-wrap: nowrap | wrap | wrap-reverse;
    }
    • nowrap(默认):无换行
    • wrap:换行,第一行在顶部
    • wrap-reverse:换行,第一行在底部

    flex-flow

    flex 属性的缩写-方向和柔性包裹。

    flex-flow: <'flex-direction'> || <'flex-wrap'>

    默认为:flex-flow: row nowrap

    justify-content

    CSS 布局利器 flexbox 轻松搞定【垂直居中】

    定义子元素在长轴上的对齐方式。

    .container {
      justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;
    }
    • flex-start(默认 ):左对齐,与长轴的起点对齐
    • flex-end:右对齐,与长轴的终点对齐
    • center:居中,与长轴中心对齐 点对齐
    • space- Between:两端对齐,子元素等间距
    • space-around:子元素两侧等间距,使得子元素之间的间距相等元素恰好是边框间距的两倍
    • 空间均匀:子元素间隔开且间隔开,两个元素之间的距离等于到边框的距离

    align-items

    CSS 布局利器 flexbox 轻松搞定【垂直居中】

    指定子元素如何对齐 交叉轴

    .container {
      align-items: stretch | flex-start | flex-end | center | baseline;
    }
    • stretch(默认):如果子元素未指定高度或设置为auto,它将拉伸以填充容器的高度
    • flex-start:与起始位置对齐横轴的点
    • flex-end:与横轴的终点对齐
    • center:与横轴的中心对齐
    • baseline:与子文本第一行的基线对齐

    align-content

    CSS 布局利器 flexbox 轻松搞定【垂直居中】

    定义容器对齐内部多行元素的线,类似于justify-content定义主轴内元素的对齐方式。?对齐横轴起点

  • flex-end:与横轴终点对齐
  • center:与横轴中心对齐
  • space- Between:在横轴上对齐两端,两端之间等间隔line
  • space-around:每行两边的间距相同,因此行距正好是边框间距的两倍

Flex Items

Flex 容器内的子项也有 6 个属性,分别是是:

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • flex
  • align-self

order

CSS 布局利器 flexbox 轻松搞定【垂直居中】

默认情况下,元素是对齐的在原来的顺序布局,但是这个属性可以控制Flex容器中元素的显示顺序。值越小则越高。默认值为 0。

.item {
  order: <integer>; /* default is 0 */
}

flex-grow

CSS 布局利器 flexbox 轻松搞定【垂直居中】

定义元素根据需要 增长的能力 ,例如,如果容器仍有空间。 默认为0,如有空格则不展开。

如果所有元素都设置为1,则容器中的剩余空间将被平分;如果一个元素的值为 2,则它将占用其他元素两倍的空间(至少尝试这样做)。

注意:负值无效。

.item {
  flex-grow: <number>; /* default 0 */
}

Flex-Shrink

确定元素在需要时 收缩的能力 默认为 1,即如果没有足够的空间,元素将收缩。

相对而言,如果所有元素的该属性值为1,则当空间不足时,它们会按比例减少;如果空间不足时,一个元素为0,另一个元素为1,则第一个元素不会被减少。

注意:负值无效。

.item {
  flex-shrink: <number>; /* default 1 */
}

flex-basis

指定在将剩余空间分配给容器之前, 如何确定子元素 的大小。浏览器根据这个属性计算主轴剩余空间的大小。

的值可以设置为特定长度(例如20%、5rem)或关键字(auto)。 默认为自动。元素的大小基于主尺寸。如果主大小为 auto,则使用元素内容的最大长度。当子单元

.item {
  flex-basis: <length> | auto; /* default auto */
}

弹性伸长时,弯曲底座的差异会导致不同的结果。下面的数字分别是“绝对”(从0开始计数)弹性和“相对”(从元素内容长度开始计数)差值灵活性。

CSS 布局利器 flexbox 轻松搞定【垂直居中】

三个子元素的flex-grow值为1:1:2:

  • 如果flex-basis:0,浏览器会认为子元素的大小为0,剩余空间为整个容器空间,那么会按照1:1:2的比例分配整个容器空间
  • 如果flex-basis:auto,浏览器会认为子元素的大小就是宽度计算剩余空间并分配比例为1:1:2 对于这三个单元

,由于浏览器计算的主轴剩余空间大小不同,单元的弹性结果不同。

flex

属性有 flex-growflex-shrinkflex-basis的缩写,其中第二个和第三个参数( flex-收缩和弯曲基础)是可选的。

.item {
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

默认为flex: 0 1 auto,建议先使用该属性,它有两个好用的关键字:auto(1 1 auto)无(0 0 自动).

align-self

CSS 布局利器 flexbox 轻松搞定【垂直居中】

允许项目 覆盖默认值 或使用 align-items 指定对齐。

.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

除auto外,其他属性值均符合align-items。

注意:浮动、清除和垂直对齐不适用于弹性容器内的元素。

浏览器支持

CSS 布局利器 flexbox 轻松搞定【垂直居中】

  • 红色 - 表示不支持版本
  • 绿色 - 指示前缀的零件支持。就是支持的版本

最后回到问题,对于常用的垂直居中,只需将flex容器的align-items和justify-content属性设置为center即可。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门