解决img标签上下出现间隙的方法


Posted in HTML / CSS onDecember 14, 2016

我们在平常的开发过程中,经常需要使用多张图片,而使用多张图片的时候,我们一般会去使用一个列表来对我们的img 进行承装。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        img{
            height: 200px;
            margin: 0;
            padding: 0;
            border-bottom: 1px solid red;
        }
        ul{
            border: 1px solid blue;
            list-style: none;
            padding: 0;
            margin: 0;
        }
    </style>
</head>
<body>

    <ul>
        <li>
            <img src="lipeng.png">
        </li>
    </ul>
</body>
</html>

但是这个时候我们发现了一个问题,为什么我的图片下面多出来一条线呀?

解决img标签上下出现间隙的方法

这是怎么回事呀?

我不是已经把 img 的外边距和内边距什么的全部清空了么?

实际上,这其实是inline元素搞的鬼。

任何不是块级元素的可见元素都是内联元素,其表现的特性是“行布局”形式。----《CSS权威指南》

什么意思?

意思就是,其实如图片文字等内联元素,它默认对齐方式都是和它的父级的 baseline 去进行对齐的,但是你对齐的是 baseline,撑开高度的却是元素整体的高度(bottom line),这样肯定就会造成一定的间隙,也就是我们上文出现的问题了。

解决img标签上下出现间隙的方法

那我们既然知道了这个问题出现的原因,那么解决起来也就简单多啦。

1.第一种解决方案

既然是 inline 元素才会发生这个问题,那我们自然可以简单粗暴的解决这个问题,那就是给我们的元素“变个性”,让它从 inline 变为 block 不就可以了么?

<style type="text/css">
        img{
            height: 200px;
            margin: 0;
            padding: 0;
            border-bottom: 1px solid red;

            display: block;
        }
        ul{
            border: 1px solid blue;
            list-style: none;
            padding: 0;
            margin: 0;
        }
    </style>

2.第二种解决方案

这也太粗暴了,变了性别,回头还怎么愉快的玩耍呀,所以我们要尝试曲线救活,我们可以去修改一下它的垂直对齐方式呀,这样是不是就可以了呢? 

<style type="text/css">
        img{
            height: 200px;
            margin: 0;
            padding: 0;
            border-bottom: 1px solid red;

            vertical-align: middle;
        }
        ul{
            border: 1px solid blue;
            list-style: none;
            padding: 0;
            margin: 0;
        }
    </style>

可以看出,这样也可以实现想要的效果。

原因在于,vertical-align 的默认属性就是 baseline ,我们只要设置了跟 baseline 不一样的属性,都可以避免这个问题。

解决img标签上下出现间隙的方法

3.第三种解决方案

但是修改了对齐方式,这样也有可能会造成问题呀,我们可不可以去让这个元素飘起来呢?既然你已经不在当前文档流中了,你布局的时候自然也就不会参照这个文字去进行对齐了呀。

我们可以去使用浮动。

<style type="text/css">
        img{
            height: 200px;
            margin: 0;
            padding: 0;
            border-bottom: 1px solid red;

            float: left;
        }
        ul li {
            overflow: hidden;
        }
        ul{
            border: 1px solid blue;
            list-style: none;
            padding: 0;
            margin: 0;
        }
    </style>

这样也可以解决这个问题,但是请注意,“浮动虽好,可不要贪杯呦”。

你一定要能够正确的解决浮动所造成的影响,而且假如你原本就打算去做文字环绕效果,那么使用浮动一定是你的不二选择。

4.第四种解决方案

假如上面几种方案全都不能解决你的问题,那么只有祭出我的大杀器了。

你可以给你的父元素把文字大小设成0。

<style type="text/css">
        img{
            height: 200px;
            margin: 0;
            padding: 0;
            border-bottom: 1px solid red;
        }
        ul li {
            font-size: 0px;
        }
        ul{
            border: 1px solid blue;
            list-style: none;
            padding: 0;
            margin: 0;
        }
    </style>

既然你是根据 文字的基线去对齐,我直接把文字给你设没了,这样你就没法定位了吧,但是这种做法,只推荐在你已经“急头白脸死活弄不出来”的时候才去使用的。

总结

好了,以上就是对这个问题的四种解决方案,希望看到此文的小伙伴以后都能跳出这个坑啦。如果有疑问大家可以留言交流。

HTML / CSS 相关文章推荐
css3隔行变换色实现示例
Feb 19 HTML / CSS
CSS3实现多背景展示效果通过CSS3定位多张背景
Aug 10 HTML / CSS
使用CSS3制作响应式导航菜单的方法
Jul 12 HTML / CSS
CSS3 实现弹跳的小球动画
Oct 26 HTML / CSS
html5新特性与用法大全
Sep 13 HTML / CSS
详解Canvas事件绑定
Jun 27 HTML / CSS
HTML5的hidden属性兼容老浏览器的方法
Apr 23 HTML / CSS
使用html5 canvas创建太空游戏的示例
May 08 HTML / CSS
Application Cache未缓存文件无法访问无法加载问题
May 31 HTML / CSS
html5 实现客户端验证上传文件的大小(简单实例)
May 15 HTML / CSS
关于html字符串正则判断和匹配的具体使用
Dec 12 HTML / CSS
css之clearfix的用法深入理解(必看篇)
May 21 HTML / CSS
HTML5-WebSocket实现聊天室示例
Dec 15 #HTML / CSS
详解HTML5通讯录获取指定多个人的信息
Dec 20 #HTML / CSS
详解HTML5表单新增属性
Dec 21 #HTML / CSS
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
Dec 22 #HTML / CSS
详解HTML5 LocalStorage 本地存储
Dec 23 #HTML / CSS
HTML5应用之文件上传
Dec 30 #HTML / CSS
详解HTML5中的标签
Jun 19 #HTML / CSS
You might like
PHP - Html Transfer Code
2006/10/09 PHP
PHP fopen 读取带中文URL地址的一点见解
2012/09/25 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
AngularJS基础 ng-focus 指令简单示例
2016/08/01 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
2020/08/08 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
jQuery实现手风琴特效
2021/01/11 jQuery
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
20个常用Python运维库和模块
2018/02/12 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
Python实现多线程的两种方式分析
2018/08/29 Python
python os.path模块常用方法实例详解
2018/09/16 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
Expedia意大利旅游网站:酒店、机票和租车预订
2017/10/30 全球购物
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
暑期培训班招生方案
2014/08/26 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
检察院起诉书
2015/05/20 职场文书
酒店开业主持词
2015/07/02 职场文书
详解Mysql和Oracle之间的误区
2021/05/18 MySQL
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL