解决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 rem(设置字体大小) 教程
Nov 21 HTML / CSS
CSS3中的display:grid,网格布局介绍
Oct 30 HTML / CSS
CSS3中animation实现流光按钮效果
Dec 21 HTML / CSS
html5 Canvas绘制线条 closePath()实例代码
May 10 HTML / CSS
使用HTML5的链接预取功能(link prefetching)给网站提速
Dec 13 HTML / CSS
HTML5 Canvas渐进填充与透明实现图像的Mask效果
Jul 11 HTML / CSS
html5实现完美兼容各大浏览器的播放器
Dec 26 HTML / CSS
利用HTML5中的Canvas绘制一张笑脸的教程
May 07 HTML / CSS
HTML5对比HTML4的主要改变和改进总结
May 27 HTML / CSS
h5调用摄像头的实现方法
Jun 01 HTML / CSS
深入理解HTML5定时器requestAnimationFrame的使用
Dec 12 HTML / CSS
CSS 圆形进度栏
Apr 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新手上路(三)
2006/10/09 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
php使用pdo连接mssql server数据库实例
2014/12/25 PHP
php清除和销毁session的方法分析
2015/03/19 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
2014/02/04 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
python修改字典内key对应值的方法
2015/07/11 Python
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
python 不以科学计数法输出的方法
2018/07/16 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
wxPython实现分隔窗口
2019/11/19 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
Python networkx包的实现
2020/02/14 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
公司前台辞职报告
2014/01/19 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
红白喜事主持词
2015/07/06 职场文书
HAM-2000摩机图
2021/04/22 无线电
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript