首页 > 其他分享 >css3 弹性盒子

css3 弹性盒子

时间:2023-11-12 11:45:06浏览次数:28  
标签:css3 flex direction 盒子 主轴 align 元素 弹性 grow

flex属性详解

juejin.cn溪阳

flex属性.jpg

网页布局

  • 最早的时候,网页排版通常是通过 table 元素实现的,在 table 的单元格里使用 align、valign 来实现水平和垂直方向的对齐

  • 后来随着 html 语义化 和 CSS 的发展,浮动布局和定位布局也出现了,还有text-align: center、verticle-align: center 来进行水平居中和垂直居中。依靠这些特性,我们已经可以很方便快捷的实现很多网页。但还是有一定的局限性,如:text-align 和 verticle-align 只能用于行内元素,对于块级元素的布局是无效的

  • 而 flex 布局的出现几乎解决了之前布局方式的所有问题,可以轻松实现子元素居中或均匀分布,甚至可以随着窗口缩放自动适应。这就是我们今天要学习的 flex 布局

flex 属性(父元素)

如果你已经使用过 flex 布局,那么你应该知道容器和轴的概念。我们先来了解一下 flex-direction 这个特性,然后再来说轴的概念,因为 flex-direction 的参数会影响主轴和交叉轴的方向。

flex-direction(设置排列方向,确定主轴交叉轴)

  • 默认为 row(横向排列),可选参数: row-reverse | column | column-reverse

  • 这个属性的设置会影响后面要说的轴,先留个小坑

子元素竖着排列

css

复制代码

display: flex; flex-direction: column;

子元素从底部往顶部排列

css

复制代码

display: flex; flex-direction: column-reverse;

如何区分主轴和交叉轴

既然我们要确定主轴和交叉轴,那么只要确定了主轴,另外一个就是交叉轴(次轴),毕竟一共只有这两种嘛。

flex-direction: row

flex-direction: column

看到这里,你可能发现了,flex-direction 的参数为row时,所有元素都是横着去排列的,主轴就是横轴;而flex-direction 的参数为column时,主轴就是纵轴。

看到这里,有人就会说:就这?

image.png

不要急,这只是个开始,flex 布局还有很多特性可以使用。弄清楚了主轴和交叉轴,下面这两个属性就很简单了。

注意:下面我的例子全部基于 flex-direction: row 的情况下

justify-content(主轴对齐方式)

  • 可选参数:center | start | end | flex-start | flex-end | space-between|space-around

justify-content: center 居中对齐

justify-content: space-between 子元素沿主轴均匀分布,位于首尾两端的子容器与父容器相切

justify-content: space-around 子元素沿主轴均匀分布,位于首尾两端的子容器到父容器的距离是子容器间距的一半

align-items(交叉轴对齐方式)

  • align-items: center | flex-start | flex-end | base-line | stretch

align-items: center 居中对齐

align-items: baseline 基线对齐,这里的 baseline 默认是指首行文字,所有子元素的首行文字的顶部在同一高度

align-items: stretch 子元素沿交叉轴方向的尺寸拉伸至与父容器一致

flex-wrap(设置换行)

  • flex-wrap: nowrap | wrap | wrap-reverse

flex-wrap: wrap 换行

flex-wrap: wrap-revese 逆序换行

资源是从尾部向头部排列换行

align-content(设置多行内容如何分布)

  • 可选参数:flex-start | center | flex-end | space-between | space-around | stretch

align-content: space-around 等边距均匀分布

align-content: space-between 等间距均匀分布

align-content: stretch 拉伸对齐

flex 属性(子元素)

order( 改变子元素的排列顺序)

  • 默认值为 0,可选参数:inherit | initial | unset ,可以为负值,数值越小排列越靠前。

举个例子

css

复制代码

