本文做者:IMWeb·结一 原文出处:IMWeb社区 未经赞成,禁止转载
css
当决定写这篇博文时候,忽然一道闪电从脑海劈过,因而临时决定将这个熟悉而后到懵逼最后到放弃的问题分为两部分。html
闲话少说,直接上题:前端
要求以下:web
方法不惟一,欢迎你们把本身解决方案分享到评论区
bash
一、插入四个空标签,设置flex:1,这个多是你们最早想到的。iphone
<ul class="share-list">
<li class="gap"></li>
<li class="share-item"></li>
<li class="gap"></li>
<li class="share-item"></li>
<li class="gap"></li>
<li class="share-item"></li>
<li class="gap"></li>
</ul>
复制代码
.share-list{
display: flex;
}
.share-item{
width: 60px;
height: 60px;
}
.gap{
flex: 1;
width: 1%;
}
复制代码
二、第一个和第三个设置flex为1,第二个为icon的固定宽度;内嵌一层处理具体的icon宽度工具
<ul class="share-list">
<li class="share-item"><div class="item-inner"></div></li>
<li class="share-item"><div class="item-inner"></div></li>
<li class="share-item"><div class="item-inner"></div></li>
</ul>
复制代码
.share-list{
display: flex;
}
.share-item:nth-child(1),
.share-item:nth-child(3){
flex: 1;
width: 1%;
}
.share-item:nth-child(2){
width: 60px;
}
.item-inner{
width: 60px;
margin-left: auto;
margin-right: auto;
}
复制代码
三、对justify-content: space-between;
进行变通布局
每一个间隙的宽度 = (100% - 60px * 3)/ 4 = 25% - 45px
学习
先外套一层wrap,设置左右的padding各位25%,再对list设置负的左右margin各位45px(至关于左右的padding减小了45px),获得第一个和最后一个间隙;中间的间隙经过justify-content: space-between;
自由分配flex
<div class="share-list-wrap">
<ul class="share-list">
<li class="share-item"></li>
<li class="share-item"></li>
<li class="share-item"></li>
</ul>
</div>
复制代码
share-list-wrap{
padding-left: 25%;
padding-right: 25%;
}
.share-list{
display: flex;
margin-left: -45px;
margin-right: -45px;
justify-content: space-between;
}
复制代码
四、高级justify-content: space-between;
法
直接使用list的before和after伪元素参与布局
<ul class="share-list">
<li class="share-item"></li>
<li class="share-item"></li>
<li class="share-item"></li>
</ul>
复制代码
.share-list{
display: flex;
justify-content: space-between;
}
.share-list:before,
.share-list:after{
content: "";
}
.share-item{
width: 60px;
height: 60px;
}复制代码
计算各个位置,第一个位置为25% - 60px
50%,第三个位置为75% - 60px*25%
这里就再也不多讲,根据上面的间隙宽度计算公式总会算出来的,可能一开始想错了,调整下就对了。
最终的计算公式为:(假设n为间隙数,w为图标的宽度)
第i图标的位置为: i/n (%) - w(n-i)/n (px),结合left和transform表示就是
left: i/n*100%;
transform: translate( -(n-1)/n*100%,0);复制代码
设置第二个为绝对定位在中间;第一个的宽度为50%,padding-right为30px,第二个的宽度为50%,padding-left为30px,而后里面居中
.share-item:nth-child(2){
position: absolute;
left: 50%;
transform: translate(-50%, 0);
width: 60px;
}
.share-item:nth-child(1),
.share-item:nth-child(3){
float: left:
width: 100%;
text-align: center;
box-sizing: border-box;
}
.share-item:nth-child(1){
padding-right: 30px;
}
.share-item:nth-child(3){
padding-left: 30px;
}
.item-inner{
display: inline-block;
vertical-align: middle;
}复制代码
设置table-layout:fixed
,第二个td为60px,那么第一个和第三个自动等分剩余的空间,而后再单元格居中便可
这个问题,其实全部的人都能解答(请忽略有点哗众取宠的文章标题),只是答题运用的方法不一样而已,有灵活的,有死板的,最关键的仍是咱们对遇到问题怎么对应上本身的知识库。
关键问题不是你实现不了,而是你选择的方案可能不是最优的,这就是css,你了解越多,你就会越接近那个最优的捷径。
关于这个题目,你的CSS功力是否经得住考验呢?
因此前端的路上,须要不断学习系统先进的前端知识,了解业界的顶尖标准,不断自我进步......不管是巩固基础仍是进阶充电,都须要保持进步的驱动力!
说了这么多......那还不快加入腾讯官方出品的NEXT学位课程!
NEXT学位的优点?腾讯课堂官方出品、技术总监设计、高级工程师教学、硅谷最新的教学工具、前端岗位的项目实战、专家1V一、直播课答疑、腾讯内推、专属就业通道...种种优点助你走向前端的人生巅峰!
第四期招生立刻截止,限定席位等你来抢
更多课程详情可扫描下方二维码咨询助教