flex:1详解,以及flex:1和flex:auto的区别

2023-09-14 10:26:11

什么是flex:1?

在css中,我们经常可以看到这样的写法:

.box {
  display: flex;
}

.item {
  flex: 1;
}

这里的flex:1相当于flex: 1 1 0%,它是一个简写属性,表示项目(flex item)在弹性容器(flex container)中如何伸缩。它相当于flex: 1 1 0%,包含了三个子属性:

  • flex-grow 定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
  • flex-shrink 定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
  • flex-basis 定义在分配多余空间之前,项目占据的主轴空间(main size),浏览器根据此属性计算主轴是否有多余空间,默认值为 auto ,即项目本身的大小。

flex:1的作用

使用flex:1的作用是让项目能够自动填充剩余空间,实现自适应布局。例如,我们有一个水平排列的三个项目,它们的内容长度不一样,我们想让它们平均占据一行的空间,就可以给它们都设置flex:1\

<div class="container">
  <div class="item">Hello</div>
  <div class="item">World</div>
  <div class="item">Flex</div>
</div>
.container {
  display: flex;
}

.item {
  flex: 1;
}

这样,无论容器的宽度如何变化,项目都会自动调整宽度,保持平均分配。

flex:1和其他值的区别

flex属性还可以取其他值,例如:

  • flex: none,相当于flex: 0 0 auto,表示项目不会伸缩,保持原始大小。
  • flex: auto,相当于flex: 1 1 auto,表示项目会根据自身大小和剩余空间进行伸缩。
  • flex: n(n为正整数),相当于flex: n 1 0%,表示项目的放大比例为n,其他值默认。

我们可以通过修改上面的例子来观察不同值的效果:

<div class="container">
  <div class="item none">Hello</div>
  <div class="item auto">World</div>
  <div class="item one">Flex</div>
</div>
.container {
  display: flex;
}

.item {
  border: 1px solid black;
}

.none {
  flex: none;
}

.auto {
  flex: auto;
}

.one {
  flex: 1;
}

可以看到,none类的项目保持了原始大小,auto类的项目根据内容长度进行了伸缩,one类的项目平分了剩余空间。

felx:1和flex:auto的区别

  • flex-basis属性定义了项目在分配多余空间之前,占据的主轴空间(main size)。
  • flex:1相当于flex: 1 1 0%,表示项目的基准大小为0%,不考虑项目本身的大小,只根据剩余空间进行伸缩。
  • flex:auto相当于flex: 1 1 auto,表示项目的基准大小为auto,即项目本身的大小,同时也会根据剩余空间进行伸缩。

这样,当容器的大小变化时,两者的表现也不同。

  • 如果容器有足够的空间,flex:1和flex:auto都会平分剩余空间,但是flex:auto会保持项目本身的最小宽度,而flex:1不会。
  • 如果容器没有足够的空间,flex:1会优先压缩内容,使得所有项目都能等分空间,而flex:auto会优先保持内容的完整性,挤压其他项目的空间。

总结

flex:1是一个常用的CSS属性,它可以让项目在弹性容器中自动填充剩余空间。
它是一个简写属性,包含了三个子属性:flex-grow, flex-shrink, flex-basis。
它相当于flex: 1 1 0%,flex:1和flex:auto都会占满剩余空间,我们可以根据合适的需求去选择这两种属性。

更多推荐

Boostrap对HTML的表格的设计和优化

目录01-Bootstrap的默认表格风格02-没有边线-边界的表格03-行与行的背景颜色交替变换(条纹样式)04-给表格加上边框效果05-鼠标移到行上时该行的颜色加深06-把表格的padding值缩减一半,使表格看起来更紧凑07-为表格的行或单元格设置颜色01-Bootstrap的默认表格风格Bootstrap对表格

生信分析Python实战练习 9 | 视频27

开源生信Python教程生信专用简明Python文字和视频教程源码在:https://github.com/Tong-Chen/Bioinfo_course_python目录背景介绍编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Pyt

Springboot部署服务器项目上线

第一步,项目打包,有两种方式第一种、直接在项目根目录打开终端,输入以下语句即可。如下图:mvncleanpackage-DskipTests第二种、在右侧点击Maven选项,选择鼠标左键双击package选项即可。如下图:两种方法的结果,都会得到我们需要jar包,效果如下图:(可选项)如果觉得jar包名太难记,还可以在

“Vue进阶:深入理解插值、指令、过滤器、计算属性和监听器“

目录引言:Vue的插值Vue的指令Vue的过滤器Vue的计算属性和监听器vue购物车案例总结:引言:Vue.js是一款流行的JavaScript框架,它提供了许多强大的功能来简化前端开发。在本篇博客中,我们将深入探讨Vue的一些高级特性,包括插值、指令、过滤器、计算属性和监听器。通过理解和灵活运用这些功能,我们可以更好

10个值得关注的学习网站,知乎超30万人收藏,什么资源都可找到!

hi,大家好我是技术苟,每周准时上线为你带来实用黑科技!由于公众号改版,现在的公众号消息已经不再按照时间顺序排送了。因此小伙伴们就很容易错过精彩内容。喜欢黑科技的小伙伴,可以将黑科技百科公众号设为标星,这样就不会走丢啦~免责声明hello,朋友们,黑科技百科所有资源均为免费分享,绝多部分来源于互联网,所有资源仅提供学习

线程的方法(未完成)

线程的方法1.获取当前线程对象:CurrentThread()@Testpublicvoidbb(){Threadthread=Thread.currentThread();System.out.println(thread.getName());//打印main}2.currentThread().setName和c

CPP-Templates-2nd--第 21 章 模板和继承

目录21.1空基类优化(TheEmptyBaseClassOptimization,EBCO)21.1.1布局原则21.1.2将数据成员实现为基类21.2TheCuriouslyRecurringTemplatePattern(CRTP)21.2.1TheBarton-NackmanTrick21.2.2运算符的实现(

客户端和服务端信息交互模型

什么是客户端和服务端?客户端:可以向服务器发请求,并接收返回的内容进行处理服务器端:能够接收客户端请求,并且把相关资源信息返回给客户端的当用户在地址栏中输入网址,到最后看到页面,中间都经历了什么?后面会详细解析每个步骤干的事一、URL地址解析A:URI/URL/URNURI(UniformResourceldentif

云服务部署:AWS、Azure和GCP比较

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

【腾讯云 Cloud Studio 实战训练营】提升开发效率与协作:探索腾讯云 Cloud Studio 的强大功能与优势

文章目录一、前言二、认识腾讯云CloudStudio2.1什么是云端开发环境2.2CDE的特点与优点2.2.1提高效率,开发环境一键运行2.2.2提高生产力,可以并行的工作2.2.3开发更加规范2.2.4提供监管,降低资本与资源2.3云端开发环境具备的四大要素2.4腾讯云CloudStudio强大的AI功能2.4.1与

tauri vue vite elemrntui

tauri+vue+viterust```根据https://www.rust-lang.org/tools/install,安装rust。如果是windows会跳出vs工具的安装器,会自动勾选要安装的,直接点安装即可执行cargo--version检查安装是否完成,可以使用cargo创建一个hello项目验证rust

热文推荐