css3弹性盒子模型(Flex)

2023-10-27

CSS3 弹性盒子(Flex Box)

弹性盒子是 CSS3 的一种新的布局模式.,是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式。

引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列、对齐和分配空白空间。
弹性盒子
主轴:表示水平方向
侧轴(交叉轴、副轴):表示垂直方向
弹性盒子(项目):表示要操作的元素

设置弹性盒子

将父元素设置成弹性盒子容器
注意,设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效
子元素默认为主轴方向显排列

两种方式
 display:flex;
  让块级元素并列,成为块级元素
  父元素本身的显示方式类似于display:block;
 display:inline-flex;
  让块级元素并列,成为行内块级元素
  父元素本身的显示方式类似于display:inline-block;
例1
display:flex

css样式代码:

.box{
	/* 为了体现出设置弹性盒子的两种方式 ,不设置宽高*/
	/* width: 1000px;
	height: 400px; */
	border: 1px solid #000;
	
	display: flex;         /*父元素本身的显示方式类似于display:block;*/
}
/* 匹配div并带有id属性 属性值是以child开头的元素 */
div[id^="child"]{
	width: 200px;
	height: 200px;
}
#child1{
	background-color: #f00;
}
#child2{
	background-color: #0f0;
}
#child3{
	background-color: #00f;
}
#child4{
	background-color: #f0f;
}

html代码:

<div class="box">
	<div id="child1">child1</div>
	<div id="child2">child2</div>
	<div id="child3">child3</div>
	<div id="child4">child4</div>
</div>

运行结果:
结果

可见使用display:flex将父元素设置为弹性盒子容器会将父盒子以块级元素进行显示,子元素以水平方式排列(主轴)

例2
display:inline-flex

css样式代码:

.box{
	/* 为了体现出设置弹性盒子的两种方式 ,不设置宽高*/
	/* width: 1000px;
	height: 400px; */
	border: 1px solid #000;
	
	display: inline-flex;   /*父元素本身的显示方式类似于display:inline-block*/
}
/* 匹配div并带有id属性 属性值是以child开头的元素 */
div[id^="child"]{
	width: 200px;
	height: 200px;
}
#child1{
	background-color: #f00;
}
#child2{
	background-color: #0f0;
}
#child3{
	background-color: #00f;
}
#child4{
	background-color: #f0f;
}

html代码:

<div class="box">
	<div id="child1">child1</div>
	<div id="child2">child2</div>
	<div id="child3">child3</div>
	<div id="child4">child4</div>
</div>

运行结果:
结果
使用display: inline-flex;将父元素设置为弹性盒子容器会将父盒子以行内块级元素进行显示,子元素以水平方式排列(主轴)

容器的属性

设置主轴方向(flex-direction)

操作子盒子的排列方向
如果元素不是弹性盒对象的元素,则 flex-direction 属性不起作用

格式:
flex-direction: row|row-reverse|column|column-reverse;
作用
row 默认值,水平方向排列(主轴)
row-reverse 水平方向主轴反转
column 垂直方向排列(侧轴)
column-reverse 垂直方向侧轴反转

设置主轴方向上对齐方式(justify-content)

设置子元素在主轴方向上的 对齐方式

格式:
justify-content:flex-start|flex-end|space-between|space-around;
作用
flex-start 设置子元素在主轴上起点对齐(默认值)
flex-end 设置子元素在主轴上终点对齐
space-between 把剩余的父元素空间填充到子元素之间
space-around 把剩余的空间平均分布到每个子元素左右两侧

设置副轴方向上的对齐方式(align-items)

设置子元素副轴方向上的 对齐方式
这种方式涉及到基线对齐问题
什么是基线?
基线

格式:
align-items:stretch|flex-start|flex-end|center|baseline;
作用
stretch 默认值,拉伸子元素,填充父元素的高度 (当子项目设定高度时,默认的stretch效果和flex-start是一致的)
flex-start 副轴起点对齐
flex-end 副轴终点对齐
center 副轴居中对齐
baseline 副轴基线对齐

设置元素在主轴的换行方式(flex-wrap)

