使用CSS實現(xiàn)微信朋友圈的九宮格圖片自適應(yīng)

大家應(yīng)該都發(fā)過微信朋友圈,它最多發(fā)9張圖片稽亏,不知大家有沒有思考過,微信朋友圈的九宮格構(gòu)圖是怎么實現(xiàn)的砖瞧,本篇博客將帶領(lǐng)大家采用CSS就實現(xiàn)朋友圈這一功能拒啰。

四種情況

朋友圈發(fā)送1~9張不等數(shù)量的圖片的時候荞怒,樣式會有所變化轴或,大體可分為以下4種情況尝哆。

  1. 一張圖片匈庭,此時會完整的將整張圖片展示出來


    微信圖片_20211222182657.jpg
  2. 2~3張圖片夫凸,每張圖片都會進(jìn)行縮小,且大小一樣阱持,且在第一排依次排開(一排最多3張)


    微信圖片_20211222182651.jpg
微信圖片_20211222182641.jpg
  1. 4張圖片夭拌,每張圖片都會進(jìn)行縮小,且大小一樣衷咽,每排各2張


    微信圖片_20211222182632.jpg
  2. 5~9張圖片鸽扁,每張圖片都會進(jìn)行縮小,且大小一樣镶骗,每排各3張圖桶现,依次排列。


    微信圖片_20211222182645.jpg

代碼分析

\color{#4285f4}{**css選擇器**}

采用nth-child() 和nth-last-child()選擇器

:nth-child(n) 
/* 選擇器匹配屬于其父元素的第 N 個子元素鼎姊,不論元素的類型骡和。
n 可以是數(shù)字、關(guān)鍵詞或公式相寇。  */
:nth-last-child(n) 
/* 選擇器匹配屬于其元素的第 N 個子元素的每個元素慰于,不論元素的類型,從最后一個子元素開始計數(shù)唤衫。
n 可以是數(shù)字东囚、關(guān)鍵詞或公式。 */

\color{#4285f4}{**1張圖片**}

一張圖片的時候战授,我們直接將圖片展示出來就可以了

.box {
   display: flex;
   flex-wrap: wrap;
}

.imageBox {
   position: relative;
   overflow: hidden;
   margin-bottom: 2%;
   width: 300px;
}
<div class="box">
  <div class="imageBox">
      <img src="https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF" />
  </div>
</div>
1.jpg

\color{#4285f4}{**2 ~ 3張圖片**}

2或3張圖片時,圖片排列在同一行

/* 2/3 */
  .imageBox img:nth-child(1):nth-last-child(2),
  .imageBox img:nth-child(2):nth-last-child(1),
  .imageBox img:nth-child(1):nth-last-child(3),
  .imageBox img:nth-child(2):nth-last-child(2),
  .imageBox img:nth-child(3):nth-last-child(1) {
      width: 32%;
  }
2.jpg
3.jpg

\color{#4285f4}{**4張圖片**}

每一行只有兩個圖片页藻,且兩張圖片各占一半左右的寬度

/* 4 */
.imageBox img:nth-child(1):nth-last-child(4),
.imageBox img:nth-child(2):nth-last-child(3),
.imageBox img:nth-child(3):nth-last-child(2),
.imageBox img:nth-child(4):nth-last-child(1) {
   width: 49%;
}
4.jpg

\color{#4285f4}{**5~9張圖片**}

和3種圖片的時候排版是一樣的,但是我們可以簡化寫法

/* 5~9 */
.imageBox img:nth-child(1):nth-last-child(n + 5),
.imageBox img:nth-child(1):nth-last-child(n + 5)~img {
   width: 32%;
}
9.jpg

\color{#4285f4}{**全部代碼**}

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>模擬微信朋友圈九宮格排版</title>
    <style>
        .box {
            display: flex;
            flex-wrap: wrap;
        }

        .imageBox {
            position: relative;
            overflow: hidden;
            margin-bottom: 2%;
            width: 300px;
        }

        /* 2/3 */
        .imageBox img:nth-child(1):nth-last-child(2),
        .imageBox img:nth-child(2):nth-last-child(1),
        .imageBox img:nth-child(1):nth-last-child(3),
        .imageBox img:nth-child(2):nth-last-child(2),
        .imageBox img:nth-child(3):nth-last-child(1) {
            width: 32%;
        }

        /* 4 */
        .imageBox img:nth-child(1):nth-last-child(4),
        .imageBox img:nth-child(2):nth-last-child(3),
        .imageBox img:nth-child(3):nth-last-child(2),
        .imageBox img:nth-child(4):nth-last-child(1) {
            width: 49%;
        }

        /*  5張以上圖片  */
        .imageBox img:nth-child(1):nth-last-child(n + 5),
        .imageBox img:nth-child(1):nth-last-child(n + 5)~img {
            width: 32%;
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="imageBox">
            <img src="https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF" />
            <img src="https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF" />
            <img src="https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF" />
            <img src="https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF" />
            <!-- <img src="https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF" />
            <img src="https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF" />
            <img src="https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF" />
            <img src="https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF" />
            <img src="https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF" /> -->
        </div>
    </div>
</body>

</html>

\color{#4285f4}{**最后**}

如果本文能對大家有所幫助的話植兰,點個\color{#ea4335}{贊}再走吧~
歡迎大家 \color{#ea4335}{留言}交流~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末份帐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子楣导,更是在濱河造成了極大的恐慌废境,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筒繁,死亡現(xiàn)場離奇詭異噩凹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)毡咏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門驮宴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呕缭,你說我怎么就攤上這事堵泽。” “怎么了恢总?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵迎罗,是天一觀的道長。 經(jīng)常有香客問我片仿,道長纹安,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任砂豌,我火速辦了婚禮厢岂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奸鸯。我一直安慰自己咪笑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布娄涩。 她就那樣靜靜地躺著窗怒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蓄拣。 梳的紋絲不亂的頭發(fā)上扬虚,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機(jī)與錄音球恤,去河邊找鬼辜昵。 笑死,一個胖子當(dāng)著我的面吹牛咽斧,可吹牛的內(nèi)容都是我干的堪置。 我是一名探鬼主播躬存,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼舀锨!你這毒婦竟也來了岭洲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤坎匿,失蹤者是張志新(化名)和其女友劉穎盾剩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體替蔬,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡告私,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了承桥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驻粟。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖快毛,靈堂內(nèi)的尸體忽然破棺而出格嗅,到底是詐尸還是另有隱情,我是刑警寧澤唠帝,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布屯掖,位于F島的核電站,受9級特大地震影響襟衰,放射性物質(zhì)發(fā)生泄漏贴铜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一瀑晒、第九天 我趴在偏房一處隱蔽的房頂上張望绍坝。 院中可真熱鬧,春花似錦苔悦、人聲如沸轩褐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽把介。三九已至,卻和暖如春蟋座,著一層夾襖步出監(jiān)牢的瞬間拗踢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工向臀, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留巢墅,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像君纫,于是被迫代替她去往敵國和親驯遇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容