技术标签: 前端开发 # HTML+CSS css web 前端 css3
在 flex 布局模型中,flex 容器的子级可以在任何方向上布局,并且可以“伸缩”它们的大小,要么增长以填充未使用的空间,要么缩小以避免溢出父级。孩子的水平和垂直对齐都可以很容易地操作。这些框的嵌套(水平内垂直,或垂直内水平)可用于构建二维布局。
在真正了解之前,我一直使用float进行布局,但了解了Flex布局之后,发现它是个超好用的排版工具,也是它拯救了我,用它来做网页非常容易达到响应式,因为它有极强大的适应能力,可以随着网页缩放去改变比例。
flex 布局背后的主要思想是:让容器能够改变其项目的宽度/高度(和顺序)以最好地填充可用空间(主要是为了适应各种显示设备和屏幕尺寸)。
Flex 布局表面上类似于块布局、常规布局(基于垂直的块和基于水平的内联)。它缺少许多可用于块布局的更复杂的以文本或文档为中心的属性,例如floats和columns。但似乎最重要的是,与常规布局相反,Flex布局与方向无关。Flex可用于Web 应用程序和复杂的网页,通可以自由分配空间和对齐内容。
但在大型的布局情况下我更推荐Grid网格布局。当然在我们还没学习到的情况下不需要考虑这些
我们可以看到CSDN使用了Flex布局
那么在了解了这么多信息之后,现在我们可以开始正式学习Flex布局了
display:flex
定义了一个弹性容器;内联或块取决于给定的值。它为所有直接子级启用了弹性上下文。
如果你想要flex的布局生效就需要提前给父元素设置 display:flex
.content{
display:flex
}
我们看一个示例
<style>
.content {
display: flex;
}
.box-parent{
width: 100%;
border: 1px red solid;
margin-bottom: 10px;
}
.box {
width: 200px;
height: 100px;
background-color: black;
margin: 10px;
color: aliceblue;
}
</style>
<!-- 添加的情况 -->
<div class="box-parent content">
<h1>display: flex</h1>
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
</div>
<!-- 正常的情况 -->
<div class="box-parent">
<h1>正常情况</h1>
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
</div>
你能发现区别吗 ?
flex-direction
决定了弹性方向,它建立了主轴,从而定义了弹性项目放置在弹性容器中的方向。
Flex 是一个单向布局概念。将弹性项目视为主要以水平行或垂直列布局。
.content{
flex-direction: row | row-reverse | column | column-reverse;
}
在设置了 flex-direction
之后因为默认是flex-direction:row
,这就是为什么前面的 display:flex
会默认排成一列,从左到右
flex-wrap
用于包装盒子,默认情况下,弹性项目都会自己主动组合成一行。
我们可以更改它并允许使用此属性根据需要的来包装项目。
.container {
flex-wrap: nowrap | wrap | wrap-reverse;
}
flex-flow
用于设置盒子的弹性流动.
这是 flex-directionandflex-wrap
属性的简写,它们共同定义了 flex 容器的主轴和交叉轴。默认值为 row nowrap
。
属性的值的效果和上面的 column
是一样的,该属性将 flex-directionan
与 flex-wrap
进行了组合。
你可以这样使用,将两个值放一起
.content{
flex-flow: nowrap row-reverse;
}
justify-content
定义了沿主轴的对齐方式。
当一行上的所有 flex 项目都不灵活,或者是灵活的但已达到最大大小时,它有助于分配额外的可用空间。
当项目溢出行时,它还会对项目的对齐方式施加一些控制。
.content{
justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly | start | end | left | right ... + safe | unsafe;
}
这里穿插一个重要的知识点
例如
justify-content: safe center;
但在使用中会有浏览器兼容性问题,所以我们只要在 flex 子元素上应用 margin: auto
; 即可解决问题,不需要用 safe 关键字
align-items
定义了弹性项目如何沿当前行的交叉轴布局的默认行为。将其视为justify-content横轴(垂直于主轴)的版本。
你可以理解为水平位置
.content {
align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end | self-start | self-end + ... safe | unsafe;
}
align-content
用于对齐内容,当横轴上有额外空间时,将对齐 flex 容器的线,类似于在 justify-content
主轴内对齐单个项目的方式。
那么 align-content
有什么特点呢?和 align-items
有什么区别呢?
align-content
属性只对多行灵的活容器生效,这里flex-wrap
设置为wrap)。align-content 在单行灵活容器下(即 whereflex-wrap设置为其默认值no-wrap)不会生效。
也就是说
align-items
的设置对象是行内成员;align-content
的设置对象是所有行,且只有在多行弹性盒子容器中才生效。
当然
align-content
的前提是这一个容器整体定义了一个高度
.content {
align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch | start | end | baseline | first baseline | last baseline + ... safe | unsafe;
}
gap
属性明确控制弹性项目之间的空间。
注意是弹性项目之间的,不影响盒子边缘,和 margin
是有明显区别的。
.content{
display: flex;
...
/* 行间距/列边距 统一设置 */
gap: 5px;
/* 行间距/列边距 分开设置 */
gap: 5px 10px;
/* 行间距/列边距 独立设置 */
row-gap: 5px;
column-gap: 10px;
}
它不仅适用于 flexbox,gap
适用于网格和多列布局。
默认情况下,弹性项目按原顺序排列。但是,order
属性控制它们在弹性容器中出现的顺序。
.item {
order: 2; /* 默认是 0 */
}
具有相同order
的节点会恢复到原来的排列。
我们可以看下面这个例子,认真思考
<style>
.box-parent{
display: flex;
width: 100%;
border: 1px red solid;
margin-bottom: 10px;
}
.box-parent > div {
width: 200px;
height: 100px;
background-color: black;
margin: 10px;
color: aliceblue;
}
</style>
<div class="box-parent">
<div style="order: 1;">1 <p>order:1</p></div>
<div style="order: 1;">2 <p>order:1</p></div>
<div style="order: 2;">3 <p>order:2</p></div>
<div style="order: -1;">4 <p>order:-1</p></div>
</div>
flex-grow
定义了弹性项目在必要时扩大/增长的能力。
它适合无单位的项目,它规定了项目应该占用的弹性容器内的可用空间量。
如果所有项目的 flex-grow
都设置为1,则容器中的剩余空间将平均分配给所有子项。如果其中一个项目的值为2,则该项目将占用其他项目之一的两倍空间(或者至少会尝试)。
.item {
flex-grow: 2; /* 默认 0 负数无效。*/
}
你可以自己试一下下面这个例子
<style>
.box-parent{
display: flex;
width: 100%;
border: 1px red solid;
margin-bottom: 10px;
}
.box {
width: 100px;
height: 100px;
background-color: black;
margin: 10px;
color: aliceblue;
}
</style>
<div class="box-parent">
<div class="box" style="flex-grow: 1;">1</div>
<div class="box" style="flex-grow: 4;">2</div>
<div class="box">3</div>
<div class="box">4</div>
</div>
flex-shrink
定义了弹性项目在必要时收缩的能力。
.item {
flex-shrink: 3; /* 默认是 1 */
}
注意区分, flex-grow
用于提高优先增长能力,而 flex-shrink
则是提高优先伸缩能力
flex-basis
定义了在分配剩余空间之前元素的默认大小。它可以是长度(例如 10%、2rem 、100px等)或关键字。
.item {
flex-basis: | auto; /* 默认 auto */
}
flex
是 flex-grow
, flex-shrink
和 flex-basis
组合的简写。
第二个和第三个参数 ( flex-shrink
和 flex-basis
) 是可选的。
默认值为 0 1 auto
,但如果使用单个数值,例如 flex: 3
,它就像设置 flex-grow: 5; flex-shrink: 1; flex-basis: 0%
。
.item {
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}
align-self
会覆盖已有的 align-items
的值,两者的可取值完全一样。
两者的区别在于:伸缩容器内部某个元素在排列方式需要有所差异,此时就不能使用
align-items
,因为 align-items
作用于整体,我们希望作用于部分,这就是 align-self
的作业。
一个简单的菜单栏示例
<style>
* {
margin: auto;
padding: 0;
}
header {
width: 90%;
min-width: 600px;
height: 55px;
background-color: rgba(0, 0, 0, 0.062);
border-radius: 0 0 20px 20px;
}
.list {
display: flex;
height: 100%;
}
.list>li {
flex-basis: 80px;
text-align: center;
list-style: none;
}
.logo {
flex-grow: 0.5;
}
</style>
<header>
<ul class="list">
<li class="logo">
<div> LOGO </div>
</li>
<li>
<a href="#">Home</a>
</li>
<li>
<a href="#">Page</a>
</li>
<li>
<a href="#">More</a>
</li>
<li>
<a href="#">About</a>
</li>
</ul>
</header>
文章浏览阅读1w次,点赞4次,收藏18次。视频监控安防平台-国标28181 2016 GB28181 2016平台全项检测_怎么验证是否符合28181-2016标准
文章浏览阅读1.4k次。OrenBoiman, Eli Shechtman, Michal Irani. In Defense of Nearest-Neighbor Based ImageClassification. IEEE Conference on Computer Vision & Pattern Recognition,2008, 69(4): 1~8这篇文章是我在做本科毕业设计《基于视频的运动目标检测_in defense of nearest-neighbor based image classification
文章浏览阅读2.5w次,点赞48次,收藏435次。开源量化交易框架整理: https://www.oschina.net/p/samaritan https://www.oschina.net/p/vn-py https://www.oschina.net/p/abu https://www.oschina.net/p/abuquant https://github.com/sun0x00/RedTorch ..._量化交易 交易费用 对比
文章浏览阅读1.2k次。如果没有找到传说中的病毒文件, 就别折腾了,卸载重装重装前备份下数据:C:\Users\{{这里是你的用户名}}}\AppData\Local\Google\Chrome将这下面的文件备份到其他位置,卸载重装。..._getfileattributes c:\users\zhang\appdata\local\google\chrome\user data\crash
文章浏览阅读345次。1.团队介绍1.1 团名:终于可以回家了嗷嗷嗷1.2 团员介绍2.参考来源3.项目git地址3.1Git代码管理4.前期调查5.项目功能架构图、主要功能流程图6.UML图7.运行截图7.1登陆界面7.2注册成功7.3登陆后转换为游戏界面7.4排行榜8.关键代码8.1登陆界面账号密码匹配操作,优先匹配账号8.2文件更新操作,每轮游戏过后,都会将所获得的信息进行更新8.3对文件中的分数进行排序操作,取..._java俄罗斯方块分数排行
文章浏览阅读1k次,点赞42次,收藏7次。AIGC技术的未来发展前景广阔,随着人工智能技术的不断发展,AIGC技术也将不断提高。未来,AIGC技术将在游戏和计算领域得到更广泛的应用,使游戏和计算系统具有更高效、更智能、更灵活的特性。同时,AIGC技术也将与人工智能技术紧密结合,在更多的领域得到广泛应用,对程序员来说影响至关重要。未来,AIGC技术将继续得到提高,同时也将与人工智能技术紧密结合,在更多的领域得到广泛应用。感兴趣的小伙伴,赠送全套AIGC学习资料和安装工具,包含AI绘画、AI人工智能等前沿科技教程,模型插件,具体看下方。
文章浏览阅读247次。目录运营岗位分工解决问题活动内容运营运营究竟在做什么拉新 acquisition 用户增长 增长黑客促活&留存 activation&retention转化 revenueCASE1:公众号底栏设置新媒体运营导论流量获取平台流量:基础(主要借由内容手段在各个平台做粉丝累积,用户累积)社区流量:流量沉淀微信生态:流量变现流量循环体系流量循环抖音平台简介相关概念知乎运营新平台运营通用方法论选问题——._史莱姆商家运营
文章浏览阅读410次。JOptionPane的简单应用: 1.首先引入包: import javax.swing.JOptionPane; 2.添加如下代码: Object[] options = {"确定","取消","帮助"}; //定制可供选择按钮 int response=JOpt..._joptionpane需要什么包
文章浏览阅读7.2w次,点赞229次,收藏1.8k次。这次课程设计总体来说是一次非常有意义的任务,因为在这次课程设计中我学会了很多GUI编程和流类的知识,提高了编程的能力,也增加了对编程的兴趣。虽然这是一个小项目,但是能把它做好也是有很大的满足感。虽然一开始遇到很多问题,但自己都咬牙克服、迎难而上,每天都在钻研程序,然后将自己的思想与同学们交流。可以说,没有付出就没有回报,只要你肯付出,就会有收获。一件事,你只要用心去做了,将它做好,无论结果如何,你都不会留有遗憾的。_学生信息管理系统java课程设计
文章浏览阅读1.2w次,点赞3次,收藏25次。等保2.0标准正式实施已经一年多的时间,在这一年多时间里,国内各个行业、单位陆续推进网络安全等级保护工作,特别是在关键信息基础设施的政府、金融、医疗、交通等关系国计民生的重点行业,先后出台针对行业的等级保护要求。等保2.0标准的正式实施,提升了我国网络安全保护工作水平,不断筑牢网络安全防线,有效维护各行业关键基础设施与网络信息安全。等级保护制度是我国网络安全的基本制度。等级保护是指对国家重要信息、法人和其他组织及公民的专有信息以及公开信息和存储、传输、处理这些信息的信息系统分等级实行安全保护,对信息.._等保2.0三级和四级标准要求区别
文章浏览阅读1.6k次,点赞33次,收藏34次。我们先来介绍一下大模型的特点:首先就是参数量大,对于7B的模型,就需要14G以上的内存,并且由于是采用自回归的方式,所以这就需要去缓存之前的信息,这就会进一步增加消耗。而部署的定义就是将训练好的模型放在特定的环境(cpu,gpu,tpu,npu)接收输入,产生输出。这就要对模型进行优化,如模型压缩和硬化加速。从上面可以得出如何在低存储的设备上部署?如何提高token推理的速度?如何解决动态token的问题?如何提供系统吞吐量?对此现在有很多成熟的技术:低比特量化,模型并行等。_llmdeploy
文章浏览阅读672次。信号量本质是一个计数器~用来描述临界资源的有效个数~POSIX和systeam V信号量都用于同步工作,达到无冲突的访问共享资源。但是POSIX可以用于线程同步~使用信号量首先就要创建一个sem_t类型的变量#include //头文件sem_t sem1;_sem_t