默认情况下,项目都排在一条线(又称"轴线")上,flex-wrap 属性规定flex容器是单行或者多行,同时横轴的方向决定了新行堆叠的方向
在这里插入图片描述

格式:
flex-wrap:nowrap|wrap|wrap-reverse;
作用
nowrap 默认值,不换行 (子元素会自动缩小,以适应父元素的大小。如果还是不够,则溢出)
wrap 当父元素空间不足时,子元素会自动向下换行
wrap-reverse 当父元素空间不足时,子元素会自动向上换行
》扩展
	flex-flow属性(flex-direction属性和flex-wrap属性的简写)
	格式:
	.box {
	  	flex-flow: <flex-direction> || <flex-wrap>;
	}

多条轴线对齐方式(align-content)

align-content 该属性作用于在多行轴线时的对齐方式,如果只有一条该属性无效,可用align-items

格式:
align-content :stretch|flex-start|flex-end|center|space-between|space-around;
作用
stretch 默认值。元素被拉伸以适应容器
flex-start 元素位于容器的开头(多条轴线处于紧贴状态)
flex-end 元素位于容器的底部(多条轴线处于紧贴状态)
center 元素位于容器的中心(多条轴线处于紧贴状态)
space-between 多条轴线之间都平均留有空白
space-around 各轴之前、之间、之后都平均留有空白

在这里插入图片描述

弹性盒子元素属性

order属性(项目的排列顺序)

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

格式
	order: <integer>;		

例:

css代码:

*{
	margin: 0px;
	padding: 0px;
}
.box-father{
	width: 1000px;
	height: 500px;
	border: 1px red solid;
	margin: 50px auto;
	
	/* 设置弹性盒子容器 */
	display: flex;
	
}
.box-father div{
	width: 300px;
	height: 200px;
	border: 1px red solid;
	background-color: #6996C4;
}
.box-son1{
	order: 1;
	/* 设置子元素的排列顺序 值越大越靠后 */
}
.box-son3{
	/* 支持负数 */
	order: -1;
}

html代码:

<div class="box-father">
	<div class="box-son1">box-son1</div>
	<div class="box-son2">box-son2</div>
	<div class="box-son3">box-son3</div>
	<div class="box-son4">box-son4</div>
	<div class="box-son5">box-son5</div>
</div>

运行结果:
jg

flex-grow属性(放大项目的比例)

当父元素有多余空间时,给子元素设置flex-grow子元素则会按比例来去分配

注意:如果元素不是弹性盒对象的元素,则 flex-grow 属性不起作用

格式
flex-grow: number;(默认值为0,不支持负数)

  如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

flex-shrink属性(缩小项目的比例)

当父元素的宽度小于所有子元素的宽度的总和时(即子元素会超出父元素),不设置则会平均缩小子元素。

格式
flex-shrink:number;(默认值为1,不支持负数)

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

flex-basis(项目占据的主轴空间)

浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

格式
  flex-basis: <length> | auto; (默认值为auto)
  length:该值可以是像素px,也可以是百分数%,百分数就是相对于其父弹性盒容器的宽或者高(取决于主轴方向)
 (不支持负数)

注意:当flex-basis和width属性同时存在时,width属性不生效,该项目的宽度为flex-basis设置的宽度

通俗易懂的文章:
https://blog.csdn.net/m0_37058714/article/details/80765562

》扩展
flex属性(flex-grow, flex-shrink 和 flex-basis的简写)
格式
flex:flex-geow|flex-shrink|flex-basis;
(默认值为0 1 auto。后两个属性可选)

align-self 属性(不一样的对齐方式)

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

格式
align-self: auto | flex-start | flex-end | center | baseline | stretch;
作用
auto 默认值,跟随父元素的align-items属性,如果没有父元素,则等同于stretch
flex-start 位于副轴的起始位置
flex-end 位于副轴的结束位置
center 位于副轴的中间位置
baseline 根据基线进行对齐
stretch 如果项目未设置高度或设为auto,将占满整个容器的高度,元素被拉伸以适应容器

如有错误还请指出,希望这篇文章能给予你们帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