.father{ // 父元素 display: flex; } .left{ order: 3; } .middle{ order: -2; } .right{}

效果如下

flex-grow(子元素弹性扩展的比例)

  • 可选参数:inherit | initial | unset ,也可以是数字,负值无效,默认为 0
  • 如果所有子元素的 flex-grow 的值都为数字的话,则会把父元素分为若干份,每个子元素根据 flex-grow 的值扩展

举个栗子

css

复制代码

.father{ // 父元素 display: flex; } .left{ flex-grow: 2; } .middle{ flex-grow: 3; } .right{ flex-grow: 1; }

实际效果如下:

这里就可以当作把父元素分为 11 份,middle 元素则占 3 份,left 元素占 2 份,right 元素占 1 份

flex-grow: unset (取消子元素扩展)

取消子元素扩展,有的时候等同于 flex-grow: 0

css

复制代码

.father{ // 父元素 display: flex; } .left{ flex-grow: 2; } .middle{ flex-grow: 3; } .right{ flex-grow: 1; } .middle.unset{ flex-grow: unset }

flex-shrink(控制子元素如何收缩)

  • 默认是 1,可选参数:inherit | initial | unset ,可以是 number ,不能为负数
  • 一般写 flex-shrink:0,防止变廋

举个栗子

css

复制代码

.father{ // 父元素 display: flex; } .left{ flex-shrink: 2; } .middle{ flex-shrink: 0.5; } .right{ flex-shrink: 1; }

效果如下

flex-basis 控制基准大小

  • 默认是 auto,可选参数:inherit | initial | unset ,可以是 width 或 height,也可以是百分数,不能为负值
  • 表示在不伸缩的情况下子容器的原始尺寸。横轴为主轴时,表宽度,主轴为纵向时代表高度。

css

复制代码

.father{ // 父元素 display: flex; } .left{ flex-basis: 10%; } .middle{ flex-basis: 100px; }

align-self (单独定义子元素沿交叉轴排列的方式)

  • 可选参数:flex-start | center | flex-end | baseline | stretch
  • 与 align-items 的使用方式基本相同

align-self: center 居中对齐

css

复制代码

.father{ // 父元素 display: flex; } .left{ align-self: center; } .middle{} .right{ align-self: flex-end; }

align-self: stretch 子元素沿交叉轴方向的尺寸拉伸至与父容器一致

css

复制代码

.father{ // 父元素 display: flex; } .left{ align-self: baseline; } .middle{} .right{ align-self: stretch; }

flex-flow(flex-direction 与 flex-wrap 的复合属性)

  • 参数: <flex-direction的参数> <flex-wrap的参数>

  • flex-flow: row,可单独设置主轴方向

  • flex-flow: wrap,可单独设置换行方式

  • flex-flow: column nowrap ,也可两者同时设置

如果你已经把上面的所有 flex 布局的特性玩明白了,那么推荐你了解一下 flex 这个简写属性。

*flex(简写属性)

  • 缩写格式,用空格隔开

  • flex: flex-grow | flex-shrink | flex-basis

  • flex: 1;

  • flex: 2 2;

  • flex: 1 3 10%;

总结

以上就是 flex 的全部属性, 灵活使用 flex 的属性可以实现很多常见的网页,大家快去实战中练习 flex 的使用吧!

跳转到 Cubox 查看

grap 属性

属性定义及使用说明

  • gap 属性是用来设置网格行与列之间的间隙,该属性是row-gap and column-gap的简写形式。

注意: CSS 网格布局起初是用 grid-gap 属性来定义的,目前逐渐被 gap 替代。

语法
gap: row-gap column-gap;
值 描述
row-gap 设置网格布局中行之间的间隙大小
column-gap 设置网格布局中列之间的间隙大小

标签:css3,flex,direction,盒子,主轴,align,元素,弹性,grow
From: https://www.cnblogs.com/ko25891wan/p/17826923.html

相关文章

  • CSS3学习笔记-动画
    CSS3中提供了许多有趣和实用的动画效果,可以使页面更加生动有趣,下面介绍一些常用的动画效果。@keyframes规则使用@keyframes规则可以创建一系列动画帧,并定义它们的状态和样式,在页面中应用该动画后,浏览器会自动处理中间帧的变化。语法如下:@keyframesanimation-name{from......
  • CSS3学习笔记-过渡
    学习CSS3过渡(Transitions)是为了在元素状态之间创建平滑的动画效果。下面是一些关于CSS3过渡的学习笔记:过渡基础语法:使用transition属性来定义过渡效果。通过指定过渡的属性、持续时间、延迟和过渡速度来设置过渡。可以使用逗号分隔多个属性,为每个属性设置不同的过渡效果。过......
  • CSS3学习笔记-句子排版效果
    CSS3提供了丰富的排版效果,可以通过样式属性来控制文本的排列方式、字体样式、行高、字间距等。以下是一些常用的句子排版效果示例:文本对齐方式:.text-center{text-align:center;}.text-right{text-align:right;}.text-justify{text-align:justify;}字......
  • CSS3学习笔记引言
    开始我们要来介绍css:CSS(全称为CascadingStyleSheets)是一种用于描述HTML、XML等文档样式的样式语言,它能够定义元素的显示方式,如字体、颜色、布局等。CSS可以把HTML文档的呈现样式和内容分离,使得网页的结构和表现更加清晰明了,并且可以减少重复的代码。有了CSS,我们可以轻松地......
  • CSS3学习笔记-选择器
    在CSS中,选择器是一种指定一个或多个元素的方法。可以根据元素的类型、类、ID、属性等特征来选择元素。CSS3引入了很多新的选择器,让我们可以更加灵活和精准地选择元素。下面介绍一些常用的CSS3选择器:1.元素选择器元素选择器指定元素的标签名称,例如p、h1、ul。p{color:......
  • CSS3学习笔记-字体属性
    在CSS3中,可以使用字体属性来控制网页中文本的样式和排版。以下是常用的字体属性:font-family该属性用于指定网页中的文本所使用的字体。我们可以通过使用通用的字体名称,或者直接使用字体名称,在多个字体之间进行设置。例如:```cssbody{font-family:Arial,Helvetica,sans-......
  • CSS3学习笔记-盒模型
    CSS盒模型是指包含内容(content)、填充(padding)、边框(border)和外边距(margin)几个方面的一个矩形框模型。内容区(content):指元素中显示内容的区域,它的大小由width和height属性决定。填充区(padding):用于控制内容区周围的空白区域或边距,padding属性可以控制填充区的大小。边框(border):位于......
  • CSS3学习笔记-文字特效
    CSS3中提供了许多有趣和实用的文字特效,可以让我们的文本内容更加生动有趣,下面介绍一些常用的文字特效。文本阴影使用text-shadow属性可以为文本添加阴影效果,语法如下:text-shadow:h-shadowv-shadowblur-color;其中,h-shadow和v-shadow是必需的参数,分别表示阴影的水平和垂......
  • 黑马pink css3
    行内元素/内联元素:是最典型的行内元素特点:相邻行内元素在一行上,一行可以显示多个高,宽度设置是无效的默认宽度是他本身内容的宽度行内元素只能容纳文本或其他行内元素注意:内部不能嵌套‘’可以嵌套块级元素行内块元素:‘’特点:一行可以有多个,之间有空隙默认宽度是他本......
  • 11月10日css盒子模型的margin和padding属性
    目录css盒子模型margin属性如何用margin来控制其上下左右的距离margin的缩写padding属性首先它如何进行上右下左的移动现在我有一个需求就是将内容在边框的正中央显示然后就是简写的方式css盒子模型有四个属性属性描述margin用于控制元素与元素之间的距离;margin的最......