0


前端Flex布局

前端Flex布局


前言

为什么要使用Flex布局呢?可以说是它十分灵活,简简单单的几号代码就可以实现各种页面的布局工作。如我们以前的学习的页面布局position、float、display这些属性的局限性,给你带来的困扰。然而Flex,你只需要学习一些CSS属性,就可以写出简洁、优雅、复杂的页面布局。

一、Flex基本概念?

在这里插入图片描述

在Flex容器中默认存在两条轴,横向的水平主轴(main axis)和垂直的交叉轴(cross axis),这是默认的设置。当然你可以通过修改使垂直的交叉轴(cross axis)变为水平主轴(main axis),水平主轴(main axis)变为交叉轴(cross axis)。这个后面详细说。

1.Flex容器

在前端实例中使用Flex布局,需要指定一个容器,任何一个容器都可以被指定为Flex布局。这样容器内部的元素就可以使用Flex来进行布局。

    .conter {
        display: flex | inline-flex
    }

分别生成一个块状或者行内状态的Flex容器格子。如果你使用块元素如:div,你就可以使用(display:flex),而如果你使用行内元素,你就可以使用(display:inline-flex)。

注意:设置使用Flex布局之后,子元素的float、clear、vertical-align的属性将会失效。

下面六种属性可以设置到容器上,它们分别是:

  1. flex-direction
  2. flex-wrap
  3. flex-flow
  4. justify-content
  5. align-items
  6. align-content
1.flex-direction:决定主轴的方向(项目的排列方向)
.container {
    flex-direction: row | row-reverse | column | column-reverse;
}

默认值:row(主轴为水平方向,起点在左端)
在这里插入图片描述
row-reverse: 主轴为水平方向,起点在右端
在这里插入图片描述
column:主轴为垂直方向,起点在上沿
在这里插入图片描述
column-reverse:主轴为垂直方法,起点在下沿
在这里插入图片描述

2.flex-wrap: 决定容器内项目是否可以换行

默认情况,项目都是排列在主轴线上,使用flex-wrap可实现项目的换行。

    .conter {
        flex-wrap: nowrap | wrap | wrap-reverse;        
    }

默认值:nowrap不换行,即当主轴尺寸固定时,当空间不足时,项目尺寸会随之调整而并不会挤到下一行。

在这里插入图片描述
wrap:项目主轴总尺寸超出容器时换行,第一行在上方

在这里插入图片描述

wrap-reverse:换行,第一行在下方

在这里插入图片描述

3.flex-flow: flex-direction 和 flex-wrap 的简写形式
.container {
    flex-flow:<flex-direction> || <flex-wrap>
}

默认值为:row nowrap(用的少)

4.justify-content: 定义了项目在主轴的对齐方式。
    .container {
        justify-content:    flex-start    |    flex-end    |    center    |    space-between    |    space-around;
    }

建立在主轴为水平方向时测试,即:flex-direction:row
默认值:flex-start 左对齐
在这里插入图片描述
flex-end: 右对齐
在这里插入图片描述
center:居中
在这里插入图片描述
space-around: 每个项目两侧的间隔相等,所以项目之间的间隔比项目与边缘的间隔大一倍
在这里插入图片描述

5.align-items: 定义了项目在交叉轴上的对齐方式
    .container {
        align-items: flex-start    |    flex-end    |    center    |    baseline    |    stretch;
    }

建立在主轴为水平方向时测试,及flex-direction:row
默认值为stretch,即如果项目未设置高度或者设置为auto,将占满整个容器的高度
在这里插入图片描述
如容器的高度为100px,而项目没有设置高度的情况下,则项目的高度也为100px。

flex-start:交叉轴的起点对齐
在这里插入图片描述
即假设容器高度为100px时,项目没有设置高度时,那么项目高度分别为20px、40px、60px、80px、100px

flex-end:交叉点的终点对齐
在这里插入图片描述

center:交叉轴的中心点对齐
在这里插入图片描述

baseline:项目的第一行文字作为基线对齐加粗样式

6.align-content: 定义了多跟轴线的对齐方式,如果项目只有一根轴线,那么该属性不起作用
    .container {
        align-content: flex-start    |    flex-end    |    center    |    space-between    |    space-around    |    stretch;
    }

当你flex-wrap设置为nowrap时,容器都在一根轴线上,因此项目不会换行,就不会有多条轴线产生。
当你flex-wrap设置为wrap时,容器可能会有很多条轴线,这是你就需要使用多条轴线的对齐方式了。

建立在主轴为水平方向时测试,即flex-direction:row、flex-wrap:wrap;

stretch: 为默认值,
在这里插入图片描述
从图中可以看出,三条轴线(因为宽度有限),当值为stretch时会三条轴线平分垂直轴线上的空间。

flex-start: 轴线全部在交叉轴上的起点对齐,
在这里插入图片描述

flex-end: 轴线全部在交叉轴上的终点对齐,
在这里插入图片描述

center: 轴线全部在交叉轴上的中心点对齐,
在这里插入图片描述

space-between: 轴线两端对齐,之间的间隔相等,就是剩余的空间等分成间隙,
在这里插入图片描述

