移动web-flex布局

目录

 

1. flex布局原理

1)flex

2)flex container

原理:通过给父盒子添加flex属性,来控制子盒子的位置和排列方式

2. flex布局父项常见属性

1)flex-direction 设置主轴的方向

2) justify-content 设置主轴上的子元素排列方式

 3)flex-wrap 设置子元素是否换行

4)align-content 设置侧轴上的子元素排列方式(多行)

5)align-item 设置侧轴上的子元素排列方式(单行)

6)flex-flow 

3. flex布局子项常见元素

1)flex属性 子项目分配剩余空间

2)align-self 控制子项目自己在侧轴上的排列方式

3)order 定义项目的排列顺序


 

1. flex布局原理

1)flex

flex:flexible box,弹性布局,用来为盒装模型提供最大的灵活性,任何一个容器都可以指定为flex布局。

  • 父盒子设置为flex布局之后,子元素的float、clear、vertical- align属性都将失效
  • 伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 = flex布局

2)flex container

flex容器(flex container):采用flex布局的元素,简称为容器。它的所有子元素自动成为容器成员,称为flex项目(flex item),简称为项目。

  • div就是flex父容器
  • span就是子容器的flex项目
  • 子容器可以横向排列也可以纵向排列

原理:通过给父盒子添加flex属性,来控制子盒子的位置和排列方式

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTI4MjIwNDM=,size_20,color_FFFFFF,t_70,g_se,x_16

 

   <style>
        div {
            /* flex父容器 */
            display: flex;
            width: 80%;
            height: 500px;
            background-color: pink;
            /* justify-content: space-around; */
        }
        div span {
            width: 200px;
            height: 200px;
            margin-left: 10px;
            background-color: purple;
            flex: 1;
        }
    </style>
</head>
<body>
    <div>
        <span>1</span>
        <span>1</span>
        <span>1</span>
    </div>
</body>

效果图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTI4MjIwNDM=,size_20,color_FFFFFF,t_70,g_se,x_16

 

2. flex布局父项常见属性

对父元素设置的属性:

  • flex-direction:设置主轴的方向
  • justify-content:设置主轴上的子元素排列方式
  • flex-wrap:设置子元素是否换行
  • align-content:设置侧轴上的子元素的排列方式,多行
  • align-items:设置侧轴上的子元素的排列方式,单行
  • flex-flow:复合属性,就是同时设置了flex-direction和flex-wrap

主轴和侧轴:行和列、x轴和y轴

  • 默认主轴方向就是x轴方向,水平向右
  • 默认侧轴方向就是y轴方向,水平向下

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTI4MjIwNDM=,size_20,color_FFFFFF,t_70,g_se,x_16

 

1)flex-direction 设置主轴的方向

决定主轴的方向,也就是项目的排列方向

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTI4MjIwNDM=,size_20,color_FFFFFF,t_70,g_se,x_16

2) justify-content 设置主轴上的子元素排列方式

定义了项目在主轴上的对齐方式,使用之前要确定主轴是哪个

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTI4MjIwNDM=,size_20,color_FFFFFF,t_70,g_se,x_16

 3)flex-wrap 设置子元素是否换行

默认情况下,项目都是排在一条线(轴线)上的。flex布局默认是不换行的

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTI4MjIwNDM=,size_20,color_FFFFFF,t_70,g_se,x_16

4)align-content 设置侧轴上的子元素排列方式(多行)

设置子项在侧轴上的排列方式并且只能用于子项出现换行(flex-wrap:wrap;)的情况(多行),在单行下是没有效果的

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTI4MjIwNDM=,size_20,color_FFFFFF,t_70,g_se,x_16 

5)align-items 设置侧轴上的子元素排列方式(单行)

控制子项在侧轴(默认是y轴)上的排列方式,在子项为单项的时候使用

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTI4MjIwNDM=,size_20,color_FFFFFF,t_70,g_se,x_16

6)flex-flow 

flex-direction和flex-wrap的复合写法

