如何使用带有HTML元素的next.js图像组件< picture>?

vsmadaxz  于 2022-12-29  发布在  其他
关注(0)|答案(2)|浏览(107)

js有一个Image组件,用于延迟加载图像,还为给定的图像提供了一个srcset
然而,有时我们希望为不同的设备提供不同的图像(艺术重定向)。
Mozilla说我们应该为此使用<picture>元素,为不同的媒体查询提供不同的图像。
我找不到一篇文章(即使在next.js官方文档中)告诉我们如何使用<Image>组件来做到这一点。
可以吗?我怎样才能同时使用next.js <Image>组件和HTML <picture>元素?

k10s72fa

k10s72fa1#

我已经搜索了数百个网站,这是唯一的解决方案,我发现它在Next.js(与tailwindcss)可行。

import Image from 'next/image'

    <div>
      <div className="md:hidden">
        <Image src="Banner-767x500.webp" height={500} width={767} />
      </div>
      <div className="hidden md:inline-flex lg:hidden">
        <Image src="Banner-1023x500.webp" height={500} width={1023} />
      </div>
      <div className="hidden lg:inline-flex xl:hidden">
        <Image src="Banner-1400x500.webp" height={500} width={1400} />
      </div>
      <div className="hidden xl:inline-flex">
        <Image height={500} width={2000} src="Banner-2000x500.webp" />
      </div>
    </div>
qco9c6ql

qco9c6ql2#

更好的方法是使用普通HTML,如下面的示例所示,在Next.js 13中测试。

    • 优点:**
  • 完全控制您要显示的内容和时间。
    • 缺点:**
  • 手动优化资产。
<picture>
  <source srcSet="/portrait/my-dog.webp" media="(orientation: portrait)" />
  <img src="/my-dog.webp" alt="A beautiful labrador" loading="lazy" />
</picture>

相关问题