图片以及其他替换元素的空隙问题
今天来聊聊图片,当然,对于web来说,图片是个大命题,多大呢?要多大有多大~ 这里只谈它是怎么“不听话的”,然后让它乖一点。
Web的世界里有很多问题,与之对应的基本也有很多情景和对策。那么问题就来了,我们遇到某种情景和找到的对策也都具有偶然性,下面来挑很多人都遇到过的一种情况说说。
上篇文章我们谈了inline-block的空隙,这篇文依然是聊空隙。通过上篇文,我们可以看出,其实空隙和元素本身并无直接关系,因为它真的就是“空隙”。但是小小的空隙却常给我们带来小小的困惑和麻烦。
场景:“这是怎么回事啊,我什么都没有给图片设置,为什么这里有个空隙?!然后,margin、padding、border、outline…(七大姑八大姨)全都去掉了,为什么还有?!肿么办呐?!”
对于以上场景你是否熟悉捏?~颇有病急乱投医,reset掉它全家的意味哈!
再稍微分两种情况来说(其实没啥区别),一种是img“裸奔”,另一种是被其他元素包裹,比如div或者li等。
“裸奔”代码如下:
<div class="img_list">
<img src="images/xiang01.jpg" alt="">
<img src="images/xiang02.jpg" alt="">
<img src="images/xiang03.jpg" alt="">
<img src="images/xiang04.jpg" alt="">
<img src="images/xiang05.jpg" alt="">
</div>
实现如下:
聪明如你应该看出端倪了对吧?是的,每张图片的右边如预期般出现了空隙,但事实仅仅如此么?~ 我们把容器缩小看一下 duang~
原来不只是右边有,下面也有?似曾相识吗?
方法一:font-size:0;
是的。“音烂不唠嗑”那家伙好像也是有空隙,那我们用其中一种方法把它消除掉试试,把font-size设置为0;
呜呼,果然,那这是第一种方法。
方法二:float
由于float能让元素脱离正常文档流,可谓有摧毁一切的架势,这里也不意外,使用float就可以使他们消失于无形,如果赶上你制作图文混排文字环绕的效果,那就是一举两得了~
方法三:vertical-align:XX;
或许你会有点奇怪,为什么是XX?没错,有些文章中有说设为“top”,有些文章中说用“bottom”,可是在css如此的精彩世界里,你会对这么一个简单的答案满足么?总会多问几个why?然后,you try try 便会发现,,原来设置top|bottom|middle|text-bottom|text-top等都是可以消除掉这个空隙的,但需要注意,往往页面中不是一个图片孤立的存在着,设定不同的值可能会对其他的内容产生不同的影响,这里不细说,具体请各位去了解下vertical-align方面的东东(下面有个张老师的链接)。至于为什么vertical-align有除掉这个空隙的作用呢?
据不完全考察,图片文字等inline元素默认是和父级元素的baseline对齐的,而baseline又和父级底边有一定距离(这个距离和 font-size,font-family 相关),所以设置 vertical-align的某些值可以避免这种情况出现。你可以试一下设置一个具体的负百分比值也行哦~
方法四:display:block;
为什么这种方法是可行的呢?其实这个方法跟方法三和方法二有着某种微妙的联系,what?莫急,先来说跟方法三有何联系,方法三里,扯到了baseline,也扯到了vertical-align,但没有扯一扯它在哪些元素上起作用,是的,对于block级的元素,它们是玩儿不了的,也可见张老师牛奶/果冻/坚果,故而,设置为block,它就干掉了空隙。跟方法二的关系是,不知大家是否注意到行级元素在设置float之后,具备了块级元素所具备的功能,比如设置宽高,内外边距等,所以,浮动,效果跟此法类似。 当然,鉴于block之后会改变它本身inline的表现,有些朋友可能会考虑inline-block,but这样是不凑效的,况且,它本身就存在这样的问题。
方法五:为父容器设置高度
现在才说起这个看起来平常的方法可不是我不够坦白,因为很多人可能从来没有遇到过图片空隙这样的问题,会觉得这是个挺难遇到的bug,其实不然,没有遇到右边的空隙是因为,只要它不是裸奔,譬如这样:
<ul class="img_list">
<li><img src="images/xiang01.jpg" alt=""></li>
<li><img src="images/xiang02.jpg" alt=""></li>
<li><img src="images/xiang03.jpg" alt=""></li>
<li><img src="images/xiang04.jpg" alt=""></li>
<li><img src="images/xiang05.jpg" alt=""></li>
</ul>
img被一个容器包裹起来,这里是li,还可以是别的,那么右边的空隙就没了,因为它是存在于img之间,这里有一层容器将其隔开。当然了,可能还会因为设置了margin值,从视觉上直接忽略了空隙的存在,不在讨论之列哈~ 没有遇到过下面的空隙,可能是无意间使用了能够消除掉它的方法,最平常和自然的就是设置父容器高度了。
方法六:无缝排列
这个方法和消除inline-block空隙同理,让它们紧密排列即可,不过同样,从代码的格式上来说不宜采取。
讨论了这么多,貌似这种现象是img所独有的,是么?聪明如你可能又猜对,no!~ 可能大家都知道html的元素中有一类元素叫做替换元素,什么是替换元素呢,咱拿规范说说事儿吧;以img为例:
The IMG element embeds an image in the current document at the location of the element’s definition. The IMG element has no content; it is usually replaced inline by the image designated by the src attribute。
这是规范里对img的描述,简单说来img元素没有内容,它是把来自src属性值的那个图片嵌入页面中。
说到这里,是不是想起还有不少元素是这样的?比如input、textarea、select等等?
是的,它们同样存在着缝隙问题,为什么呢,看图
是否有秒懂的感觉?
好吧,扯了不少了,里面提到了好几个东东,没有细谈,因为每一个挑出来都够喝一壶的,所以,不细聊了,重点还是帮助有遇到类似问题的朋友找到较合适的解决方法。文中可能有不当之处,还望指教。
建议继续学习:
- 图片动态局部毛玻璃模糊效果的实现 (阅读:13613)
- 淘宝图片存储架构 (阅读:9935)
- 解决IE6从Nginx服务器下载图片不Cache的Bug (阅读:7166)
- When we`re only No.2, we try harder之聊天表情设计小探讨 (阅读:6520)
- 精于图片处理的10款jQuery插件 (阅读:6284)
- phpThumb:强大的缩微图类 (阅读:5477)
- js实现预加载图片让图片快速显示 (阅读:5006)
- 利用开源的Gearman框架构建分布式图片处理平台[原创] (阅读:4278)
- 使用数据库存放图片 (阅读:4200)
- 通过php+imagick 创建PDF图片预览 (阅读:3970)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:灵感_idea 来源: 灵感_idea
- 标签: 图片 空隙
- 发布时间:2016-03-07 23:48:02
- [71] Twitter/微博客的学习摘要
- [65] IOS安全–浅谈关于IOS加固的几种方法
- [65] 如何拿下简短的域名
- [63] Go Reflect 性能
- [63] find命令的一点注意事项
- [62] android 开发入门
- [61] 流程管理与用户研究
- [59] 读书笔记-壹百度:百度十年千倍的29条法则
- [59] 图书馆的世界纪录
- [59] Oracle MTS模式下 进程地址与会话信