Skip to content

为什么在移动端显示图片用div background image,不用img标签? #6

Closed
@dongfanhua

Description

@dongfanhua

你好,
看到lazyload在移动端的用法是

<style> .lazy{width:100%;height:0;padding-top:75%;background-size:100%;} /\* 假设高宽比为 480:640,即75%,并使用背景图的方式将图片铺在padding-top区域内 (padding的百分比是宽度的百分比而不是高度的,即使是padding-top|padding-bottom) */ </style>
<div class="lazy" data-original="img/example.jpg"><div>我想问问,为什么在移动端要用div的backgroud-iamge来显示图片,而不用img标签呢?

Activity

jieyou

jieyou commented on Jan 8, 2015

@jieyou
Owner


<img style="width:100%">
是可以保持宽高比自适应显示的。
但问题在于在图片开始加载之前,无法知道图片占的高度,这不仅会在浏览器获取到图片宽度后引起页面的布局发生变化,还会导致和lazyload插件本身的使用问题:

lazyload是通过计算图片的位置,看它是否出现在视窗中,来判断是否应该开始加载某个图片的,
假设这个<img>下面还有一些需要lazyload的其他图片

那么在其他图片上面,如果发生高度变化(由于上述<img>被加载了挤下来了),通常lazyload并不能检测到这个变化(默认情况下lazyload通过window的scroll事件window的resize事件触发检测),则会导致判断图片位置出现错误
也就是说,图片上面(包括左边)的所有元素都要有确定的高度
而采用padding-top,bottom结合背景图的形式,可以在图片尚未加载时,就有高度占位。

jieyou

jieyou commented on Jan 8, 2015

@jieyou
Owner
dongfanhua

dongfanhua commented on Jan 21, 2015

@dongfanhua
Author

谢谢你的回答

SuperAL

SuperAL commented on May 15, 2017

@SuperAL

@jieyou 如果提供的 img 标签内容如下:

<img data-original="..." data-size="550, 360" alt="" title="" >

data-size 里面放置的是图片的真实宽高,然后到了前端后再利用 js 计算该 img 相应的宽高,最后再执行 lazyload 方法,这样可以吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @jieyou@dongfanhua@SuperAL

        Issue actions

          为什么在移动端显示图片用div background image,不用img标签? · Issue #6 · jieyou/lazyload