首页 > 其他分享 >移动端布局之flex布局

移动端布局之flex布局

时间:2023-08-11 17:45:44浏览次数:53  
标签:flex 元素 主轴 align 布局 移动 属性

什么是flex布局

基本含义

Flex是Flexible Box的缩写(注:意思是“灵活的盒子容器”),意为”弹性布局”,是 CSS3 引入的新的布局模式,用来为盒状模型提供最大的灵活性,它决定了元素如何在页面上排列,使它们能在不同的屏幕尺寸和设备下可预测地展现出来。

基本概念

采用Flex布局的元素,称为Flex容器( flex container ),简称"容器"。它的所有子元素自动成为容器成员,称为Flex项目( flex item ),简称"项目”。
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。
image

在 Flexbox 模型中,有三个核心概念

  • flex 项(注:也称 flex 子元素),需要布局的元素。
  • flex 容器,其包含 flex 项。
  • 排列方向(direction),这决定了 flex 项的布局方向。

flex布局的特点:

  • 在不同方向排列元素;
  • 重新排列元素的显示顺序;
  • 更改元素的对齐方式;
  • 动态地将元素装入容器。

任何一个容器都可以指定为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>
        .box {
             /* Webkit 内核的浏览器,必须加上-webkit前缀。 */
            display: -webkit-flex;    /*Safari*/
            display: flex;
        }

        .content {
            display: inline-flex;
        }
    </style>
</head>

<body>
    <!-- 块级元素 -->
    <div class="box">块级元素可以使用flex布局</div>
    <!-- 行内元素 -->
    <span class="content">行内元素也可以使用flex布局</span>
</body>

</html>

flex布局体验

1)传统布局兼容性好;布局繁琐;局限性,但是不能在移动端很好的布局。
(2)flex弹性布局:操作方便,布局极为简单,移动端应用广泛;PC端浏览器支持情况较差;IE11或者更低版本,不支持或仅部分支持。
(3)注意:
①如果是PC端页面布局,我们还是使用传统布局。
②如果是移动端或者不考虑兼容性问题的PC端页面布局,我们则使用flex弹性布局。

flex布局原理

1)当我们为父盒子设为flex布局以后,子元素的float、clear和vertical-align属性将失效。
(2)伸缩布局=弹性布局=伸缩盒布局=弹性盒布局=flex布局
(3)采用Flex布局的元素,称为Flex容器( flex container ),简称"容器"。它的所有子元素自动成为容器成员,称为Flex项目( flex item ),简称"项目”。
(4)总结flex布局原理:就是通过给父盒子添加flex属性,来控制子盒子的位置和排列方式。

容器的常见属性

在flex布局中,是分为主轴和侧轴两个方向,同样的叫法有∶行和列、x轴和y轴。
默认主轴方向就是x轴方向,水平向右;默认侧轴方向就是y轴方向,水平向下。
flex-direction属性决定主轴的方向(即项目的排列方向)。
注意:主轴和侧轴是会变化的,就看flex-direction设置谁为主轴,剩下的就是侧轴。而我们的子元素是跟着主轴来排列的。

image

  • row(默认值):主轴为水平方向,起点在左端。
  • row-reverse:主轴为水平方向,起点在右端。
  • column:主轴为垂直方向,起点在上沿。
  • column-reverse:主轴为垂直方向,起点在下沿。

image

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

justify-content属性定义了项目在主轴上的对齐方式。
注意︰使用这个属性之前一定要确定好主轴是哪个。

image

  • flex-start(默认值):左对齐 。
    image

  • flex-end:右对齐 。
    image

  • center: 居中。
    image

  • space-between:两端对齐,项目之间的间隔都相等。
    image

  • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
    image

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

默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,flex布局中默认是不换行的。

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

(1)nowrap(默认):不换行。
image

(2)wrap:换行,第一行在上方。
image

(3)wrap-reverse:换行,第一行在下方。
image

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

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

image

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

该属性是控制子项在侧轴(默认是y轴)上的排列方式在子项为单项(单行)的时候使用。
image

align-content和align-items区别

(1)align-items适用于单行情况下,只有上对齐、下对齐、居中和拉伸。
(2)align-content 适应于换行(多行)的情况下(单行情况下无效),可以设置上对齐、下对齐、居中、拉伸以及平均分配剩余空间等属性值。
(3)总结就是单行找align-items多行找align-content。

image

flex-flow:复合属性

flex-flow属性是flex-direction和flex-wrap属性的复合属性,默认值为row nowrap。

.box {
  flex-flow: <flex-direction> || <flex-wrap>;
}

项目的属性

1)flex子项目占的份数;
(2)align-self控制子项自己在侧轴的排列方式;
(3)order属性定义子项的排列顺序(前后顺序);
(4)flex-grow项目放大的比例,默认为0,即存在剩余空间,也不会放大。
(5)flex-shrink项目的缩小比例,默认为1,即空间不足,也会缩小。

flex属性

flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。
建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。

align-self属性

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

