仿朋友圈布局:1~9宫格css自适应

Demo:https://sunzsh.github.io/html-demos/timeline.html

代码:https://github.com/sunzsh/st-html-demo/blob/master/timeline.html

大家好,我们都知道

朋友圈里,不同数量的照片

会有不同的排列布局

今天我写了一个

根据数量,自动实现这个布局的css

什么原理呢

我们先来看一下一张照片的时候

首先我们在外层的容器

设置一个 flex 布局

然后固定一个宽度允许换行

然后只有一张照片的时候呢

我们用到了一个 only-child 的伪类

就说这个容器下面的

并且只有一个

然后设置以宽度百分之百就可以了

然后两张照片的时候呢

我们分了两部分来写这个选择器

第一部分代表第一张照片

啊第二部分代表第二张照片

那什么原理呢就是这个隐秘的元素

必须是第一个元素

同时他必须是倒数第二个元素

那这两个选择器组合在一起

就只能命中

只有两张照片的情况下的第一张照片

那第二张照片

同理他必须是第二个元素

同时必须是倒数第一个元素

所以呢这一段样式他只能命中

有两个照片的情况下的

每一张照片

然后呢下面再给设一个margin-left

有三张照片的情况下

跟这个类似写法也是一样的

必须是第一张照片

同时必须是倒数第三张照片以此类推

然后呢给后两张照片设一个margin-left

然后四张照片的情况下不太一样

首先呢

然后第二部分呢我们用波浪线来代表

第一张后面的所有的img

然后呢再来设置

第二张和第四张

就是这两张的 marin-left

再来设置第二张后面

所有的 的 margin-top

比如说后面这两张

然后五张以上他们的大小都一样了

所以呢五张以上的情况下

就写了一套样式

那意思是

这个 标签必须是第一个元素

并且他是倒数第56789都可以

只要是倒数

第五个以上的元素都可以命中

然后呢还是

这第一张元素后面的所有的

他们的宽度都是130

然后我们要设置第二列

和第三列所有的图片的 margin-left

写法呢就是第 3n-1

那 3n 呢就代表第三列

他们的 margin-left 是3

那这样写的话呢

我们要排除掉

(只有)4张照片的情况下的第3张

也就是说

四张照片下的第三张是在这个位置

他不能有 margin-left

我们要把它排除在外

然后呢再去设置

第三张以后所有的的margin-top

也就说从第二排往后都要有margin-top

好到这里呢九宫格的样式就写完了

今天就到这里谢谢大家

最后更新于