本文做者: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一、直播課答疑、騰訊內推、專屬就業通道...種種優點助你走向前端的人生巔峯!
第四期招生立刻截止,限定席位等你來搶
更多課程詳情可掃描下方二維碼諮詢助教