span: nth-child (2){
                   /* 设置自己在侧轴上的排列方式*/
                       align-self: flex-end;
}

image

order属性

(1)定义子项的排列顺序(前后顺序)
(2)数值越小,排列越靠前,默认为0。
(3)注意:和z-index不一样。

.item {
         order : <number>;
)

image

flex-grow属性

(1)flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
(2)如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。
(3)如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

.item {
  flex-grow: <number>; /* default 0 */
}
  • 所有项目的flex-grow属性都为1,效果如下:
    image

  • 一个项目的flex-grow属性为2,其他项目都为1,效果如下:
    image

flex-shrink属性

(1)flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
(2)如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
(3)负值对该属性无效。

原文链接:https://blog.csdn.net/Wanan_J/article/details/128684331

标签:flex,元素,主轴,align,布局,移动,属性
From: https://www.cnblogs.com/hefeng2014/p/17623563.html

相关文章

  • c++ 使用移动语义来提高 vector 性能
    本文学习了微软的官方实例,用于理解std::move语义。#pragmaonce#include<iostream>#include<algorithm>#include<vector>usingnamespacestd;classMemoryBlock{public://Simpleconstructorthatinitializestheresource.explicitMemoryBl......
  • 小程序生成App:可跨平台开发的移动应用开发框架
    小程序生成App可以成为一种轻量低门槛的开发App的方式,但是需要根据具体情况进行选择。如果应用需要处理大量数据或需要进行复杂计算,或者需要实现原生特有的功能或交互效果,可能需要选择其他开发方式。在文章开始之前,我们看看目前市面上比较容易上手、低门槛开发App的框架和方式Rea......
  • Linux MQTT智能家居项目(智能家居界面布局)
    (文章目录)前言一、创建工程项目1.选择工程名称和项目保存路径2.选择QWidget3.添加保存图片的资源文件:在工程目录下添加Icon文件夹保存图片:将文件放入目录中:将图片添加进入资源文件中:二、界面布局准备工作这里我们一共显示4个界面:LED控制界面,温度湿度显示界面,光......
  • 储能pcb的布局注意事项与制造难点
    随着新能源需求的不断增长和能源结构的转型,储能技术的市场规模不断扩大。储能PCB作为储能系统中电池模块的重要组成部分,对整个系统的安全性和性能起到关键作用。今天我们就来聊聊,储能pcb有什么特征。什么是储能:储能是指能量的存储,是指通过介质或设备把能量存储起来,在需要时再释放......
  • .NET对象的内存布局
    在.NET中,理解对象的内存布局是非常重要的,这将帮助我们更好地理解.NET的运行机制和优化代码,本文将介绍.NET中的对象内存布局。.NET中的数据类型主要分为两类,值类型和引用类型。值类型包括了基本类型(如int、bool、double、char等)、枚举类型(enum)、结构体类型(struct),它们直接存储值。......
  • 河南移动H2-3v获取超级密码修改桥接教程
    普通账号登录光猫后台(光猫背面密码) 登录成功后,在网络里面查看当前连接的VLANID值并记录下来,然后直接在浏览器输入:http://192.168.1.1/getpage.gch?pid=1002&nextpage=tele_sec_tserver_t.gch 点击启用Telnet并确定保存 右键密码框点击审查元素 把元素的type="passwo......
  • 【车载测试】CAN协议、CAN- FD协议和FlexRay协议 区别
    【上半场电动化,下半场智能化】一、CAN协议和CAN-FD协议的区别CAN(ControllerAreaNetwork)协议是一种广泛用于汽车和工业控制系统等领域的现场总线协议。CAN-FD(FlexibleDataRate)协议是对CAN协议的扩展,旨在提高CAN总线的数据传输速率和数据量。1.数据速率不同CAN协议是基......
  • Axure 9无法设置移动设备适配的解决方法
    虽然Axure9做了很多移动端的适配工作,移动端的设计体验也好了很多,但是只是在PC端预览有移动端的效果,在移动设备上浏览却没有自动适应屏幕的效果,而且也没有设置移动端的适配的入口而在Axure8中是有这个设置面板的,设置非常方便,如下:   那如何才能设置移动端适配呢,还是有办......
  • css3瀑布流布局遇见截断下一列展示后半截现象
    css3瀑布流布局遇见截断下一列展示后半截现象注:css3实现瀑布流布局简直不要太香~~~~~场景-在uniapp项目中当瀑布流布局column-grap:10px相邻两列之间的间隙为10px,column-count:2,2列展示时,就出现了截断问题,如下图:代码如下:<viewclss="feeds-comtainer"><viewclass="fee......
  • 如何保护FlexRay总线免受浪涌静电威胁和损坏?
    FlexRay是一种高速、实时、可靠、具备故障容错能力的总线技术,是继CAN和LIN总线之后的最新研发成果。FlexRay为线控应用(即线控驱动、线控转向、线控制动等)提供了容错和时间确定性性能要求。虽然FlexRay将解决当前高端和未来主流车载网络的挑战,但它不会取代另外两个主要的车载标准CAN......