微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为 CLS累积布局偏移设置 100% 宽度的图像高度

如何解决为 CLS累积布局偏移设置 100% 宽度的图像高度

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

解决方法

图片最佳做法

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

This is what is advised as the modern best practice

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

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

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

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

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

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

<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="6400px" height="4800px" />
<p>I don't shift</p>

,

首先,我们可以使用 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

使用 100vw 的 CSS 和 $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 ;?>);
    "
/>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?