flex布局案例

http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

难得一篇比较好的

 

一个父容器,留个子元素

  <div class="container">
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
  </div>

 

1、正常情况下

虽然制定了div的宽高,但是他是沾满一行的,所以会换行

    .container{
      width: 100%;
      /*display: flex;*/
      background-color: #eee;
    }

    .item{
      width: 50px;
      height: 50px;
      background-color: red;
      border:1px solid black;
      box-sizing: border-box;
    }

 

2、flex布局之后

    .container{
      width: 100%;
      display: flex;
      background-color: #eee;
    }

因为默认选项,是横着排的,元素都打横了(flex-direction)

 

 

 

 

这是后压缩一下浏览器,因为width是100%且默认不换行,所以会有变化的

 

 

可以看到,随着浏览器不断压缩,元素也被压扁了!

浏览器放大,元素又会变大!直至回复原来的50px!

 

所以真的很 “弹”!

 

因为默认值,所有都会在宽度上 一起缩小!

只要大家的数值一样就行,无论是1、2、3,数字不一样才会有变化

 

 如果将第二个改成0

    .item{
      width: 50px;
      height: 50px;
      background-color: red;
      border:1px solid black;
      box-sizing: border-box;
    }

    .item-shrink{
      width: 50px;
      height: 50px;
      background-color: red;
      border:1px solid black;
      box-sizing: border-box;
      flex-shrink: 0;
    }
<div class="container">
    <div class="item"></div>
    <div class="item-shrink"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
  </div>

 

第二个元素,不会缩小!

 

 

正常情况下,没有沾满容器,是因为,默认不放大

如果只有一个项目,且为1,将沾满整个容器!

 

 

还有一个属性,正常情况下,元素的显示方法

auto就是本来的大小

设置其他值,就是会覆盖掉本来的大小。

 

 

这三个属性简写就是flex!指定各种情况下,元素怎么变化

flex:放大、缩小、正常

 

chrome视口最小宽度是130-150px

 

如果不想元素被压缩,可以使用换行

将父元素设置为100%宽度

压缩浏览器的时候

如果横着放不下了,就会换行

正方形是200x200

一直压缩

 

直到一行一个的时候,就不会换行了

此时再压缩,就会压缩元素了,但是不会出现滑动条

 

 

 

如果不想从左边开始排,可以使用

 

flex-end

 

center,里面的所有元素,都保持会在中间

 

 

space-betwen

自动计算剩余的空间,使得元素之间间隔相等

压缩到间隔没有之后,才会换行

每一行的间隔,会各自计算

space-around有点不同

它要求元素两边的间隔相同。就是说,元素两边都会有间隔,并且间隔相同,个人一种居中的感觉呢

如果元素相邻的话,中间就是两倍的间隔

 

 

在竖直方向的排列

横轴是主轴,还有一个竖直的叫交叉轴

主轴和交叉轴排列方式的属性,完全不一样,要好好记住

 

 

 

 因为没有高度,的确没有什么好设置的呀

如果有高度的话,他们换行之间是有间隔的,但是这个间隔很奇怪

 

 不换行就没事

 

 

 1、每个元素都对齐交叉轴的开始位置

 2、end

 

 

end换行

 

 

3、center中间对齐,最有用的

 

加上justify:center,就是垂直居中了

 

 换行也会保持垂直居中

 

 

4、base-line,让元素第一行文字的基线对齐 ,不是很通用

 

最后的问题是,这个奇怪的间隔,是哪里来的呢?

如果容器产生了多条轴线,就是多行多列了,就使用这个

 

 默认情况下,会让行之间产生间隔,沾满整个交叉轴

 

 

加上这一句

不压缩的情况下,垂直居中,压缩的时候变成这样了,因为产生换行才会生效

 

 

 

center才是我们理想中的效果

 

 

其他的属性很少用,这个属性挺奇怪的。

 

最后一个额外的Item属性

 

 

像压缩换行这些属性,可以很好的实现响应式了,这些基本用法基本足够了

posted @ 2018-09-23 13:07  朋友圈  阅读(494)  评论(0编辑  收藏  举报