02-小程序:Flex布局

简介: 02-小程序:Flex布局

一、简介



  • 1.1、flex 布局 (Flexible布局,弹性布局)是在小程序里面常用的布局方式
    官方文档:flexbox
    官方文档:align
  • 1.2、开启了 flex 布局元素叫做 flex container(里面的元素叫做flex items)
  • 1.3、设置 display属性为 flex 或者 inline-flex 也可以成为 flex container
    flexflex containerblock-level 形式存在
    inline-flexflex containerinline-level 形式存在


二、CSS常用属性



  • 2.1、应用在 flex container上的CSS属性:flex-flowflex-directionflex-wrapjustify-contentalign-itemsalign-content
    flex 布局模型如下:


image.png


<1>、flex-direction (决定了 main axis(主轴) 的方向)

flex items 默认都是沿着 main axis(主轴)从 main start 开始往 main end 方向排布

flex-direction决定了 main axis(主轴) 的方向,有 4 个取值 row(默认值)、row-reversecolumncolumn-reverse


image.png

image.png


image.png


<2>、justify-content 决定了flex items 在 main axis 上的对齐方式,取值如下:


image.png

  • flex-start(默认值):与 main start 对齐
    flex-end:与 main end 对齐
    center:居中对齐
    space-between:flex items之间的距离相等,flex items与main start、main end 两端对齐
    space-evenly:flex items之间的距离相等,flex items与main start、main end之间的距离等于flex items之间的距离
    space-around:flex items之间的距离相等,flex items与main start、main end之间的距离等于flex items之间的距离的一半


  • <3>、align-items 决定了flex items 在 cross axis 上的对齐方式,取值如下:


image.png

  • stretch(默认值):当flex items在 cross axis 方向上的size为auto时,会自动拉伸填充 flex container
    flex-start:flex items与cross start对齐
    flex-end:flex items与cross end对齐
    center:居中对齐
    baseline:与基准线对齐
  • <4>、flex-wrap 决定了 flex container 是单行还是多行
    nowrap(默认):单行
    wrap:多行
    wrap-reverse:多行(对比wrap,cross start与cross end 相反)
  • <5>、flex-flow :是 flex-direction || flex-wrap 的简写,如下
    flex-flow:column wrap 等价于 => 如下


flex-direction:column
flex-wrap:wrap
  • flex-flow:row reverse 等价于 => 如下


flex-direction:row reverse
flex-wrap:nowrap
  • flex-flow:wrap 等价于 => 如下


flex-direction:row
flex-wrap:wrap


  • <6>、align-content  决定了多行 flex items 在 cross axis 上的对齐方式,用法与justify-content类似


image.png


  • stretch(默认值):与 align-items 的 stretch 类似
    flex-start:与 cross start 对齐
    flex-end:与 cross end 对齐
    center:居中 对齐
    space-between:flex items之间的距离相等;flex items与cross start、cross end两端对齐
    space-around:flex items之间的距离相等;flex items与cross start、cross end之间的距离是flex items之间距离的一半
    space-evenly:flex items之间的距离相等;flex items与cross start、cross end之间的距离是flex items之间距离的一半


  • 2.2、应用在 flex items 上的CSS属性:flexflex-growflex-basisflex-shrinkorderalign-self
  • <1>、order 决定了 flex items的排布顺序:可以设置任意整数(如:正整数、负整数、0),值越小就越排在前面,默认值是0,如下代码,因为 3 的order最大,其他的都是默认0,所以 3 排在最后


image.png

image.png


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>测试啦</title>
    <style>
        .container {
             border: 1px solid #000;
             width: 200px;
             height: 400px;
             margin-left: 20px;
             margin-top: 20px;
             display: flex;
             flex-direction: row;
             flex-wrap: wrap;
             align-content: space-evenly;
        }
       .item {
             width: 100px;  
             height: 100px; 
             font-size: 50px;
             color: #fff;
             text-align: center;
             line-height: 100px;
        }
        .item:nth-of-type(1) {
             background-color: #f00;
        }
        .item:nth-of-type(2) {
             background-color: #0f0;
        }
        .item:nth-of-type(3) {
             background-color: #00f;
             order: 1;
         }
        .item:nth-of-type(4) {
             background-color: #0ef;
        }
        .item:nth-of-type(5) {
             background-color: #a0f;
        }
    </style>
