当前位置:首页 > uniapp > 正文内容

flex 布局大全

关中浪子3年前 (2021-02-06)uniapp1516
【腾讯云】2核2G4M云服务器新老同享99元/年,续费同价
找梯子最重要的就是稳定,这个已经上线三年了,一直稳定没有被封过,赶紧下载备用吧!

遇到的问题

在实际工作的过程中经常遇到图片文字的混排,需要图片与一段文字垂直居中,这个实现方法以前一直非常复杂,而flex是解决这个问题比较好的办法;

css代码

display:flex;1

flex的是Flexible的缩写,意为弹性。可以在单行或者多行的盒状模型中提供很好的灵活性,所以它也是自适应友好的。

图文混排垂直居中基本用法

用flex实现文字和图片在同一行的时候的垂直居中排列方式:
将父元素容器的display属性设为flex,而子元素的垂直方向上的margin设置为auto,就能实现图文混排的图片与文字垂直居中:
css代码:

<style>
.container{
display:flex;
width:30rem;
height:10rem;
background-color: #faf;
position:absolute;
top:50%;
left:50%;
margin:-5rem 0 0 -15rem;
border-radius:2rem;
}
.icon{
width:7rem;
height:7rem;
background-image: url(img/icon.png);
-webkit-background-size: 100% 100%;
background-size: 100% 100%;
margin:auto auto;
}
p{
font-size:20px;
margin:auto auto;
}</style>12345678910111213141516171819202122232425

html代码:

	<div class="container">
<div class="icon"></div>
<p>这是一段文字</p>
</div>1234

最后实现的效果:
文字图片垂直居中
这样排列,最终实现两个元素垂直居中,其实多个元素同样也能实现,其中每个元素在默认情况下元素的左右的margin值是一致的。

多项元素在一行中均匀分布

在网页设计中会经常见到许多块分布的块一行或者多行中均匀分布的情况,这种情况以前一般用固定子元素大小,并将元素的float设为left来实现,而用flex可以简化其实现的方式:
css代码片段:

.container2{
width:60rem;
height:20rem;
display:flex;
background-color: #fdf;
justify-content:space-around;/*内部子元素在容器内均匀分布*/}.box{
width:8rem;
height:8rem;
background-color: #a5a;
margin:auto auto;
font-size:2rem;
color:white;
line-height:8rem;
text-align:center;}1234567891011121314151617

html片段:

<div class="container2">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
<div class="box">5</div>
<div class="box">6</div></div>12345678

结果:
单行多div容器排列
这样就算我们去掉其中的一个或者多个剩下来的在容器内部的子元素同样能够均匀排列:
多个div垂直居中并且排列
除了设置子元素的margin垂直方向为auto之外,还能通过设置容器元素align-items来控制子元素垂直居中
css代码片段:

.container3{
width:60rem;
height:20rem;
display:flex;
background-color: #fdf;
justify-content:space-around;
align-items: center;}.box2{
width:8rem;
height:12rem;
background-color: #c5a;
font-size:2rem;
color:white;
line-height:12rem;
text-align:center;}1234567891011121314151617

html代码片段:

<div class="container3">
<div class="box">1</div>
<div class="box2">2</div>
<div class="box">3</div>
<div class="box2">4</div>
<div class="box">5</div>
<div class="box2">6</div></div>12345678

这样即便是大小不一样的方块设计同样可以实现垂直居中:
div垂直居中
align-items:center || flex-start || flex-end || stretch || baseline
分别表示,按照中轴线,容器上沿,容器下沿,高度充满容器,基准线(以文字)
其中还有许多属性需要一一仔细实验
包括

justify-content:/*在主轴上的对齐方式*/flex-direction:/*顺序*/flex-wrap:/*换行*/123

justify-content属性

justify-content属性规定了子元素在父元素内的排列方式默认值为flex-start,在横排的元素里面为从左到右排列,在纵排的元素中为从上到下排列。值可以为:
flex-start:从左边或者上部开始排列
flex-end:从右边或者下部开始排列
center:中间排列
space-around:每个元素占据相同的空间(包括margin)
space-between:第一个与最后一个元素靠边,中间的所有元素之间的排列距离一样

flex-wrap 属性

flex-wrap属性规定了在一行排不下的情况下是否换行

.container4{
display:flex;
background-color: #f99;
padding:20px;
flex-wrap:no-wrap;/*这个是默认为no-wrap 不换行*/}123456

html:

<div class="container4">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
<div class="box">5</div>
<div class="box">6</div>
<div class="box">7</div>
<div class="box">8</div></div>12345678910

假如容器container的长度比子元素的宽度相加更多,内部的元素宽度是按照内部元素原本的宽度来的。
flex
但是假如容器container的长度比子元素的宽度相加要少,那么因为容器是不换行的,他就会压缩内部元素的宽度
下面多加几个元素,则会变成这样:
flex-wrap使用
然而在大部分情况下不是我们想要的,那现在把容器的的flex-wrap属性设置为wrap(自动换行)试试

.container4{
display:flex;
background-color: #f99;
padding:20px;
flex-wrap:wrap;/*这个是默认为no-wrap 不换行*/}123456

如下:
flex-wrap设置为wrap
这样在容器内的子元素就会保持原来的宽度。


扫描二维码推送至手机访问。

版权声明:本文由码农翻生发布,如需转载请注明出处。

本文链接:https://lubojian.cn/post/14.html

分享给朋友:

相关文章

uni-app   自定义 tabBar

uni-app 自定义 tabBar

效果:因为定制页是跳其它的页,就不点了实现思维:把需要跳转的页面写在page.json中,在自定义tabBar组件,把原生的tabBar给隐藏掉page.json { "pages": [  &...

uniapp实现微信小程序端动态生成海报

uniapp实现微信小程序端动态生成海报

背景:基于uniapp实现微信小程序中商品详情的海报生成与保存效果图:思路:首先把海报上需要的内容准备好,比如用户头像,商品信息,二维码等。需要注意的是,因为二维码是动态生成的,所以需要后端传给我们,前端需要把路径和参数传给后端,后端请求微...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。