一直寻找card排列的完美解决方案,之前是用js实现老是会出bug,这里介绍一种纯css实现
这里感谢好
好叶叶孤城
提供的方法
先放代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
.test {
float: left;
width: 25%;
box-sizing: border-box;
padding: 10px;
min-width: 150px;
}
.container {
width: 100%;
}
@media (max-width:615px) {
.test {
float: left;
width: 33%;
box-sizing: border-box;
padding: 10px;
min-width: 150px;
}
}
@media (max-width:465px) {
.test {
float: left;
width: 50%;
box-sizing: border-box;
padding: 10px;
min-width: 150px;
}
}
@media (max-width:315px) {
.test {
float: left;
width: 100%;
box-sizing: border-box;
padding: 10px;
}
}
</style>
</head>
<body>
<div class="container">
<div class="test">
<img src="./640.webp" style="max-width: 100%;" />
</div>
<div class="test">
<img src="./640.webp" style="max-width: 100%;" />
</div>
<div class="test">
<img src="./640.webp" style="max-width: 100%;" />
</div>
<div class="test">
<img src="./640.webp" style="max-width: 100%;" />
</div>
</div>
</body>
</html>
再放效果
一行
第二行
下面是说明,不需要的可以不看了
1、用到的技术是响应式布局(就是监听页面宽度实现不同变化)
2、这里用的是float,当然用flex也是一样的
3、其实不是完美的,比如三个一排的时候是33%,所以还剩下1%在最后面,不影响大局
4、@media中的max-width值得由来:
比如这里设置的每个元素的最小宽度是150px,也就是再低于这个值就会换行,
当有四个换到三个的临界值是 150 * 4 = 600 。也就是说再小就要换行了,这个时候我们主动换行,比如上面的在615的时候就把宽度设置为33%,这样就提前完成转换,实现完美衔接。
同理三到二就是 150 * 3 = 450 。提前15px 就是 465;其它同理
5、这里计算的宽度是浏览器可视范围的宽度,所有计算上面值得时候要加上其它布局的宽度。
版权声明:本文为sunyv1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。