1

为了在 Core Web Vitals 的 CLS 上工作,我需要找到一种方法来img在屏幕上的图像为 100% 宽度时设置标签的高度,因为每当调整窗口大小时,图像的高度都会发生变化。我正在开发的网站是基于 WordPress 构建的,并找到了解决方法。所以,我将写如何在 WordPress 上管理它。

4

2 回答 2

4

图像的最佳实践

width执行 OP 要求的一种更通用的方法是使用本机和height属性简单地在图像上设置宽度和高度(以像素为单位) 。

这是现代最佳实践的建议

假设浏览器拥有计算宽度所需的所有信息(来自内联 CSS),现代浏览器将为图像分配足够的空间以避免布局偏移。

这些宽度和高度不必是图像将显示的实际尺寸,只需正确的比例即可。

因此,在下面的示例中,我们获取图像缩略图的宽度和高度(例如 640 像素宽和 480 像素高)。

然后我们在 CSS 中设置图像相对于它的容器的宽度(因此在本例中为页面宽度的 50%)。

然后浏览器将为图像分配正确的高度以避免布局偏移。(在下面的示例中,假设屏幕宽度为 1920 像素,它将分配 720 像素的高度 - 由于 50% 的宽度和 720 像素的高度以保持纵横比,因此图像宽为 960 像素。)

$img = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ) , 'thumbnail' );
$src = $img[0]; 
$height = $img[1]; //e.g. 640(px)
$width = $img[2]; //e.g. 480(px)



<style>
    img{
       width: 50%; 
       height: auto; /*this is important as otherwise the height set on the image will be used*/
    }
</style>

 <img src="<?php echo $src; ?>" width="<?php echo $width; ?>" height="<?php echo $height; ?>" />

小提琴演示

在下面的小提琴中,我加载了一个大图像(您可能仍想添加节流以查看没有布局偏移)。空间由浏览器自动计算,因此不会发生布局偏移。

最大的优势是以下内容适用于媒体查询(因为您可以在内联 CSS 中设置任何宽度)并且可以与内容安全策略一起正常工作,因为它不依赖内联style项。

<style>
   img{
      width: 50%;
      height: auto;
   }
</style>


<img src="http://picserio.com/data/out/369/sahara-desert-wallpaper_5757536.jpg" width="6400" height="4800" />
<p>I don't shift</p>

于 2020-12-20T10:02:09.537 回答
1

首先,我们可以通过 获取图像的宽度和高度wp_get_attachment_image_src

$featured_image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ) , 'thumbnail' );

// $featured_image[0]: URL of an image
// $featured_image[1]: Width of an image
// $featured_image[2]: Height of an image

通过100vwCSS 的 和 的值$featured_image,我们可以得到图像的高度。

$ratio = $featured_image[2] / $featured_image[1];

然后,将其设置为高度,如下所示。

<img 
    src="<?php echo $featured_image[0]; ?>"
    style="
        width: 100%;
        height: calc(100vw * <?php echo $ratio ;?>);
    "
/>
于 2020-12-20T03:12:08.813 回答