在开发 webview 过程中遇到一个问题, 类名 wechatImg 的 div 通过 background 引入的一张图片无法在小米的手机浏览器上显示. 遇到这个问题时十几种pc 浏览器,7\8种 mobile 浏览器都通过了测试,唯独在小米的移动端无法展示.
<div className='footerStyle '>
<div className='footer-main'>
<div className='copyright'> Copyright ©2023 北京****有限公司</div>
<div className='weixin'>
<div className={`wechatImg ${isHovering ? 'hover' : ''}`}
onMouseEnter={() => setIsHovering(true)}
onMouseLeave={() => setIsHovering(false)} >
</div>
</div>
{isHovering && (<img src={weixinIMG} className="qr-code"></img>)}
<div className='icp' onClick={jump}>
<span className='police' />京ICP备2024********
</div>
</div>
</div>
查了很多社区和资料,都没有结果;
用控制变量法调试, 用了一上午时间最终终于好用了
<div className='weixin'>
{/* span 解决小米莫名bug,第一个像素不显示 */}
**<span></span>**
<div className={`wechatImg ${isHovering ? 'hover' : ''}`}
onMouseEnter={() => setIsHovering(true)}
onMouseLeave={() => setIsHovering(false)} >
</div>
</div>
问题发生在 className=‘weixin’ 的div 的第一个元素,无论是什么都不能正常显示,我以上代码样式用在移动端768px以下的情况. 最后通过添加空标签, 才让图片正常展示出来;(有尝试过wexin 关键字符的影响,无用)
分析:
在元素前添加一个空的 span 标签来解决小米手机不显示 .wechatImg 元素内容的问题,这可能代表了一个特定的渲染或重排(repaint/reflow)行为在小米手机的浏览器上。这种情况可能的原因包括:
渲染引擎差异:
不同的浏览器或设备可能因为它们的渲染引擎不同,导致它们对特定情况的处理也不同。小米的浏览器可能使用了与Chrome、Firefox或Safari等主流浏览器不同的渲染引擎或版本,从而产生了这个特有的bug。
CSS渲染缺陷:
在某些情况下,浏览器在解析或渲染CSS时可能会遇到缺陷或错误。在这种情况下,span 标签的添加可能触发了DOM的更新和重新排列,对样式系统造成了"摆脱固有状态"的影响,促使浏览器重新计算布局并正确渲染 .wechatImg。
延迟加载或懒加载问题:
如果小米的浏览器对于懒加载或延迟加载图像有其自身的优化策略,可能导致在没有足够内容去促进元素加载的情况下,图像不被加载。span 标签可能提供了这样的上下文或足够的DOM体量,促使浏览器认为加载图片是必要的。
浏览器的BUG:
这可能是小米手机浏览器的一个特殊bug,可能与其渲染引擎的具体实现有关,也可能与其内部的优化策略或BUG有关。
DOM渲染顺序:
某些浏览器可能在处理空或伪装元素时有不同的优化策略。span 标签的引入可能改变了DOM元素的排列或渲染顺序,从而解决了问题。
这些都是一些可能的解释,而没有进一步的信息(比如特定的浏览器版本、重现问题的步骤等)和调试,难以确定具体的原因。