css3弹性盒子模型(Flex) 的相关文章

  • Highcharts - 使用选定的饼图切片获得 3D 效果

    在 highcharts 中 我试图使当用户选择或将鼠标悬停在饼图的切片上时 该切片会产生沿 z 轴 朝向用户 上升的效果 我试图通过 css 设置阴影过滤器并使切片的边框更宽 填充颜色相同 来实现此目的 然而 我面临的问题是切片仍然可以位
  • 底部带有三角形的 div 和背景图像

    我想做一个div 有一个底部的三角形 但我需要三角形上的背景图像为了出现 我尝试使用伪元素 after 但它不起作用 homebg after content position absolute top 100 left 0 right 0
  • jquery UI datepicker仅月份和年份的css定位问题

    我已经实施了这里讨论的解决方案 JQuery 日期时间选择器 只需选择月份和年份 https stackoverflow com questions 4079525 jquery datetime picker need to pick m
  • 如何防止桌面浏览器(Chrome、Safari)缩放网页

    我尝试使用以下元视图端口标记来防止浏览器缩放 但这不起作用 我知道这是可能的 因为我的缩放在此网站上被阻止 未来主义 xyz http futurism xyz 该网站的视口标签是这样的
  • 垂直对齐多行文本(菜单元素)?

    我正在尝试垂直对齐 UL 内的文本 问题是某些列表项具有不止一行文本 因此无法使用行高 小提琴 http jsfiddle net jaAYT http jsfiddle net jaAYT 这是我想要达到的结果 http img402 i
  • 在 Chrome 中为

    我已经看到这个问题多次出现 但没有任何明确的解决方案 我正在加载一个简单的视频
  • JavaFX使节点覆盖父节点边框颜色

    我有一个如下所示的节点 仅使用 css 我希望标签覆盖其父边框颜色 因此标签下方的边框颜色部分变得不可见 我用来制作这个边框的CSS代码 fx border color black fx border width 3 fx border r
  • 如何对多行文本中的每一行应用填充?

    我已将背景颜色应用于 span 标签 也有左和右padding设置在它上面 问题是 padding仅适用于左侧 开始 和右侧 结束 span 而不是当文本换行时每行的左侧 开始 和右侧 结束 我该如何应用左和右padding to the
  • 水平和垂直居中 div 位于页面中间,页眉和页脚粘在页面顶部和底部

    我正在尝试制作一个具有固定高度页眉和页脚的页面 页眉位于屏幕顶部 100 宽度 页脚位于底部 100 宽度 我想将一个具有可变高度内容的 div 居中放置在页眉和页脚之间的空间中 在下面的 jsfiddle 中 如果内容比空格短 它会起作用
  • 如何获得 calc() 函数的无单位结果

    我正在使用此计算来获取网页中的流体行高 line height calc 1 42em 1 55 1 42 100vw 300px 1080 300 数学是工作属性 除非我改变font size特定部分 因为line height应使用无单
  • 严格/过渡 DOCTYPE 之间的浏览器渲染差异

    前段时间我遇到了一个 问题 但我从未深入了解过 希望有人能够照亮它 当我将 DOCTYPE 从严格更改为过渡时 是什么导致某些浏览器 Chrome Opera 和 Safari 以不同方式呈现页面 我知道造成这种情况的一般原因是触发了怪异模
  • 有没有办法编写屏幕阅读器会忽略的内容?

    我刚刚开发了一个需要视力正常和视障用户都可以访问的页面 内容的某些元素仅与视觉元素相关 因此根本不适用于使用屏幕阅读器的人 例如 链接在新窗口中打开视听演示文稿 但由于我无法控制的情况 窗口的大小被笨拙地调整 因此有一条消息说您应该调整窗口
  • 当鼠标悬停在伪元素上时触发CSS动画?

    我试图在伪元素悬停时触发 CSS 动画 我目前有 2 个视频 显示鼠标悬停在浏览器的 50 一侧 我想应用类似的效果来为某些文本添加动画效果 我想要 p 标签在移动时向上移动并淡入 p h1 同时以同样的方式标记 就像这个网站一样 http
  • 在 javascript、jQuery 或 css 中,如何让 div 或 iframe 展开以填充其余空间

    我有三个 iframe 我将顶部 iframe 设置为 50px 高度 将底部 iframe 设置为 50px 但我希望中间 iframe 扩展以填充其余空间 有没有一种技术可以用来对任何窗口屏幕尺寸执行此操作 谢谢 example
  • 如何删除flexbox中所有换行行的左右边距(没有nth-child或js)

    我正在寻找一种好方法来删除每行中每个第一个和最后一个项目的左右边距 而不使用 nth child 或 JavaScript 如果这是不可能的 那么我想下一个最好的方法是在主弹性盒元素上设置负左 右边距 但我不太确定使用弹性盒来做到这一点的最
  • 如何在 font Awesome 图标链接下方添加添加文本?

    我正在尝试在我的 Blogger 模板中的 font awesome Icons 下添加一些文本 这是我想要实现的目标的图像 我想要实现的外观图片 https i stack imgur com BVYlh png 但到目前为止我已经做到了
  • 样式标签中的源映射是否有效?

    我在标签和源映射中遇到 CSS 问题 为了缩短项目的加载时间 我改变了将 CSS 放入 HTML 的方式 将其改为 h1 Source maps working wonderfully h1 进入这个
  • 如何向 Rails 应用程序添加自定义字体?

    我想在 RoR 应用程序中使用几种字体 但它们的格式主要是 ttf 和 otf 等 我该如何将这些文件嵌入到我的 Rails 应用程序中 也就是说 一旦我将它们放入我的资产文件夹中 将它们嵌入我的 CSS 和 或 LESS 文件中的语法到底
  • @font-face 和 font-variant 是个坏主意吗?

    如果我使用 font face字体和font variant small caps对于相同的选择器 字体将回退到 Safari 中的下一个系统默认字体 我该如何解决这个问题 我一开始在创建一个示例来复制您的问题时遇到了一些麻烦 这让我意识到
  • 如何让div与包含td的高度相匹配?

    我沿着桌子的一排布置了三个 面板 一个比另外两个高 我希望所有三个面板都与最高的一个的高度相匹配 我尝试将 div 的样式设置为 height 100 但是即使包含的 tds 增长 短面板仍然很短 我的 HTML 是由 JSF 生成的 因此

