【HTML+CSS兼容性】 li中插入img元素之间存在空隙BUG问题+解决方案 前端零基础必须知道的事情!

简介: li中插入img元素之间存在空隙BUG问题与解决方案

🚀 个人主页 极客小俊
✍🏻 作者简介:web开发者、设计师、技术分享博主
🐋 希望大家多多支持一下, 我们一起进步!😄
🏅 如果文章对你有帮助的话,欢迎评论 💬点赞👍🏻 收藏 📂加关注

2.png

场景问题描述

环境测试: Chrome、Edge、Opera、FireFox

举个栗子

当你在li元素中直接放入图片img元素之后, 默认就会出现一个bug, 也就是图片显示相互之间存在间隙,

即便是你把所有元素的内外边距都清除之后,还是存在这个问题!

代码案例

html

<ul>
    <li><img src="img/test.jpeg" width="100"/></li>
    <li><img src="img/test.jpeg" width="100"/></li>
    <li><img src="img/test.jpeg" width="100"/></li>
</ul>

css

* {
   
   
    margin: 0px;
    padding: 0px;
}
ul > li {
   
   
    border: 1px solid red;
}

如图
3.png

问题分析

首先,其实我们要明白一点,其实这里不一定就是li元素的问题, 很多人以为是li元素导致的,所以就拼了老命去设置li元素, 当然这样的确也是可以解决问题的,但是没有找准重点!

你不信? 那么你把li元素 ul元素都去掉,再去看看效果

如图

4.gif

所以从上图看,虽然说li元素也有默认的行间距,即便是你去掉了li这些元素的内外边距,间隙依旧是存在的!

那么这是为什么呢?

解释

这主要是由于img图片默认的垂直对齐方式行间距的影响

默认情况下,图片的vertical-align属性值为baseline 简单的说也就是因为这个属性产生的间隙

那么问题来了,那么我怎么去验证一下img图片的vertical-align属性默认值就为baseline呢?

提示:

关于baseline(基线)是什么意思,还有包括顶线、中线、基线、底线、x-height、ex、内联盒模型、行距这些概念我这里就不过多赘述了,之前我也发布过对这些详细研究之后的总结文章,有兴趣的朋友可以去看看,相当精彩!

搜索标题如下:

【我确信你还没有完全搞明白它的含义,熬夜整理了一万多字的line-height详细总结,还看不懂那我真的要跪了!】

回到正题, 如果你实在是不信,也可以反向的去测试一下,

比如说你就给img元素 直接加上一个vertical-align:baseline 看看效果 是不是一样的

img{
   
   
    vertical-align: baseline;
}

相信你看到的结果还是有间隙的,对吧

所以对于大多数浏览器来说,vertical-align:baseline 就是 img 元素的默认垂直对齐方式

总之就因为图片的vertical-align属性值为baseline,导致图片在li元素中与文本的基线对齐,从而引起空隙!

解决方案

方法1

我们可以直接通过自己的需求设置img元素的vertical-align属性为top、middle、bottom

这样让图片在li元素顶部对齐居中对齐,从而消除空隙

img{
   
   
    vertical-align: middle;
}

方法2

设置img元素父级容器font-size:0 也可以解决间隙问题, 比如我这里的父级容器就是li元素

ul > li {
   
   
    border: 1px solid red;
    font-size: 0;
}

通过调整li元素font-size属性为0,可以去除li元素的默认行间距

那么这是为什么呢?

原因如下:

我们将li元素font-size属性设置为0的目的是为了去除li元素默认的行间距

在默认情况下,li元素会有一个默认的行高,即使没有文本内容也会存在一定的空隙,

注意:有些人说设置ul元素的line-height:0这种方式我不太推荐!

通过将font-size属性设置为0,可以让li元素的文本大小为0,从而使行高为0,进而消除了li元素的默认行间距,这样,即使li元素中没有文本内容,也能够达到去除空隙的效果。

但是设置font-size属性为0会影响li元素自身的文本, 可能子元素中的文字大小也会被影响。

所以如果需要保留li元素内部的文字或其他内容的显示,可以通过给子元素重新设置合适的font-size属性来解决这个问题!

代码如下

* {
   
   
    margin: 0px;
    padding: 0px;
}

ul > li {
   
   
    border: 1px solid red;
    font-size: 0;
}

ul > li>span{
   
   
    font-size: 12px;
}

img{
   
   
    vertical-align: bottom;
}

方法3

你也可以给img元素设置为块级元素 或者 浮动元素,也是可以解决间隙问题, 使图片与文本紧密排列,从而解决空隙问题,然后根据具体需求继续调整图片的位置即可!

img{
   
   
    display:block;
}

效果

通过上述方法 我们修改之后,就可以基本上解决间隙的问题了!

如图

5.gif

相关文章
|
3月前
|
前端开发 搜索推荐 UED
实现 CSS 动画效果的兼容性
【10月更文挑战第16天】实现 CSS 动画效果的兼容性需要对不同浏览器的特性有深入的了解,并采取适当的策略和方法。通过不断的实践和优化,你可以在各种浏览器上创造出流畅、美观且兼容的动画效果,为用户带来更好的体验。在实际开发中,要密切关注浏览器的发展动态,及时掌握最新的兼容性技巧和解决方案,以确保你的动画设计能够在广泛的用户群体中得到良好的呈现。
119 58
|
3月前
|
前端开发
用 CSS 实现兼容性渐变背景效果
【10月更文挑战第17天】
97 43
|
2月前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
46 6
|
2月前
|
Web App开发 前端开发 JavaScript
揭秘!前端大牛们如何巧妙利用CSS3,打造炫酷视觉效果!
【10月更文挑战第31天】前端开发面临复杂布局的挑战,本文介绍了几种提升开发效率和代码质量的工具和技术。基础的HTML和CSS可以应对大部分布局需求,而Firefox开发者工具、VS Code、Vue、React等则能应对更复杂的布局,帮助开发者构建高性能、用户友好的网页应用。
35 4
|
3月前
|
前端开发 JavaScript
乾坤qiankun(微前端)样式隔离解决方案--使用插件替换前缀
乾坤qiankun(微前端)样式隔离解决方案--使用插件替换前缀
555 8
|
3月前
|
前端开发 JavaScript
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
315 1
|
4月前
|
前端开发
前端基础(九)_CSS的三大特征
本文详细解释了CSS的三大特性:层叠性、继承性和优先级,并通过实例演示了样式冲突、叠加和选择器优先级的应用。
43 2
前端基础(九)_CSS的三大特征
|
3月前
|
设计模式 前端开发 JavaScript
前端编程的异步解决方案有哪些?
本文首发于微信公众号“前端徐徐”,介绍了异步编程的背景和几种常见方案,包括回调、事件监听、发布订阅、Promise、Generator、async/await和响应式编程。每种方案都有详细的例子和优缺点分析,帮助开发者根据具体需求选择最合适的异步编程方式。
98 1
|
3月前
|
前端开发 容器
前端技术分享:利用CSS Grid布局实现响应式设计
【10月更文挑战第1天】前端技术分享:利用CSS Grid布局实现响应式设计
|
3月前
|
前端开发 UED 容器
前端技术分享:利用 CSS Grid 实现响应式布局
【10月更文挑战第1天】前端技术分享:利用 CSS Grid 实现响应式布局
82 2