ul弹性怎么一行显示_css3系列之弹性盒子 flex

30c4d429ed23438fd1b2f937ab5dbd28.png

作者:杨耿

https://www.cnblogs.com/yanggeng/p/11212526.html

弹性盒子(伸缩盒)

注意,本篇会很长,非常长, 因为弹性盒子的知识点比较多

搜索 弹性盒子的属性  ctrl + F   如果觉得图太小, ctrl + +键

主要的属性有:  (主要分两部分讲, 一部分讲 设置在父元素上的属性,一部分讲 设置在子元素上的属性, 还有最后一些简单的应用)

  flex

  flex-grow

  flex-shrink

  flex-basis

  flex-direction

  flex-wrap

  align-content

  align-items

  align-self

  justify-content

  order

设置弹性盒子的属性:

  display:flex    inline-flex  (这两者的区别就是, 一个是 block   一个是 inline-block)

首先要注意的是:

  你给父元素设置了 display:flex  子元素们并不会改变成内联元素。  虽然他们的效果看起来是, 但是实际上并不会改变。该是啥,还是啥

接下来来看一下,他的效果,及属性和应用:

  首先,display: flex  是设置在 父元素上面的,设置之后, 他里面的子元素,就会变成 弹性盒子了。(有些人,把父元素叫做盒子,把里面的子元素叫做 项目)

00c193078d47313a17c56b742efb9579.png

12996c4adf67fe2a1d03e4e9f4463e14.png

a973e2e7880681d0870dc37e3288a1c3.png

bf9de1223e2bdf26f69aa50d02d711e5.png

接下来,几个属性, 都是设置在 父元素上面的:↓  

  flex: direction

 设置主轴的方向。默认的主轴是 横向 的,从左到右排列,另一条轴叫做 交叉轴,  也就是我们理解的纵向,

参数:

  row:默认值,主轴横向的,从左向右排列

  row-reverse:主轴还是横向的,只是里面项目的 排列方式不一样, 是从右向左的。

  column:把主轴变成 纵向的,排列方式 也就变成了,从上向下

  column-reverse:主轴变成 纵向的,排列方式颠倒, 从下向上排列。

eec3059c59228e343497c868f76d8ee2.png

59bca46911663fb3611728a237fb1668.png

afa6495da308fca7cef3fcd56fcc382c.png

aa4d5842581b3304c08672f643d1d4d3.png

  flex-wrap:设置,子元素溢出,是否换行。

参数:

  nowrap:默认值(也就是不换行。子元素如果的宽  大于父元素的,会压缩子元素)  把所有子元素排列在一行

  wrap:子元素溢出,会换行,变成多行的形式

  wrap-reverse:颠倒 wrap 的排列方式 (也会变成多行的形式)

21702aec04151029eac9849a54faecaf.png

1ec2165d553f5932766fea9402c24a43.png

3b72acb579f1248d433e4170a225ef2d.png

  justify-content:

设置横轴(横向)的对齐方式

参数:

  flex-start:默认值 对齐起始位置,第一个子元素的起始位置,然后其他子元素向它看齐

  flex-end:跟上面相反的,也就是说,人家对齐在开始,这个对齐在 最后面

  center:居中对齐

  space-between:如果有多余的空间,就会平均分布,每个子元素的 两边空白空间保持一致(头尾的子元素贴边)

  space-around:如果有多余的空间,就会平均分布,每个子元素的 两边空白空间保持一致(头尾的子元素不会贴边)

c46a9939482b786a14a2bcefc537eb8f.png

602a62205a6143deb8b543062f6d90ac.png

ee60d8a6c5bb4a21cfef45dc78b8c26d.png

e4812bd78d5bec3c4cc65ab0e1881c27.png

3c5a6132c85ca39ca43600fca8563b23.png

23df5b7d1b818282e82dc7897262a7ae.png

  align-items: 

设置(纵轴)纵向的对齐方式:(单行)

参数:

   flex-start:默认值 对齐起始位置

  flex-end:跟上面相反的,也就是说,人家对齐在起始位置,这个对齐在 最下面

  center:居中对齐

  baseline:   基线对齐

  stretch:   如果没有设置子元素高度,那么全部子元素的高度都会被拉伸

af75a5656f25c1870ac1e8205064e68a.png

ffb2555d369becc8014f9ebc74ed143d.png

93b8f77cf12163303c8bce6696f76695.png

f7680306226c60c295c0e9899be4a583.png

2af6152e5143d5dc6c9a35b716b2fca1.png

3e10f85c671e94cf9d3f68945747f96c.png

既然学了纵向 和  横向的对齐方式, 那么现在就用他来设置 一下,我们平常的 居中功能

我们平常设置居中, 是不是要设置 position:然后就left  calc  50% - 去子元素的 宽一半,  然后再去计算 top?  很麻烦对吧。 

