
文章插圖
我是路程lucky , 6年web前端開(kāi)發(fā)經(jīng)驗(yàn) , 目前參與的項(xiàng)目技術(shù)棧主要是React , 歡迎關(guān)注~
今天給大家分享一下解決一個(gè)遇到的樣式布局問(wèn)題經(jīng)歷 , “標(biāo)簽寬度自適應(yīng) , 間距固定 , 每行指定個(gè)數(shù)” , 看似簡(jiǎn)單 , 但新手朋友如果不注意很容易踩坑 , 下面我們就來(lái)逐步分析解決這個(gè)css布局小問(wèn)題 。
場(chǎng)景描述工作中遇到這樣一個(gè)需求場(chǎng)景:由于視覺(jué)設(shè)計(jì)師的視覺(jué)審美要求下 , h5頁(yè)面中 , 查詢的商品列表每行有多個(gè)標(biāo)簽標(biāo)簽個(gè)數(shù)不固定 , 寬度自適應(yīng) , 左右間距固定 。整體左右間距30px , 標(biāo)簽之間間距6px , 頁(yè)面整體寬度640px(不同機(jī)型不同寬度) 。
注:當(dāng)前h5腳手架開(kāi)發(fā)采用的scss , 已集成了px2rem也就是像素轉(zhuǎn)rem , 編寫(xiě)px即可實(shí)現(xiàn)不同寬度的自適應(yīng) 。
初步思考通常 , 由于移動(dòng)端布局有一定兼容性等問(wèn)題 , 一些特定的布局如display:grid等 , 我們還是謹(jǐn)慎使用 。我們想到的第一想法是flex布局 , 可以使得寬度自適應(yīng) , 閃現(xiàn)的思路是:
- 父元素設(shè)置為display:flex , 自動(dòng)換行
- 子元素設(shè)置間距:距離上下左右 , 然后寬度就自適應(yīng) , 然后就好了?
// 父元素
.parent {
display:flex;
flex-wrap:wrap;
margin-left: 10px;
margin-right: 30px;
}
// 大致的想法
.child {
flex: 1;
margin: 10px 6px;
width: auto; // ?這個(gè)寬度如何處理
}
對(duì)于
justify-content:space-between , 期初也想使用這種 , 但需求要間距固定 , 無(wú)法適用 。
問(wèn)題來(lái)了現(xiàn)實(shí)是殘酷的 , 你會(huì)發(fā)現(xiàn)子元素全部在一排 , 沒(méi)有寬度 , 也發(fā)現(xiàn)這里的最大難點(diǎn)就是如何確定標(biāo)簽寬度
- 如何實(shí)現(xiàn)一行三個(gè)
- 每行的三個(gè)標(biāo)簽第二個(gè)標(biāo)簽和第三個(gè)標(biāo)簽之間有間距 , 而第一個(gè)和左邊相對(duì)頁(yè)面左右邊是沒(méi)有間距的 。
子元素標(biāo)簽寬度 = ( 頁(yè)面總寬度100% – 頁(yè)面左右寬度30px * 2 – 標(biāo)簽左右邊框2px * 3 – 邊框左右間距6px * 2 ) / 3;
化簡(jiǎn):
子元素標(biāo)簽寬度 = 100% / 3 – 30px * 2 / 3 – 2px * 3 / 3 – 6px * 2 / 3
= 100% / 3 – 26px
// 子元素寬度
.child {
width: calc(100% / 3 – 26px);
}
還是有問(wèn)題 , 1行只能展示2個(gè)這樣布局 , 還是發(fā)現(xiàn)出現(xiàn)問(wèn)題 , 雖然我們按照思路進(jìn)行布局 , 但我們忽略了一個(gè)重點(diǎn):標(biāo)簽的左右間距規(guī)律是:第1、4、7等最左側(cè)第一個(gè) , 也就是3n+1距離左側(cè)是空的 。第一時(shí)間 , 你會(huì)想通過(guò)偽類 nth-chilld(3n+1)來(lái)實(shí)現(xiàn)標(biāo)簽 。但如果真這樣做 , 這里對(duì)于h5頁(yè)面來(lái)說(shuō) ,
- 誤差大 , 這種間距稍不留神就會(huì)出現(xiàn)溢出換行
- 維護(hù)成本高 , 其他小伙伴維護(hù)需要注意這個(gè)偽類控制
思路:
- 父元素寬度設(shè)置為100%加上一個(gè)間距的距離
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 將夜葉紅魚(yú)為什么自殺
- 好嗨哦是誰(shuí)說(shuō)的
- 好嗨哦是什么梗
- win10莫名其妙自動(dòng)關(guān)機(jī)重啟 win10莫名其妙自動(dòng)關(guān)機(jī)
- 淘寶獲取流量的方法 淘寶采集軟件自帶流量
- 感受自然什么意思
- 感受自然什么作用
- 感悟什么的文章600字
- 感受自然什么
- 夢(mèng)見(jiàn)自己能飛