space-around: 每个轴线两侧的间隔相等,所以轴线之间的间隔会比轴线轴线与边缘的间隔大一倍

在这里插入图片描述

Flex容器属性

有六种属性可以运用在item项目上:

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

1.order: 定义项目在容器中的排列顺序,数值越小,排列越靠前,默认值为0。

    .item    {
        order:<integer>
    }

在这里插入图片描述

2.flex-basis: 定义了在分配多余的空间之前,项目占据的主轴空间,浏览器根据这个属性,计算主轴是否有多余空间

    .item    {
        flex-basis:<length>    |    auto
    }

默认值为:auto,就是项目本来的大小,这个时候item的高度和宽度取决于width和height的值。
当主轴为水平方向的时候,当设置了flex-basis,项目的宽度设置值会失效,flex-basis需要跟flex-grow和flex-shrink配合使用才能够发挥效果。

  • 当 flex-basis 值为 0 % 时,是把该项目视为零尺寸的,故即使声明该尺寸为 140px,也并没有什么用。
  • 当flex-basis 值为 auto 时,则跟根据尺寸的设定值(假如为 100px),则这 100px 不会纳入剩余空间。

3.flex-grow:定义项目的放大比例

    .item    {
        flex-grow:<number>
    }

默认值为0,即如果存在剩余的空间,也不会放大。
在这里插入图片描述
当所有的项目都已flex-basis的值进行排序后,仍有剩余的空间,那么这个时候flex-grow就发挥作用。
如果所有项目的flex-grow的值为1时,则他们将要等分剩余的空间。
如果一个项目的flex-grow属性的值为2时,其他项目值为1时,则前者占据的剩余空间将会比其他项目多一倍
当然如果项目已flex-basis的值排列完成后发现空间不够了,且flex-wrap的值为nowrap时,此时flex-grow则不起作用,这个时候就需要下面这个属性:

4. flex-shrink:定义了项目的缩小比例

    .item {
        flex-shrink:    <number>
    }

默认值为1,当空间不足的时候,该项目将缩小比例,负值对该属性无效。
在这里插入图片描述
这里可以看出来,虽然每个项目都设置宽度为50px,但是由于自身的容器宽度只有200px,这个时候每个项目被同比例进行缩小,因为默认值为1。

如果所有项目的 flex-shrink 属性都为 1,当空间不足时,都将等比例缩小。

如果一个项目的 flex-shrink 属性为 0,其他项目都为 1,则空间不足时,前者不缩小。

5. flex:flex-grow、flex-shrink、flex-basis简写

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

lex 的默认值是以上三个属性值的组合。假设以上三个属性同样取默认值,则 flex 的默认值是 0 1 auto。

有关快捷值:auto (1 1 auto) 和 none (0 0 auto)

关于 flex 取值,还有许多特殊的情况,可以按以下来进行划分:

当 flex 取值为一个非负数字,则该数字为 flex-grow 值,flex-shrink 取 1,flex-basis 取 0%,如下是等同的:
.item {flex: 1;}
.item {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0%;
}
当 flex 取值为 0 时,对应的三个值分别为 0 1 0%
.item {flex: 0;}
.item {
flex-grow: 0;
flex-shrink: 1;
flex-basis: 0%;
}
当 flex 取值为一个长度或百分比,则视为 flex-basis 值,flex-grow 取 1,flex-shrink 取 1,有如下等同情况(注意 0% 是一个百分比而不是一个非负数字)

.item-1 {flex: 0%;}
.item-1 {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0%;
}

.item-2 {flex: 24px;}
.item-2 {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 24px;
}
当 flex 取值为两个非负数字,则分别视为 flex-grow 和 flex-shrink 的值,flex-basis 取 0%,如下是等同的:

.item {flex: 2 3;}
.item {
flex-grow: 2;
flex-shrink: 3;
flex-basis: 0%;
}
当 flex 取值为一个非负数字和一个长度或百分比,则分别视为 flex-grow 和 flex-basis 的值,flex-shrink 取 1,如下是等同的:
.item {flex: 11 32px;}
.item {
flex-grow: 11;
flex-shrink: 1;
flex-basis: 32px;
}
建议优先使用这个属性,而不是单独写三个分离的属性。

grow 和 shrink 是一对双胞胎,grow 表示伸张因子,shrink 表示是收缩因子。

grow 在 flex 容器下的子元素的宽度和比容器和小的时候起作用。 grow 定义了子元素的尺寸增长因子,容器中除去子元素之和剩下的尺寸会按照各个子元素的 grow 值进行平分加大各个子元素上。

6. align-self: 允许单个项目有与其他项目不一样的对齐方式

单个项目覆盖 align-items 定义的属性

默认值为 auto,表示继承父元素的 align-items 属性,如果没有父元素,则等同于 stretch。

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

这个跟 align-items 属性时一样的,只不过 align-self 是对单个项目生效的,而 align-items 则是对容器下的所有项目生效的。

容器 align-items 设置为 flex-start,而第三

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

标签: 前端

本文转载自: https://blog.csdn.net/weixin_42549473/article/details/136057676
版权归原作者 weixin_42549473 所有, 如有侵权,请联系我们删除。

“前端Flex布局”的评论:

还没有评论