前端页面布局之【Flex布局】详解

news2024/9/30 23:24:36

目录

  • 🌟前言
  • 🌟浏览器支持
  • 🌟Flex简介
  • 🌟Flex基本概念
  • 🌟容器属性
    • 🌟项目排列方向
    • 🌟项目包裹方式
    • 🌟项目水平对齐方式
    • 🌟项目的垂直对齐方式
    • 🌟多行对齐方式
  • 🌟项目的属性
    • 🌟项目的顺序
    • 🌟项目占比(放大)
    • 🌟项目占比(缩小)
    • 🌟项目所占空间大小
    • 🌟项目自己的对齐方式
  • 🌟案例
  • 🌟推荐
  • 🌟写在最后

在这里插入图片描述

🌟前言

布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。2009年,W3C提出了一种新的方案—-Flex布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。

🌟浏览器支持

在这里插入图片描述

🌟Flex简介

Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为Flex布局。

.box{
      display: flex; //(新版)
      display:-webkit-box; (旧版)
    }

注意,设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。

🌟Flex基本概念

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

在这里插入图片描述

🌟容器属性

🌟项目排列方向

flex-direction 属性决定主轴的方向

属性表现表现图示
row(默认值)从左到右在这里插入图片描述
row-reverse从右到左在这里插入图片描述
column从上到下在这里插入图片描述
column–reverse从下到上在这里插入图片描述
flex-direction: row | row-reverse | column | column-reverse

兼容写法

-webkit-box-orient:horizontal | vertical
-webkit-box-direction:normal |reverse
属性表现
horizontal水平方向
vertical垂直方向
normal顺序正常
reverse反向

🌟项目包裹方式

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

属性表现表现图示
nowrap(默认)不换行在这里插入图片描述
wrap换行在这里插入图片描述
wrap-reverse:换行,第一行在下方在这里插入图片描述
flex-wrap:nowrap | wrap | wrap-reverse

🌟项目水平对齐方式

justify-content属性定义了项目在主轴上的对齐方式。它可能取5个值,具体对齐方式与轴的方向有关。下面假设主轴为从左到右。

属性表现表现图示
flex-start(默认值)左对齐在这里插入图片描述
flex-end右对齐在这里插入图片描述
center居中在这里插入图片描述
space-between两端对齐,项目之间的间隔都相等。在这里插入图片描述
space-around每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。在这里插入图片描述
justify-content:flex-start | flex-end | center | space-between | space-around

兼容写法

-webkit-box-pack: start | end |center |justify
属性表现
start左对齐
end右对齐
center居中
justiry两端对齐

🌟项目的垂直对齐方式

align-items属性定义项目在交叉轴上如何对齐。它可能取5个值。具体的对齐方式与交叉轴的方向有关,下面假设交叉轴从上到下。

align-items:flex-start | flex-end | center | baseline | stretch
属性表现表现图示
stretch(默认值)如果项目未设置高度或设为auto,将占满整个容器的高度。在这里插入图片描述
flex-start交叉轴的起点对齐在这里插入图片描述
flex-end交叉轴的终点对齐在这里插入图片描述
center交叉轴的中点对齐。在这里插入图片描述
baseline项目的第一行文字的基线对齐。在这里插入图片描述

兼容写法

属性描述
start顶对齐
end底对齐
center居中对齐
-webkit-box-align:start | end |center

🌟多行对齐方式

align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。

属性表现表现图示
flex-start交叉轴的起点对齐在这里插入图片描述
flex-end交叉轴的终点对齐在这里插入图片描述
center交叉轴的中点对齐。在这里插入图片描述
space-between与交叉轴两端对齐,轴线之间的间隔平均分布。在这里插入图片描述
space-around每根轴线两侧的间隔都相等。轴线之间的间隔比轴线与边框的间隔大一倍在这里插入图片描述
stretch(默认值)轴线占满整个交叉轴。在这里插入图片描述
align-content:  flex-start | flex-end | center | space-between | space-around | stretch