看看以下的方法,是不是简单了许多

1c4d4a1d076a37a64001a9085e2a3f80.png

fe1027c34ab14fd46bf9e438eaebf564.png

  align-content:

align-content 跟上面的 align-items 的区别就是,一个是操作单行的,一个是操作多行的。  参数都是一样的设置, 除了多了两个 space-betwwen  ,space-around   

设置纵向的对齐方式(多行)

参数:

  flex-start:

  flex-end:

  center:  

  space-betwwen  

  space-around   

  stretch

35f94c7143d2b0e4965083d99cc84f46.png

4f97d177f6b9ea1b664140ac9ad9ba8a.png

a0bbca774b9ec7224ce17b81d88c30cb.png

接下来的几个属性,都是设置在 子元素上的

   align-self:

单独设置对齐方式。如果父元素有设置 align-items的话, 会被子元素给替代掉,也就是,align-self 和 align-items同时设置, 会采用子元素的align-self 对齐方式

但是,如果是  align-self 和 align-content 同时设置, 会采用 父元素的 align-content的 对齐方式

参数:

  auto:默认值,也就是遵从 父元素 align-items 的对齐方式。

  flex-start:对齐起始位置

  flex-end:跟上面相反的,也就是说,人家对齐在起始位置,这个对齐在 最下面

  center:居中对齐

  baseline:   基线对齐

  stretch:   如果没有设置子元素高度,那么全部子元素的高度都会被拉伸

70adc7b2ef5ceab33b343bc99f070f0d.png

53bf4758f44617d6520b9a464d200dd7.png

  order:

设置数值,来决定他们的排列顺序

参数:

  0:默认值

  数值越小,越靠前  支持负数(-1)

c00bb770c670878838ed6f0428ddcbe3.png

  flex-grow:

设置数值来 自定义 扩展的比例,(不支持负值)

参数:

  默认值:0 (也就是,不用扩展)

62e16caa86bf4586d16cab5c2e5a90d8.png

706a0ccfe71603700e3791811ec7c8c0.png

3ac7e90ee259d086f6e484d84cb0699d.png

  flex-shrink: (flex-shrink的真实计算公式)

设置子元素们的宽加起来大于 父元素宽时,要怎么压缩 成一行,

参数:

  1:默认值(超出的话,就按照 比例1 压缩)

学了上面的那个 grow之后, 是不是觉得,他的计算公式那么简单, 那么跟他对应的 shrink 计算公式也一样?其实不是的,他的计算公式,有点冷门,乃至于w3c 都没有公式,那么多他的计算公式怎么样呢?看下面的例子吧~

c9b688e96e2bb2c1b0c864fad26522f4.png

0ca7866a31697a62f28eac932377f3b2.png

 还有最后一点,这也是最冷门的知识点。flex-shrink 参与计算的不是盒子的宽, 而是内容区的宽, border 和  padding 都不用加进去计算的。只计算content

  flex-basis:(如果使用了flex-direction 改变了主轴的方向,那么他控制的,就变成了高度。不是宽度,也就是说,横向控制宽度,纵向控制高度)

如果这个属性呢, flex-basis: 100px  你这样设置,他跟 width: 100px的效果是一样的。 

其实把,flex-basis 和 width 两个一起设置,是有用意的。flex-basis 是决定了 元素宽度的 最小值, width,是决定了元素宽度可撑开的 最大值。

f60f88a75227db55cd205a49ff04c3bc.png

2009d33c6c1832737fe6cfc913aa0fc3.png

还有最后的一个值:

  flex:

他是 flex-grow  flex-shrink flex-basis 的缩写形式

  flex:1  1  20%;

代表的是,可以伸缩,该元素的最小宽度是 20%。

我们来利用,今天的全部内容来实现几个案例。

  第一个:居中

da588069633826bd106f692bc39ebd96.png

    第二个:几等分。

04d0530e90b59982d718f9970f80ed7c.png

23b76fe66ec39bab61371fecc8d70e7a.png

  第三个:其中一个固定宽度的布局

d5179d183066007c07f98fdc3420e92f.png

bba7af58c30e443bc77796cf4d97803e.gif

  第四个:浮动

有人可能会问, float 不好吗?  emmm 确实不好, 因为 父级会受浮动流的影响,而且会触发bfc 等等。

b7265f45084b1e69f91e851f799fff1e.png

  第五个: 圣杯布局

148e0f229f50254bfc93b0c2f1b0f618.png

精彩推荐

  • Java学习路线图!!!

  • Java1234 VIP特价!!!

  • 锋哥带你java从入门到上班!!!

长按关注锋哥微信公众号,非常感谢;

bec302a04f3824233053c9bed74cecbf.png

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值