随机推荐

  • elasticsearch服务相关脚本

    转载 Ubuntu18配置elasticsearch服务开机自启踩坑 https blog csdn net qq 32635069 article details 89003055 depth 1 utm source distribut
  • top-k的应用

    top k的应用 topk指的是 保存一段数据的最大或者最小的k位数 在code中或者工程中右很重要的应用 举例 查询超大量数据中 最小或者最大的 第 k位数 正常使用排序 缺点 内存占用会超出正常范围 相对简单的做法是 遍历K次 每次选出
  • Flex 发布模式

    Flex 平台支持范围广泛的发布模式 它们是 1 客户端模式 即应用程序只运行在客户端上而不需要服务器资源 2 使用简单的RPC 访问服务器数据 即使用HTTPService HTTP GET 或POST 请求 和WebService 通过
  • LeetCode——021

    21 Merge Two Sorted Lists My Submissions QuestionEditorial Solution Total Accepted 122136 Total Submissions 345783 Diffi
  • JAVA字符流InputStreamReader读取文本

    二 字符流 1 单个字符读取 public static void main String args try InputStreamReader in new InputStreamReader new FileInputStream D
  • 简体ProDAD Mercalli SAL 6.0全网唯一系统讲解课中文教程

    ProDAD Mercalli SAL 镜头抖动处理软件 是一个视频防抖插件 可以固定拍摄时的图像抖动 消除摄像机拍摄视频时抖动 颠簸和颤抖的影响 提高画面质量 是进行后期摄影图像编辑必不可少的插件之一 虽然ProDAD Mercalli
  • 小学生机器人编程知识

    小学生机器人编程知识 现在的家长在培养孩子的学习方面也是非常的认真的 会给孩子选择一些能够有利于孩子成长的课程 就拿现在很多的家长给孩子选择少儿编程的课程来说 他们想要孩子去学习机器人编程的课程 但是他们对于小学生机器人编程知识并不是很清楚
  • windows下设置redis服务开机后自动启动

    1 配置环境变量 在path配置环境变量 2 在redis安装目录下打开cmd 输入如下代码 redis server exe service install redis windows conf loglevel verbose 3 这样
  • MAC下搭建Android Studio

    JDK1 8安装 1 到 http www oracle com technetwork java javase downloads jdk8 downloads 2133151 html 下载jdk8 2 双击安装 3 安装完成 在命令行
  • 7-13 日K蜡烛图 (15分)

    7 13 日K蜡烛图 15分 股票价格涨跌趋势 常用蜡烛图技术中的K线图来表示 分为按日的日K线 按周的周K线 按月的月K线等 以日K线为例 每天股票价格从开盘到收盘走完一天 对应一根蜡烛小图 要表示四个价格 开盘价格Open 早上刚刚开始
  • Java复习-20-接口(1)

    接口的定义及使用 如果相对外部隐藏全部的实现细节 就要通过接口来实现 接口的定义 使用interface关键字来定义 由于接口描述的是一个公共的定义标准 所以在接口之中所有的抽象方法的访问权限都为public interface IMess
  • 数据库种类有什么?三种不同数据库介绍

    一 数据库种类有哪些 早期较为时兴的数据库种类有三种 分别是层次式数据库 网络式数据库和关系型数据库 而在如今的互联网中 最常见的数据库种类主要有2种 即关系型数据库和非关系型数据库 二 层次数据库介绍 层次数据库是最开始研制的数据库系统软
  • python获取时间前一天

    可以使用 Python 的 datetime 模块来获取时间前一天的日期 首先 需要导入 datetime 模块 import datetime 然后 可以使用 datetime 模块中的 datetime datetime now 函数获
  • GET、POST、PUT、DELETE等用法

    1 向服务器请求数据 GET get请求是用来获取数据的 只是用来查询数据 不对服务器的数据做任何的修改 新增 删除等操作 get请求会把请求的参数附加在URL后面 2 提交资源到服务器 post post请求一般是对服务器的数据做改变 常
  • so部标协议模拟服务器,808部标协议

    满意答案 豆 浆 2016 10 12 采纳率 58 等级 25 已帮助 62843人 基于部标JT T 808协议及数据格式的GPS服务器 2011年5月10日中国交通通信信息中心下发了 印发道路运输车辆卫星定位系统平台和道路运输车辆卫星
  • python 43行 写一个天气查询爬虫+GUI图形界面化

    这个爬虫爬的是 墨迹天气 https tianqi moji com weather china henan xinxiang 分析了一下这个网址 不同城市的网址就后边的的拼音不同 这时候就只需拼接用户输入的网址就可得到要查询的网址 然后通
  • Putty基础教程之(一).入门命令学习及编写HTML

    这篇文章主要介绍Putty的基础用法 同时通过Putty来编辑HTML文件 一方面是自己最近学习的在线笔记 另一方面希望文章对你有所帮助 Putty是Windows下操作Linux命令的小工具 也是一个跨平台的远程登陆工具 非常好用 常见命
  • 【IT之路】MyEclipse部署java web项目到Tomcat

    1 Java web 项目部署发布到tomcat 2 启动tomcat
  • 测试分布式系统的线性一致性

    测试分布式系统的线性一致性 一 介绍 正确实现一个分布式系统是非常有挑战的一件事情 因为需要很好的处理并发和失败这些问题 网络包可能被延迟 重复 乱序或者丢弃 机器可能在任何时候宕机 即使一些设计被论文证明是正确的 也仍然很难再实现中避免
  • css3弹性盒子模型(Flex)

    css3弹性盒子模型 CSS3 弹性盒子 Flex Box 设置弹性盒子 容器的属性 设置主轴方向 flex direction 设置主轴方向上对齐方式 justify content 设置副轴方向上的对齐方式 align items 设置