🌟项目的属性

🌟项目的顺序

order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。

order:<int>

在这里插入图片描述

兼容写法

-webkit-box-ordinal-group:<int>

🌟项目占比(放大)

  • flex-grow

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

flex-grow:<int>

在这里插入图片描述

在这里插入图片描述

  • 兼容写法
-webkit-box-flex : <int>

🌟项目占比(缩小)

  • flex-shrink

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

 flex--shrink:<int>

在这里插入图片描述

🌟项目所占空间大小

  • flex-basis

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main
size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。

  flex-basis:<size> | auto

🌟项目自己的对齐方式

优先级高于容器的 align-items

  • align-self

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

  align-self: auto | flex-start | flex-end | center | baseline | stretch;

在这里插入图片描述

🌟案例

<!--防止移动端兼容问题我们布局是采用两行-->
<div class="rows">
    <div><a href="javascript:;">天猫</a></div>
    <div><a href="javascript:;">聚划算</a></div>
    <div><a href="javascript:;">天猫国际</a></div>
    <div><a href="javascript:;">外卖</a></div>
    <div><a href="javascript:;">天猫超市</a></div>
</div>
<div class="rows">
    <div><a href="javascript:;">天猫</a></div>
    <div><a href="javascript:;">聚划算</a></div>
    <div><a href="javascript:;">天猫国际</a></div>
    <div><a href="javascript:;">外卖</a></div>
    <div><a href="javascript:;">天猫超市</a></div>
</div>
/* 去掉默认样式*/
body,body *{
  -webkit-text-size-adjust: 100%;
}
body,h1{
    margin: 0;
}
a,input,button{
    /*-webkit-tap-highlight-color:none;*/
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
a{
    text-decoration: none;
}
button{
    -webkit-appearance: none;
}

/*正式布局*/
.rows{
    display: -webkit-box;
    display: flex;
}
.rows div{
    /* 所有的盒子就一样大 */
    width: 0px;
    -webkit-box-flex: 1;
    flex-grow: 1;
}
.rows div a{
    font-size: 0.44rem;
    color: #666;
    text-align: center;
    line-height: 1.04rem;
    display: block;
}
.rows div a:before{
    content: '';
    display: block;
    margin: 0 auto;
    width: 1.72rem;
    height: 1.7rem;
    background: red;
    background-size: 1.72rem 1.7rem;
}
.rows:nth-of-type(1) div:nth-of-type(1) a:before{
    background-image: url(img/1.webp);
}
.rows:nth-of-type(1) div:nth-of-type(2) a:before{
    background-image: url(img/2.webp);
}
.rows:nth-of-type(1) div:nth-of-type(3) a:before{
    background-image: url(img/3.webp);
}
.rows:nth-of-type(1) div:nth-of-type(4) a:before{
    background-image: url(img/4.webp);
}
.rows:nth-of-type(1) div:nth-of-type(5) a:before{
    background-image: url(img/5.webp);
}
.rows:nth-of-type(2) div:nth-of-type(1) a:before{
    background-image: url(img/6.webp);
}
.rows:nth-of-type(2) div:nth-of-type(2) a:before{
    background-image: url(img/7.webp);
}
.rows:nth-of-type(2) div:nth-of-type(3) a:before{
    background-image: url(img/8.webp);
}
.rows:nth-of-type(2) div:nth-of-type(4) a:before{
    background-image: url(img/9.webp);
}
.rows:nth-of-type(2) div:nth-of-type(5) a:before{
    background-image: url(img/10.webp);
}

🌟推荐

最后推荐大家看看阮一峰老师的Flex实例教程

点击跳转

🌟写在最后

更多前端知识请大家持续关注,尽请期待。各位小伙伴让我们 let’s be prepared at all times!

✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

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

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

相关文章

收藏!环境领域一区期刊最新汇总

环境1区期刊共有40本&#xff0c;影响因子在20分以上的仅有1本&#xff0c;为Nature Sustainability&#xff0c;10-20分的有16本&#xff0c;5-10分的有20本&#xff0c;5分以下的3本。 其中国产期刊有3本&#xff0c;分别是Biochar&#xff0c;Environmental Science and Ec…

Axure RP 9 for Mac(原型设计软件)中文正式版

Axure RP 9 是一款流行的原型设计和线框图软件&#xff0c;允许设计人员和开发人员为网站和移动应用程序创建交互式动态原型。它提供了一整套用于创建交互式设计的工具和功能&#xff0c;包括拖放小部件、条件逻辑、动态内容和动画。 软件下载&#xff1a;Axure RP 9 for Mac中…

自学黑客方法-----(网络安全)

如果你想自学网络安全&#xff0c;首先你必须了解什么是网络安全&#xff01;&#xff0c;什么是黑客&#xff01;&#xff01; 1.无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面性&#xff0c;例如 Web 安全技术&#xff0c;既有 Web 渗透2.也有 Web 防…

C语言:转义字符

目录 话不多说&#xff0c;先上表 \n \? \ \" \\ \t \a \ddd 附一张ASCII表 \xdd 练习 话不多说&#xff0c;先上表 一一举例解释下哈 \n 读取到结尾标识符\0 printf("demo\n\0Zh"); // demo \? 在书写连续多个问号时使用&#xff0c;防止…

拉绳位移传感器根据信号的不同接线定义也不一样

拉绳位移传感器根据信号的不同接线定义也不一样 拉绳位移传感器是如何来接线的&#xff0c;我们先要看选用的位移编码器是什么信号输出的&#xff0c;该产品的信号输出方式有很多种&#xff0c;我们来以增量型拉线编码器为例&#xff1b;它的信号输出有&#xff1a;正弦波信号、…

【重拾C语言】六、批量数据组织(三)数组初值;字符串、字符数组、字符串数组;类型定义 typedef

目录 前言 六、批量数据组织——数组 6.1~3 数组基础知识 6.4 线性表——分类与检索 6.5 带学号的成绩排序—数组初值 6.6 表示姓名—字符串 6.6.0 字符串、字符数组和字符串数组 6.6.1 字符串操作&#xff08;复制、连接、比较&#xff09; 6.6.2 回文字 6.6.3 成绩…

电机的基础知识

一、电机的定义&#xff1a; 电机&#xff08;Electric machinery&#xff09;&#xff0c;俗称“马达”&#xff0c;是指依据电磁感应定律实现电能转换或传递的一种电磁装置。分为电动机&#xff08;符号为M&#xff09;和发电机&#xff08;符号为G&#xff09;。 二、电机的…

Ant Design of React组件引用及路由跳转

Ant Design of React 学习笔记&#xff08;2&#xff09; Ant Design of React组件引用及路由跳转&#xff0c;接着笔记(1)继续 这里我们主要3点&#xff1a;1.使用Ant的组件&#xff1b;2&#xff0c;如何引用页面组件&#xff1b;3&#xff0c;路由导航跳转 这是我的目录结…

R/S nomenclature for chiral center

Ideas:  Carbon atoms that are bound to four different atoms or groups are said to be asymmetric (chiral)  The bonds formed by an asymmetric carbon can be arranged in two different mirror images (stereoisomers) of each other  Stereoisomers are eith…

Android 自定义PopupWindow,实现下拉框

1、效果图 2、前言 1、页面由 MagicIndicator ViewPager2 Fragment 实现&#xff1b; 2、下拉框是基于WindowManager实现&#xff1b; 3、我使用PopupWindow实现下拉框时&#xff0c;发现一个问题&#xff0c;PopupWindow 在窗口显示的情况下&#xff0c;无法直接从外部修…

​力扣:LCR 122. 路径加密​ 题目:剑指Offer 05.替换空格(c++)

本文章代码以c为例&#xff01; 力扣&#xff1a;LCR 122. 路径加密 题目&#xff1a; 代码&#xff1a; class Solution { public:string pathEncryption(string path) {for(int i0;i<path.size();i){if(path[i].){path[i] ;}}return path;} }; 难度升级&#xff08;原…

C++对象模型(4)-- 数据语义学:数据成员的内存布局

1、数据成员的声明顺序和内存布局 变量的布局顺序与它的声明顺序是一致的。 我们先来看一段代码&#xff1a; class Base { public:// 变量地址void print() {cout << " this:" << this << endl;cout << " &i1:" << …

Nacos 监控手册

Nacos 0.8.0版本完善了监控系统&#xff0c;支持通过暴露metrics数据接入第三方监控系统监控Nacos运行状态&#xff0c;目前支持prometheus、elastic search和influxdb&#xff0c;下面结合prometheus和grafana如何监控Nacos。与elastic search和influxdb结合可自己查找相关资料…

小视频APP源码选择指南:挑选最适合你的开发框架

在如今蓬勃发展的小视频APP行业中&#xff0c;源码的选择是打造一款成功应用的关键步骤。然而&#xff0c;面对众多开发框架的选择&#xff0c;如何挑选最适合你的小视频APP源码呢&#xff1f;作为这一领域的专家&#xff0c;我将为你提供一份详尽的指南&#xff0c;助你在源码…

一个rar压缩包如何分成三个?

一个rar压缩包体积太大了&#xff0c;想要将压缩包分为三个&#xff0c;该如何做到&#xff1f;其实很简单&#xff0c;方法就在我们经常使用的WinRAR当中。 我们先将压缩包内的文件解压出来&#xff0c;然后查看一下&#xff0c;然后打开WinRAR软件&#xff0c;找到文件&…

SpringBoot的创建与配置文件【.properties与.yml】

SpringBoot的优点&#xff1a; 1.快速添加外部jar包 2.内置运行容器&#xff0c;无需Tomcat 3.可以快速部署&#xff0c;不依赖外部容器 4.抛弃繁琐的XML 5.拥有更多监控指标 SpringBoot 项目创建 SpringBoot的创建步骤 1. 通过 idea 创建 a.专业版直接创建&#xff0c;无需插…

SSL证书一次性购买多年期,有什么好处?

根据国际标准要求&#xff0c;2020 年 9 月 1 日起&#xff0c;全球信任的SSL证书最长有效期不能超过一年&#xff08;398天&#xff09;。一方面SSL证书有效期缩短可以大大提升SSL证书的安全性&#xff0c;但另一方面也意味着&#xff0c;用户每年都需要重复采购、付款、验证等…

【Linux基础】Linux的基本指令使用(超详细解析,小白必看系列)

&#x1f449;系列专栏&#xff1a;【Linux基础】 &#x1f648;个人主页&#xff1a;sunnyll 目录 &#x1f4a6; ls 指令 &#x1f4a6; pwd指令 &#x1f4a6;cd指令 &#x1f4a6;touch指令 &#x1f4a6;mkdir指令&#xff08;重要&#xff09; &#x1f4a6;rmdir指令…

信息增益,经验熵和经验条件熵——决策树

目录 1.经验熵 2.经验条件熵 3.信息增益 4.增益比率 5.例子1 6.例子2 在决策树模型中&#xff0c;我们会考虑应该选择哪一个特征作为根节点最好&#xff0c;这里就用到了信息增益 通俗上讲&#xff0c;信息增益就是在做出判断时&#xff0c;该信息对你影响程度的大小。比…

服务器上部署python脚本

1.查看服务器上的python是否自带&#xff0c;一般都自带 2.将本地脚本上传到服务器 3.直接运行一下脚本看报什么错误 代码错误&#xff0c; 将f删除后报别的错误 上面是未安装依赖的错误。我们安装一下依赖 下面是编码的解决 #!/usr/bin/python # -*- coding: utf-8 -*- 先把…