解决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 三维变形实现立体方块特效源码
Dec 15 HTML / CSS
利用CSS3实现自定义滚动条代码分享
Aug 18 HTML / CSS
css3制作动态进度条以及附加jQuery百分比数字显示
Dec 13 HTML / CSS
CSS3田字格列表的样式编写方法
Nov 22 HTML / CSS
css3实现圆锥渐变conic-gradient效果
Feb 12 HTML / CSS
canvas实现俄罗斯方块的方法示例
Dec 13 HTML / CSS
详解HTML5中的Communication API基本使用方法
Jan 29 HTML / CSS
HTML5 拖放功能实现代码
Jul 14 HTML / CSS
HTML5拍照和摄像机功能实战详解
Jan 24 HTML / CSS
详解移动端h5页面根据屏幕适配的四种方案
Apr 15 HTML / CSS
AmazeUI中各种的导航式菜单与解决方法
Aug 19 HTML / CSS
CSS实现五种常用的2D转换
Dec 06 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 a simple smtp class
2007/11/26 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
2019/03/11 PHP
jqGrid随窗口大小变化自适应大小的示例代码
2013/12/28 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
vue实现购物车列表
2020/06/30 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
Django 外键的使用方法详解
2019/07/19 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
Capitol Lighting的1800lighting.com:住宅和商业照明
2019/04/10 全球购物
销售助理岗位职责
2014/02/21 职场文书
小学语文教学经验交流材料
2014/06/02 职场文书
护理见习报告范文
2014/11/03 职场文书
北京颐和园导游词
2015/01/30 职场文书
员工年度工作总结2015
2015/05/18 职场文书
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android