解决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轻松实现清新 Loading 效果的简单实例
Jun 06 HTML / CSS
css3实现3D色子翻转特效
Dec 23 HTML / CSS
CSS3让登陆面板3D旋转起来
May 03 HTML / CSS
HTML5 input placeholder 颜色修改示例
May 30 HTML / CSS
HTML5 CSS3打造相册效果附源码下载
Jun 16 HTML / CSS
HTML5实现WebSocket协议原理浅析
Jul 07 HTML / CSS
HTML5新特性之用SVG绘制微信logo
Feb 03 HTML / CSS
很酷的HTML5电子书翻页动画特效
Feb 25 HTML / CSS
HTML5 LocalStorage 本地存储详细概括(多图)
Aug 18 HTML / CSS
HTML5实现可缩放时钟代码
Aug 28 HTML / CSS
详解webapp页面滚动卡顿的解决办法
Dec 26 HTML / CSS
html5录音功能实战示例
Mar 25 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
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
PHP英文字母大小写转换函数小结
2014/05/03 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
js实现鼠标感应向下滑动隐藏菜单的方法
2015/02/20 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
详解Vue方法与事件
2017/03/09 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
Python标准库与第三方库详解
2014/07/22 Python
Python中无限元素列表的实现方法
2014/08/18 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
python模块导入的细节详解
2018/12/10 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
测试驱动开发的主要步骤是什么
2014/12/10 面试题
求职简历推荐信范文
2013/12/02 职场文书
企业年度评优方案
2014/06/02 职场文书
保护环境标语
2014/06/09 职场文书
工作收入证明模板
2014/10/10 职场文书
单位租房协议范本
2014/12/03 职场文书
2015年六年级班主任工作总结
2015/10/15 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
python实现Nao机器人的单目测距
2021/09/04 Python
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL
2022年显卡天梯图(6月更新)
2022/06/17 数码科技