Flex弹性布局

news2024/11/18 12:43:05

文章目录

  • 1. 开启Flex布局
  • 2. 应用于flex container的css属性
    • flex-direction
    • justify-content
    • align-items
    • flex-wrap
    • flex-flow
    • align-content
  • 3. 应用于flex items的css属性
    • order
    • flex-grow
    • flex-shrink
    • flex-basis(了解)
    • align-self
    • flex

1. 开启Flex布局

在这里插入图片描述

  • flex container:开启了flex布局的大盒子(图中红色边框矩形)
  • flex items:flex container的直接子元素,相当于是大盒子里的小盒子(黑色边框矩形)
  • main axis:主轴,默认方向从左到右,意味着flex container的多个直接子元素从左到右排列
  • cross axis:交叉轴,默认方向从上到下,意味着有多行直接子元素时是从上到下排列
  • start、end:表示主轴及交叉轴的方向

先看看未开启Flex布局的盒子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flex布局</title>
    <style>
        .container{
            width: 500px;
            height: 400px;
            /* 在屏幕上居中显示 */
            margin: 0 auto;
            border: 2px solid black;
        }

        .item{
            width: 100px;
            height: 100px;
        }

        .item1{
            background-color: red;
        }

        .item2{
            background-color: blue;
        }

        .item3{
            background-color: green;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item item1"></div>
        <div class="item item2"></div>
        <div class="item item3"></div>
    </div>
</body>
</html>

在这里插入图片描述
然后我们在container中开启flex布局

        .container{
            /* 开启flex布局 */
            display: flex;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

显示如下:在这里插入图片描述
可以看到flex items都变到一行去了,这是为什么呢?这就要涉及到一些相关的css属性了。

我们可以将这些css属性分为两大类:

  • 应用在flex container上的
  • 应用在flex items上的

下面我们先来介绍应用在flex container上的相关css属性

2. 应用于flex container的css属性

总共有以下几种:

  • flex-direction
  • justify-content
  • align-items
  • flex-wrap
  • flex-flow
  • align-content

flex-direction

flex items默认都是沿main axis从main start往main end排布的。

flex-direction共有四个值:

  • row(默认值):沿主轴方向从左到右
  • row-reverse:反转主轴方向,从右到左
  • column:改变主轴方向,从上到下
  • column-reverse:从下到上
  1. row
        .container{
            /* 开启flex布局 */
            display: flex;
            flex-direction: row;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

此时页面没有任何改变(因为默认值就是row)

  1. row-reverse
        .container{
            /* 开启flex布局 */
            display: flex;
            flex-direction: row-reverse;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

在这里插入图片描述
此时主轴反转了,相当于原本的main start和main end交换了位置。

  1. column
        .container{
            /* 开启flex布局 */
            display: flex;
            flex-direction: column;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

在这里插入图片描述

  1. column-reverse
        .container{
            /* 开启flex布局 */
            display: flex;
            flex-direction: column-reverse;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

在这里插入图片描述

justify-content

现在我们将flex-direction这个属性删除,让其回来刚开始布局的状态。

justify-content决定了flex items在主轴(main axis)方向上的对齐方式

justify-content有六个值:

  • flex-start:与main start对齐
  • flex-end:与main end对齐
  • center:居中对齐
  • space-between:flex items之间的距离相等,与main start、main end两端对齐
  • space-evenly:flex items之间的距离相等,与main start、main end之间的距离等于flex items之间的距离
  • space-around:flex items之间的距离相等,与main start、main end之间的距离是flex items之间的距离的一半
  1. flex-start(默认值)
        .container{
            /* 开启flex布局 */
            display: flex;
            justify-content: flex-start;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

此时页面没有任何改变

  1. flex-end
        .container{
            /* 开启flex布局 */
            display: flex;
            justify-content: flex-end;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

在这里插入图片描述
可以看到flex items在main end处对齐了

  1. center
        .container{
            /* 开启flex布局 */
            display: flex;
            justify-content: center;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

在这里插入图片描述
可以看到flex items在居中对齐了。

  1. space-between
        .container{
            /* 开启flex布局 */
            display: flex;
            justify-content: space-between;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

在这里插入图片描述
可以看到flex items间距相等与main start、main end两端对齐。

  1. space-evenly
        .container{
            /* 开启flex布局 */
            display: flex;
            justify-content: space-evenly;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

在这里插入图片描述
可以看到flex items之间的距离相等,与main start、main end之间的距离等于flex items之间的距离。

  1. space-around
        .container{
            /* 开启flex布局 */
            display: flex;
            justify-content: space-around;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

在这里插入图片描述
可以看到flex items之间的距离相等,与main start、main end之间的距离是flex items之间的距离的一半。

align-items

align-items决定了flex items在cross axis(交叉轴)上的对齐方式。

该属性有以下几个值:

  • normal(默认值):如果flex items没有设置高度,那么items会自动拉伸到flex container的高度,效果与stretch一样
  • stretch:当flex items在cross axis方向上的size为auto时,会自动拉伸至填充flex container
  • flex-start:与cross start对齐
  • flex-end:与cross end对齐
  • center:居中对齐
  • baseline:基线对齐

下面我们先删除justify-content属性,同时删除每个item的高度。

  1. normal、stretch
        .container{
            /* 开启flex布局 */
            display: flex;
            /* align-items: normal; 两个效果一样 */
            /* align-items: stretch; */
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

        .item{
            width: 100px;
        }

在这里插入图片描述
如果我们给每个item设置了高度,那么就没有这样的效果了。

现在重新设置每个item的高度:

        .item{
            width: 100px;
            height: 100px;
        }
  1. flex-start
        .container{
            /* 开启flex布局 */
            display: flex;
            align-items: flex-start;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

在这里插入图片描述

  1. flex-end
        .container{
            /* 开启flex布局 */
            display: flex;
            align-items: flex-end;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

在这里插入图片描述

  1. center
        .container{
            /* 开启flex布局 */
            display: flex;
            align-items: center;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

在这里插入图片描述

  1. baseline

基线对齐主要是跟文本有关。一行文本中有下面这么几条线。这里需要了解的就是蓝色的基线。
在这里插入图片描述
当我们flex items中有文字时,就会以它的基线对齐。下面更改代码:

    <div class="container">
        <div class="item item1">item1</div>
        <div class="item item2">item2</div>
        <div class="item item3">item3</div>
    </div>
        .container{
            /* 开启flex布局 */
            display: flex;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

        .item{
            width: 100px;
            height: 100px;
        }

        .item1{
            background-color: red;
            font-size: 30px;
        }

这里是没有设置基线对齐的。显示如下:在这里插入图片描述
设置基线对齐后:

        .container{
            /* 开启flex布局 */
            display: flex;
            align-items: baseline;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

显示如下:在这里插入图片描述
可以看到flex items是根据它们里面文本的基线进行对齐的。

下面删除刚刚添加的样式、文字等,回到最开始的状态。

flex-wrap

flex-wrap共有三个值:

  • nowrap(默认值):lex items都在一行排列,如果总宽度大于flex container的宽度,则会进行压缩
  • wrap:第一行放不下的时候就会换行排列
  • wrap-reverse:反转
  1. nowrap

更改代码:

    <div class="container">
        <div class="item item1"></div>
        <div class="item item2"></div>
        <div class="item item3"></div>
        <div class="item item1"></div>
        <div class="item item2"></div>
        <div class="item item3"></div>
    </div>

显示如下在这里插入图片描述
可以看到当flex items的总宽度大于flex container的宽度时,为了将flex items全部放进flex container会将每个item的宽度进行压缩。

  1. wrap
        .container{
            /* 开启flex布局 */
            display: flex;
            flex-wrap: wrap;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

显示如下:
在这里插入图片描述
设置wrap后就会进行换行排列

  1. wrap-reverse
        .container{
            /* 开启flex布局 */
            display: flex;
            flex-wrap: wrap-reverse;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

显示如下:
在这里插入图片描述

flex-flow

该属性就是flex-direction和flex-wrap的结合。

align-content

该属性决定了多行flex items在cross axis上的对齐方式,属性值与justify-content一样(注意一定要是多行flex items)。

举两个例子:

  1. flex-start
        .container{
            /* 开启flex布局 */
            display: flex;
            flex-wrap: wrap;
            align-content: flex-start;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

显示如下:
在这里插入图片描述

  1. center
        .container{
            /* 开启flex布局 */
            display: flex;
            flex-wrap: wrap;
            align-content: center;
            width: 500px;
            height: 400px;
            margin: 0 auto;
            border: 2px solid black;
        }

显示如下:在这里插入图片描述

3. 应用于flex items的css属性

总共有以下几种:

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

order

该属性决定了flex items的排布顺序,可以设置任意整数,值小的排在前面,值大的排在后面。

下面删除相关代码,使其回到最开始Flex布局的页面。

        .item1{
            background-color: red;
            order: 3;
        }

        .item2{
            background-color: blue;
        }

        .item3{
            background-color: green;
            order: -5
        }

显示如下:在这里插入图片描述
最开始flex items的排列顺序是红蓝绿,它们的order默认都是0。

现在绿色的order是-5,蓝色的是0,红色的是3,于是就按着order从小到大的顺序重新排列。

flex-grow

该属性决定了flex items如何扩展,可以设定任意非负数字,默认是0。当当flex container在main axis方向上有剩余size时,flex-grow才生效。

扩展规则:

  • 如果所有flex items的flex-grow总和sum超过1,则每个flex item扩展的size为:(flex container剩余的size / sum)* flex-grow ----先均分,然后按flex-grow的值再分
  • 如果所有flex items的flex-grow总和sum不超过1,则每个flex item扩展的size为:flex container剩余的size * flex-grow ----每个item直接按flex-grow的值来分

下面先删除每个item的order属性。

  1. sum总和大于1
        .item1{
            background-color: red;
            flex-grow: 1;
        }

        .item2{
            background-color: blue;
            flex-grow: 1;
        }

        .item3{
            background-color: green;
            flex-grow: 1;
        }

先计算一下每个item扩展多少。

flex container剩余size:200px

sum:3

均分后每一份有200 / 3 = 66.66px

然后再用均分的size × \times ×每个item的flex-grow,也就是66.66px

在这里插入图片描述

        .item1{
            background-color: red;
            flex-grow: 0.8;
        }

        .item2{
            background-color: blue;
            flex-grow: 1.2;
        }

        .item3{
            background-color: green;
            flex-grow: 2;
        }

显示如下:在这里插入图片描述

  1. sum小于1
        .item1{
            background-color: red;
            flex-grow: 0.2;
        }

        .item2{
            background-color: blue;
            flex-grow: 0.2;
        }

        .item3{
            background-color: green;
            flex-grow: 0.2;
        }

每个item扩展的size为200*0.2=40px

在这里插入图片描述

flex-shrink

该属性决定了flex items如何收缩,可以设置任意非负数字,默认值为1。当flex items在main axis方向上超过了flex container的size时,flex-shrink才有效

收缩规则:

  • 当所有flex items的flex-shrink总和sum超过1,则每个item收缩的size为:(超出flex container的size / sum) * 每个item的flex-shrink
  • 当所有flex items的flex-shrink总和sum不超过1,则每个item收缩的size为:超出flex container的size * 每个item的flex-shrink
  1. sum大于1
        .item{
            width: 200px;
            height: 100px;
        }

        .item1{
            background-color: red;
            flex-shrink: 2;
        }

        .item2{
            background-color: blue;
            flex-shrink: 2;
        }

        .item3{
            background-color: green;
            flex-shrink: 2;
        }

超出flex container的size为100px,则每个item收缩的size为:(100/6)* 2 = 33.33px
在这里插入图片描述
可以看到每个item的宽度减少了33.33px

  1. sum小于1
        .item1{
            background-color: red;
            flex-shrink: 0.3;
        }

        .item2{
            background-color: blue;
            flex-shrink: 0.2;
        }

        .item3{
            background-color: green;
            flex-shrink: 0.2;
        }

先计算一下:

item1收缩的size:100 * 0.3 = 30px

item2、item3收缩的size:100 * 0.2 = 20px

显示如下:在这里插入图片描述

flex-basis(了解)

该属性用来设置flex items在main axis方向上的base size。默认值是auto,可以设置具体的宽度值。

        .item1{
            background-color: red;
            flex-basis: 200px;
        }

显示如下:
在这里插入图片描述
决定flex items最终base size的因素优先级从高到低依次为:

  • max-width\max-height\min-width\min-height
  • flex-basis
  • width\height
  • 内容本身的size

align-self

该属性可以覆盖flex container设置的align-items属性。默认值是auto,遵从flex container的align items设置。其他属性跟align items一样

flex

是flex-grow、flex-shrink、flex-basis的结合,用的很少,仅作了解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/492594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

校招推荐学习java开发还是大数据开发

这两个方向其实都是不错的方向&#xff0c;java虽然卷&#xff0c;但是技能在手也不怕。大数据的发展前景也是不容小觑的。关键就在于你未来想发展的方向以及个人的兴趣 首先可以肯定的是&#xff0c;市场上终归是需要Java人才的&#xff0c;但是总会有人来问&#xff0c;Java…

对偶问题和KKT条件

KKT条件 对于不等式约束优化问题 min ⁡ f ( x ) s . t . g ( x ) ≤ 0 \min\quad f(x)\\ {\rm s.t.}\quad g(x)\leq 0 minf(x)s.t.g(x)≤0 拉格朗日函数为 L ( x , λ ) f ( x ) λ g ( x ) L(x,\lambda)f(x)\lambda g(x) L(x,λ)f(x)λg(x) 。 KKT条件包括 拉格朗日函…

分享5款轻量级的Win10神器,错过你会后悔的

今天我要为大家推荐五款小众而且小体积的WIN10小工具&#xff0c;它们可以让你的电脑使用更加方便和高效&#xff0c;而且不占用太多的空间和资源&#xff0c;非常适合轻量级的办公和娱乐。 1.窗口管理工具——TileIconifier TileIconifier可以将窗口最小化到托盘区域,从而更…

在Android应用中集成使用traceroute工具

背景知识 traceroute是一个常用于Linux系统的网络工具&#xff0c;它可显示数据包在IP网络中所经过路由的IP地址&#xff0c;理想状态下可探测本机和目标地址之间的所有路由节点。 其他操作系统中也有类似的替代品&#xff0c;实现都大同小异。一般用法如下&#xff1a; 终端…

【TCP为什么需要粘包和拆包】

如今&#xff0c;大半个互联网都建立在 TCP 协议之上&#xff0c;我们使用的 HTTP 协议、消息队列、存储、缓存&#xff0c;都需要用到 TCP 协议——这是因为 TCP 协议提供了可靠性。简单来说&#xff0c;可靠性就是让数据无损送达。但若是考虑到成本&#xff0c;就会变得非常复…

一文带你理解SpringBean

Bean定义 ​ Bean作为Spring框架面试中不可或缺的概念&#xff0c;其本质上是指代任何被Spring加载生成出来的对象。&#xff08;本质上区别于Java Bean&#xff0c;Java Bean是对于Java类的一种规范定义。&#xff09;Spring Bean代表着Spring中最小的执行单位&#xff0c;其…

如何用ApiFox自动生成接口文档?没有比这更详细的教程了

目录 前言 第一步&#xff1a;安装 Apifox IDEA 插件&#xff08;Apifox Helper&#xff09; 第二步&#xff1a;配置 Apifox 访问令牌 和项目 ID 第三步&#xff1a;自动生成文档&#xff01; 第四步&#xff1a;去 Apifox 项目中查看自动生成的文档 Apifox 更多好用的功能…

Addictive Multiplicative in NN

特征交叉是特征工程中的重要环节&#xff0c;在以表格型&#xff08;或结构化&#xff09;数据为输入的建模中起到了很关键的作用。 特征交互的作用&#xff0c;一是尽可能挖掘对目标有效的模式、特征&#xff0c;二是具有较好的可解释性&#xff0c;三是能够将对数据的洞见引…

一文教会你如何重装Windows10系统【过程+图解+说明】

前言 申请了一台台式机电脑&#xff0c;操作系统是windows11的&#xff0c;要windows10的系统。电脑不能连网&#xff0c;身为程序员&#xff0c;我竟然想着别人远程帮我安装&#xff0c;可恶呐。之前也没重装过系统。第一次重装遇到了一些坑。我甚至在拼夕夕上花了几块钱买个镜…

python-使用Qchart总结5-使用信号槽绘制动态曲线图

python-使用Qchart总结3-绘制曲线图在这篇文章基础上&#xff0c;来改造一下&#xff0c;绘制一下动态曲线图吧 一、明确需求 ①点击按钮&#xff0c;开始动态加载曲线&#xff0c;细节:一个一个点加载出来 二、实现 ①在UI上添加按钮&#xff0c;打开原先的untitled.ui文件…

【Linux】浅谈eloop机制

目录 1.eloop 机制 2.eloop结构体 2.1.eloop_data结构体 2.2 Socket事件结构体 2.3 Timeout事件结构体 2.4 Signal事件结构体 3.eloop_init 4.eloop_run 4.1 signal事件 4.2 socket事件 4.3 timeout事件 1.eloop 机制 主线程中启动事件监听机制&#xff0c;对不同的…

【Python入门】字符串的扩展

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于Python零基础入门系列&#xff0c;本专栏主要内容为Python基础语法、判断、循环语句、函…

Nginx介绍及安装

简介 Nginx 是一个高性能的 HTTP 和反向代理服务器。它最初由 Nigel Cook 开发&#xff0c;旨在解决 Apache 服务器在高并发环境下性能瓶颈的问题。Nginx 具有占用资源少、处理能力强等优点&#xff0c;在互联网应用中广泛应用于静态资源服务、反向代理、负载均衡、HTTP缓存、…

2023年web前端开发之JavaScript进阶(一)

接上篇博客进行学习,通俗易懂,详细 博客地址: 2023年web前端开发之JavaScript基础(五)基础完结_努力的小周同学的博客-CSDN博客 学习内容 学习 作用域、变量提升、 闭包等语言特征&#xff0c;加深对 JavaScript 的理解&#xff0c;掌握变量赋值、函数声明的简洁语法&#xff0…

rs485转tcp网关盒子怎么用(rs485协议转以太网tcp/ip)

随着工业自动化技术的不断发展&#xff0c;越来越多的工业设备在使用时需要进行数据通信。其中&#xff0c;RS485通信协议是一种常见的工业通信协议&#xff0c;而TCP/IP协议则是互联网通信的标准协议。为了实现RS485协议与TCP/IP协议之间的通信&#xff0c;可以使用RS485转TCP…

【Java】面试常问知识点(Java基础—2)

Java基础 多线程的状态 新建状态 当用new操作符创建一个线程时&#xff0c; 例如new Thread(r)&#xff0c;线程还没有开始运行&#xff0c;此时线程处在新建状态。 当一个线程处于新生状态时&#xff0c;程序还没有开始运行线程中的代码 就绪状态 一个新创建的线程并不自动…

ChatGLM-6B微调与部署

文章目录 基于ChatGLM-6B的推理与部署配置环境与准备配置环境模型文件准备 代码运行 Demo命令行 Demo基于 Gradio 的网页版 Demo基于 Streamlit 的网页版 Demo 基于peft框架的LoRA微调ChatGLM-6B配置环境与准备配置环境模型文件准备数据准备数据处理 微调过程 基于P-Tuning v2微…

stm32影子寄存器、预装载寄存器,TIM_OC1PreloadConfig和TIM_ARRPreloadConfig的作用

一直没搞清楚stm32定时器的TIM_OC1PreloadConfig、TIM_ARRPreloadConfig函数的作用&#xff0c;影子寄存器、预装载寄存器、重载寄存器的概念。今天来研究一下&#xff1a; 首先看定时器的框图&#xff1a; 图中有阴影的小方框&#xff0c;代表该功能对应的寄存器有影子寄存器&…

Canal实战使用(集群部署)和原理解析

1.mysql数据同步工作原理 MySQL master将数据变更写入二进制日志(binary log&#xff0c;其中记录叫做二进制日志事件binary log events&#xff0c;可以通过 show binlog events 进行查看) MySQL slave将master的binary log events拷贝到它的中继日志(relay log) MySQL slav…

Java基础(十八)网络编程

1. 网络编程概述 Java是 Internet 上的语言&#xff0c;它从语言级上提供了对网络应用程序的支持&#xff0c;程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库&#xff0c;可以实现无痛的网络连接&#xff0c;联网的底层细节被隐藏在 Java 的本机安装系统里&am…