</head>
<body>
    <div class="container">
         <div class="item">1</div>
         <div class="item">2</div>
         <div class="item">3</div>
         <div class="item">4</div>
         <div class="item">5</div>
    </div>
</body>
</html>


  • <2>、align-self
  • flex items 可以通过 align-self 覆盖 flex container 设置的 align-items
    auto(默认值):遵从 flex container 的 align-items设置
    stretch、flex-start、flex-end、center、baseline,效果跟  align-items  一致
  • <3>、flex-grow:决定了 flex items 如何沿主轴方向 扩展
  • (1)、可以设置任意非负数子(正小数、正整数、0),默认值是0;当 flex container 在main axis 方向上有剩余 size 的时候,flex grow 的属性才会生效
  • (2)、如果所有的 flex items 的 flex-grow 总和sum 超过 1,每个flex item扩展的size为flex container的剩余 size * flex-grow / sum

提示:sum指的是 所有flex item的flex-grow 之和

  • (3)、如果所有的 flex items 的 flex-grow 总和sum 不超过 1,每个flex item扩展的size为flex container的剩余 size * flex-grow
  • (4)、 flex items 扩展后的最终 size 不能超过 max-width/max-height
  • <4>、flex-shrink:决定了 flex items 如何沿主轴方向 收缩
  • (1)、可以设置任意非负数子(正小数、正整数、0),默认值是1;当 flex container 在main axis 方向上超过了flex container的 size 时候,flex shrink 的属性才会生效
  • (2)、每个 flex items 收缩的 size为 flex items超出flex container的size * 收缩比例 / 所有 flex items 的收缩比例之和


提示

  • (1)、每个flex item的flex-shrink之和>=1才是:每个 flex items 收缩的 size为 flex items超出flex container的size * 收缩比例 / 所有 flex items 的收缩比例之和
  • (2)、每个flex item的flex-shrink之和 < 1 则:每个 flex items 收缩的 size为 flex items超出flex container的size* flex-shrink之和 * 收缩比例 / 所有 flex items 的收缩比例之和
  • (2)比(1)多一个 * flex-shrink之和


  • (3)、收缩比例 = flex-shrink * flex-item 的base size,base size 就是 flex item 放入 flex container 之前的 size
  • (4)、 flex items 最终收缩的 size 不能小于 max-width/max-height


提示

收缩比例** = flex-shrink * flex-item 的base size,对于 base的size要看main axis 方向来决定是 width还是height


  • <5>、flex-basis:用来设置 flex items 在main axis 方向的base size,如果main axis 方向是宽:那么base size设置的就是宽度;如果main axis 方向是高:那么base size设置的就是高度。
  • auto(默认值)、content:取决于内容本身的size
  • 决定 flex items 最终base size的因素,从优先级高到低
    (1): max-width/max-height/min-width/max-height
    (2):flex-basis
    (3):width/height
    (4):内容本身的 size (前三个没有设置的情况下,4 生效)


  • <6>、flexflex-growflex-shrink? || flex-basis 的简写,其中 ? 表示可有可无,|| 表示 flex-shrinkflex-basis 可以出现一个
  • flex 默认值是:0 1 auto
  • 取值 none0 0 auto


三、应用在 flex container 和 flex items 上的CSS属性的总结



  • 3.1、 flex container
  • <1>、flex-flow 是 flex-direction || flex-wrap 的简写
  • <2>、flex-direction 设置主轴 (main axis) 的方向
  • <3>、flex-wrap 设置是否能换行
  • <4>、justify-content 设置 flex items 在 main axis 上的对齐方式
  • <5>、align-items 设置 flex items 在cross axis 上的对齐方式(一般是针对单行)
  • <6>、align-content 设置 flex items 在 cross axis 上的对齐方式 (一般是针对多行)


  • 3.2、 flex items
  • <1>、flex 是 flex-growflex-shrink? || flex-basis 的简写
  • <2>、flex-grow 决定了flex items 在main axis 方向如何扩展
  • <3>、flex-shrink 决定了 flex items 在 main axis 方向上如何收缩
  • <4>、flex-basis 设置 flex items 在main axis 方向上的 base size(具体是宽还高要根据main axis来决定)
  • <5>、order 设置flex items 的排布顺序
  • <6>、align-self 允许 flex items 覆盖 flex cintainer设置的 align-items