flex-flow: row wrap;

    <style>
        div {
            /* flex父容器 */
            display: flex;
            width: 80%;
            height: 500px;
            background-color: pink;
            /* flex-direction 设置主轴的方向 */
            /* 1.默认主轴的方向是row、行、x轴->横向排列,从左到右 */
            flex-direction: row;
            /* 2.翻转,主轴的方向是x轴反方向,从右到左 */
            /* flex-direction: row-reverse; */
            /* 3.主轴的方向是column、列、y轴->纵向排列,从上到下 */
            /* flex-direction: column; */
            /* 4.翻转,主轴的方向是y轴反方向,从下到上 */
            /* flex-direction: column-reverse; */

            /* justify-content 设置主轴上的项目排列方式 */
            /* 1.默认为从头开始,主轴是x轴的话则为从左到右排列 */
            justify-content: start;
            /* 2.从尾部开始排列,最后一个子元素贴着右边框 */
            /* justify-content: end;             */
            /* 3.居中对齐 */
            /* justify-content: center; */
            /* 4.平分剩余的空间 */
            /* justify-content: space-around; */
            /* 5.线两边贴边,然后再平分剩余的空间 */
            /* justify-content: space-between; */

            /* flex-wrap 设置子元素是否换行 */
            /* 1.项目默认是不换行的,如果装不下这些项目,就会自动缩小项目的宽度放到轴线上 */
            /* flex-wrap: nowrap; */
            /* 2.换行 */
            flex-wrap: wrap;

            /* align-item 设置侧轴上的项目排列方式(单行) */
            /* 1.从上到下 */
            /* align-items: start; */
            /* 2.从下到上 */
            /* align-items: end; */
            /* 3.垂直居中 */
            /* align-items: center; */
            /* 4.默认,拉伸,但是子元素一般不给高度才拉伸 */
            align-items: stretch;

            /* align-content 设置侧轴上的项目排列方式(多行) */
            /* 1.默认,在侧轴的头部开始排列 */
            align-content: start;
            /* 2.在侧轴的尾部开始排列 */
            /* align-content: end; */
            /* 3.在侧轴中间显示 */
            /* align-content: center; */
            /* 4.在侧轴平分剩余空间 */
            /* align-content: space-around; */
            /* 5.先分布在两头,然后平分剩余的空间 */
            /* align-content: space-between; */
            /* 6.子项没有高度,自行设置子项元素高度来平分父元素高度 */
            /* align-content: stretch; */

        }
        div span {
            width: 200px;
            height: 200px;
            background-color: purple;
            
        }
    </style>
</head>
<body>
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
        <span>4</span>
        <span>5</span>
        <span>6</span>
    </div>
</body>

3. flex布局子项常见元素

  • flex:子项目占的份数
  • align-self:控制子项自己在侧轴的排列方式
  • order:定义子项的排列顺序

1)flex属性 子项目分配剩余空间

定义子项目分配剩余空间,用flex来表示占多少份数

    <style>
        div {
            display: flex;
            width: 60%;
            height: 300px;
            background-color: pink;
            margin: 0 auto;
        }

        div span:nth-child(1) {
            width: 100px;
            background-color: red;
        }
        div span:nth-child(2) {
            /* 中间剩余的份数平分为1,即占了中间所有的部分 */
            flex: 1;
            background-color: green;
        }
        div span:nth-child(3) {
            width: 100px;
            background-color: blue;
        }

        section {
            display: flex;
            width: 60%;
            height: 300px;
            background-color: pink;
            margin: 0 auto;
        }
        section span {
            /* 三等分 */
            flex: 1;
        }
        section span:nth-child(2) {
            /* 占1/2 */
            flex: 2;
        }
        
    </style>
</head>
<body>
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
    </div>

    <section>
        <span>1</span>
        <span>2</span>
        <span>3</span>
    </section>
</body>

效果图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTI4MjIwNDM=,size_20,color_FFFFFF,t_70,g_se,x_16

 

2)align-self 控制子项目自己在侧轴上的排列方式

允许单个项目有与其他项目不一样的对齐方式,可以覆盖align-items属性

默认值为auto,表示继承父元素的align-items属性,如果没有父元素就=stretch

    <style>
        div {
            display: flex;
            width: 80%;
            height: 200px;
            background-color: pink;
        }
        div span {
            width: 100px;
            height: 100px;
            background-color: purple;
            margin-right: 10px;
        }
        div span:nth-child(3) {
            /* 对齐方式与align-items不同,可以覆盖 */
            align-self: end;
        }
    </style>
</head>
<body>
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
    </div>
</body>

效果图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTI4MjIwNDM=,size_20,color_FFFFFF,t_70,g_se,x_16 

3)order 定义项目的排列顺序

数值越小,排列越靠前,默认是0

    <style>
        div {
            display: flex;
            width: 80%;
            height: 200px;
            background-color: pink;
        }
        div span {
            width: 100px;
            height: 100px;
            background-color: purple;
            margin-right: 10px;
        }
        div span:nth-child(3) {
            /* 对齐方式与align-items不同,可以覆盖 */
            align-self: end;
            /* 默认为0,越小越靠前 */
            order: -1;
        }
    </style>
</head>
<body>
    <div>
        <span>1</span>
        <span>2</span>
        <span>3</span>
    </div>
</body>

效果图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTI4MjIwNDM=,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值