响应式布局-图片列表如何在窄屏(<320px)中显示为列,在宽屏(>768px)中显示为有间隙的一行
来源:互联网 发布:中国化妆品数据网 编辑:程序博客网 时间:2024/05/16 04:45
摘要:本文旨在介绍在宽屏(>768px)中图片列表中如何显示为有固定间隙的一行排列,介绍了笔者自己尝试过得五种写法,并分析了其缺点,采用什么方法就得见人见智,具体情况具体分析了。
如何在窄屏(<320px)中显示为一列呢,做出的显示效果如下图,其铺设方式是占满整行。
笔者习惯先写小屏样式,再逐渐升级到大屏样式,以提升样式代码的复用性。该示意图结构代码可参考下方:
<ul id="media"><li><img src="img/img1.jpg"></li><li><img src="img/img2.jpg"></li><li><img src="img/img3.jpg"></li></ul>其样式代码可参考下方(因为是先写的小屏样式(屏宽<320px),则可不写媒体查询语句,直接写样式):
#media li {margin-bottom: 10px;}#media li img {width: 100%;}
将img的width设置为100%,既设置了img的铺设方式(铺满整行),撑开了它的父级即li的宽度,同时也是设定img的高度是随着img的宽度进行等比缩放,即高度会随着屏幕宽度变化而变化;
接下来就开始探讨如何在宽屏(>320px)中进行显示,显示效果如下图(以768px频宽为例),要求图片与图片间隔在之后的屏幕宽度中固定显示为3px;
方法一:
@media all and (min-width:768px) {#media {margin-right: -3px;}#media li { float: left; width: 33.07%;margin-right: 3px;}}实际上此类方法是行不通的,因为width是由浏览器计算,存在误差,会出现第三张图片被挤到下一行的现象,如果想通过调整media的margin-right使图片排列在一行,会发现margin-right负值已经到一个不可理喻的值;
方法二
@media all and (min-width:768px) {#media {margin-right: -0.4%;}#media li { float: left; width: 33%; margin-right: 0.3%;}此方法实现的仅仅是>768px且<992px屏幕的图片排列效果,因为中间的间隙是固定的,想要在>992px屏幕中也呈现与设计图一样的效果,则需要重新计算li的宽度和其margin-left值。因为浏览器存在误差,所以在计算时,需要将li和其margin-right百分值取整,使其总和小于数学意义上的100%,ul的margin-right需要根据li计算后的总和,再进行计算;
方法三
#media li { box-sizing:border-box; width:33.3%; padding-right:3px; }#media li:nth-of-type(3){ padding-right:0; }}此方法使用了怪异盒模型(box-sizing),笔者在此使用了css3选择器来设置第三个li的padding-right值。如果考虑到兼容(部分浏览器不兼容css3选择器语法),可单独给该li设置一个类,再给这个类加相应样式。此方法有一个缺点:因为第三个li使用了怪异盒模型且无padding值,其图片实际显示效果会比另外两张图大且高一些,虽然误差不大,但是肉眼可见;
方法四
改变结构,即在结构中li(除第三个li)中增加一个空的span,使span的宽度为3px,高度为100%。设置li的宽度为33.3%,再使用定位将span定在两张图片之间。因为要改变结构,并不推荐此方法。且此类方法会改变图片的内容显示(因为有一部分被遮挡),故只阐述其做法,不展示代码;
方法五
@media all and (min-width:768px) { #media {display: flex;justify-content:space-between;}#media li {width:33.07%;}}此方法使用了flex布局,在计算好li的宽度后,剩余的空间会平均分配在两个元素(li)中间。但此方法与方法二缺点一致,无法将li之间的间隙随着屏幕逐渐变大而固定为3px,需要多次调整li的width。
- 响应式布局-图片列表如何在窄屏(<320px)中显示为列,在宽屏(>768px)中显示为有间隙的一行
- 如何让1920px的大图在1336px 的显示器中居中显示
- 解决高为1px的DIV在IE6里的显示
- “如何将16进制码流在html中显示为图片”兼容多个浏览器的方案。
- “如何将16进制码流在html中显示为图片”兼容多个浏览器的方案
- 移动端Retina屏边框线1px 显示为2px或3px问题解决方法
- 如何设置table中td的高度为1px
- 在网页制作中,图片间有间隙的解决方案
- 在Extjs列表中,如何让一个字段显示为人民币金额
- DataGrid--在列中显示图片
- 在IE6,7下输入类型的表单控件上下各有1px的间隙
- 在word中插入显示在同一行的两张图片(且各自带有题注)
- 在word中插入显示在同一行的两张图片(且各自带有题注)
- dhtmlx中增加一列(将类似按钮、下拉列表、输入框显示在一行上)
- 用户在对话框下拉列表中选择的为显示文本区中的文本
- 2016-3-13 : 如何将一个宽度为400px的绝对定位的div在页面中水平居中对齐?请写出CSS样式。
- 如何在列表框中实时显示
- 解决jasperreports报表在HTML页面显示的PX图片的问题
- 云监控直播连接
- 防火墙
- Oracle数据库迁移
- 51 NOD 1279 扔盘子 单调栈
- 矩阵快速幂 黑科技
- 响应式布局-图片列表如何在窄屏(<320px)中显示为列,在宽屏(>768px)中显示为有间隙的一行
- 浅谈Spring事务隔离级别
- 常用的xml格式
- (转)走进Smart Beta的世界
- AsyncTask的异步执行方法中get请求的方式
- JavaScript实现阿拉伯数字和中文数字互相转换
- 实现除法
- 双卡双待(一)
- mysql5.7 主从同步