目录
相关文章
|
3月前
|
设计模式 容器
13.HarmonyOS流式卡片列表实现指南:Flex多行布局详解
在现代移动应用开发中,流式卡片列表是一种常见且实用的UI设计模式。它能够自适应屏幕宽度,在有限空间内高效展示多个内容项。本教程将详细讲解如何使用HarmonyOS的ArkUI框架中的Flex组件实现一个灵活的流式卡片列表,重点关注多行布局与对齐策略的应用。
91 2
|
3月前
|
开发者 UED 容器
07.精通HarmonyOS Flex对齐:从基础到高级布局技巧(上)
在HarmonyOS Next的ArkUI框架中,Flex容器提供了强大而灵活的对齐系统,使开发者能够精确控制子元素在容器中的排列方式。掌握这些对齐技术,是构建专业级用户界面的关键。
113 0
|
3月前
|
UED 容器
5.HarmonyOS Next开发宝典:掌握Flex布局的艺术
Flex布局(弹性布局)是HarmonyOS Next中最强大的布局方式之一,它提供了一种更加高效、灵活的方式来对容器中的子元素进行排列、对齐和分配空间。无论是简单的居中显示,还是复杂的自适应界面,Flex布局都能轻松应对。
139 0
|
3月前
|
UED 容器
10.HarmonyOS Next布局进阶:嵌套Flex容器与空间分配策略
在HarmonyOS Next的ArkUI框架中,Flex布局是构建用户界面的核心技术之一。通过嵌套使用Flex容器,我们可以创建复杂而灵活的界面结构,满足各种应用场景的需求。本教程将深入探讨如何在HarmonyOS Next中使用嵌套Flex容器实现复杂布局,以及如何合理分配和控制空间。
84 0
|
6月前
|
开发者 容器
鸿蒙开发:弹性布局Flex
在实际的开发中,需要掌握主轴与交叉轴的关系、换行规则及子元素属性,同时注意性能与兼容性问题,还有一点,Flex组件在渲染时存在二次布局过程,因此在对性能有严格要求的场景下建议使用Column、Row代替。
166 10
鸿蒙开发:弹性布局Flex
|
11月前
|
前端开发 容器
flex布局
【10月更文挑战第7天】
243 87
|
11月前
|
前端开发 UED 容器
使用 Flex 布局实现垂直居中效果
【10月更文挑战第7天】
1120 57
|
10月前
|
前端开发 UED 容器
在 CSS 中使用 Flex 布局实现页面自适应时需要注意什么?
【10月更文挑战第22天】在使用 Flex 布局实现页面自适应时,需要对其基本原理和特性有深入的理解,同时结合具体的布局需求和场景,进行细致的调整和优化。通过合理的设置和注意事项的把握,才能实现理想的自适应效果,提升用户体验。还可以根据实际情况进行更深入的探索和实践,以不断提升 Flex 布局的应用能力。
|
10月前
|
容器
Bootstrap5 Flex(弹性)布局4
排序:.order 类可设置弹性子元素的排序,范围从 .order-1 至 .order-12,数字越小优先级越高。外边距:.ms-auto 和 .me-auto 分别用于设置子元素的右侧和左侧外边距为 auto。包裹:.flex-nowrap(默认)、.flex-wrap 和 .flex-wrap-reverse 用于控制弹性容器中的子元素是否换行及换行方向。
|
10月前
Bootstrap5 Flex(弹性)布局2
介绍Flex布局的水平和垂直方向控制。`.flex-row`使子元素水平排列,默认左对齐;`.flex-row-reverse`则右对齐。`.flex-column`让子元素垂直排列;`.flex-column-reverse`则反向排列。示例展示了不同类的效果,通过改变类名实现布局调整。