4.4中的特色图像在移动设备上应该更大

时间:2016-03-29 作者:Pavel

我处理的主题显示3 columns 对于图像,因此大屏幕上缩略图的大小将为360x240px。

调整大小后,在某些mobile 像iPhone这样的设备1 column 对于图像,这可能会导致featured image will be larger 宽度大于360px。

现在,为了保持良好的PageSpeed分数,我不想在台式计算机上加载更大的图像大小并通过CSS进行缩放,但在移动设备上,我需要更大的特征图像,如640x426px。

在移动设备上使用相同大小的图像的问题是,它可能不够大,无法填充一列,并且会留下一些empty space 在它旁边。

我注册了2种新的图像大小,但the_post_thumbnail() 函数总是选择错误的函数。

add_image_size( \'loop\', 360, 240, true );
add_image_size( \'loop-mobile\', 640, 426, true );
我尝试了不同的方法,但没有一种接近我所需要的:

  1. the_post_thumbnail();

    在这种情况下,移动设备上的图像太小

  2. the_post_thumbnail(\'loop-mobile\');

    在这种情况下,它将始终加载更大的版本640x426px,这会影响PageSpeed得分

  3. the_post_thumbnail(array(640,426));

    PageSpeed得分也存在同样的问题。

    谢谢你的帮助!

    3 column on desktop

    1 column on mobile

2 个回复
SO网友:Andy Macaulay-Brook

答案是使用WP的响应图像,定制尺寸属性以适合您的用例。

从字里行间看,我在这里假设您使用的是响应性设计方法,以不同的宽度显示不同的布局。

最简单的方法是首先为自己创建一个替换模板标记函数the_post_thumbnail:

function wpse_221989_the_post_thumbnail( $size, $attr ) {
    the_post_thumbnail( $size, $attr );
}
你打电话的地方the_post_thumbnail 在模板中,调用wpse_221989_the_post_thumbnail 相反我们为什么要这样做?WP没有提供任何要修改的过滤器挂钩上下文srcsetsizes 响应图像的属性,所以我们正在使用wpse_221989_the_post_thumbnail 包装器函数。

到目前为止,还没有什么聪明的方法,但现在我们可以在此功能的基础上:

1-绘制一组图像大小

2-要求浏览器根据此特定用例的响应断点选择合适的图像

1-在你的例子中,你的图像版本都是相同的纵横比,WP为我们处理事情。使用内置图像调用,如the_post_thumbnail 将生成srcset 属性,该属性与在中指定的图像具有相同的纵横比$size 参数您可以使用add_image_size 创建足够大的其他版本,以实现高密度显示。WP的宽高比匹配允许较小的舍入误差,因此您问题中的两个大小都应该匹配OK。

2-要让浏览器为空间选择正确的图像大小,您需要自定义sizes 属性WP的默认值sizes 属性假定您希望图像为全浏览器宽度,但不超过图像的自然宽度。在您的设计中,较窄的屏幕需要较大的图像,然后在某个断点上方选择较小的图像宽度。

因此,假设从图像大小来看,断点位于640px, 我们想要一个sizes 属性有点像这样:(min-width: 640px) 33.333vw, 100vw

这对浏览器所说的是针对的windows640px width和over,从srcset 与三分之一窗口宽度最匹配的列表。对于其他窗口宽度(<;640px),请从列表中选择最适合整个窗口宽度的图像。

为了将其转化为代码,我们创建了一个新函数来返回属性,并将其构建到包装器函数中:

function wpse_221989_sizes() {

    return "(min-width: 640px) 33.333vw, 100vw";

}

function wpse_221989_the_post_thumbnail( $size, $attr ) {

    add_filter( \'wp_calculate_image_sizes\', \'wpse_221989_sizes\', 10 , 2 );
    the_post_thumbnail( $size, $attr );
    remove_filter( \'wp_calculate_image_sizes\', \'wpse_221989_sizes\', 10 );

}
现在,当主题模板调用wpse_221989_the_post_thumbnail 我们的习惯sizes 属性将替换为默认值。通过在调用之前挂接到筛选器the_post_thumbnail 并在我们使自定义模板标记功能对问题的上下文敏感后立即取消挂钩,而不会打乱主题其他部分图像上生成的任何大小属性。

您可以通过在$size 为主题创建的不同图像版本选择不同的规则。

如果Google Pagespeed对您很重要,那么请测试它是否遵守您的srcsetsizes 属性。如果没有,则使用add_image_size 制作一个刚好适合Pagespeed窗口的尺寸,并在通话中使用该尺寸wpse_221989_the_post_thumbnail 因此,它被放入src 属性在我的网站上,我使用1024px图像作为默认图像,这似乎使桌面和移动Pagespeed分析都很满意。

SO网友:Mark Kaplun

您的问题来自于没有进行响应性设计。响应式设计应该让一切都由客户端决定,尝试提供与服务器上所有屏幕大小匹配的服务通常会失败,或者阻止您使用缓存。

理想的解决方案是srcset 属性W3C HTML 5+ docs,默认为implementation in wordpress 糟糕透了,你需要使用相关的API让它与你想要的图像相匹配,在你想要的地方。

注意:srcset只是对浏览器的一个建议,它不必遵循,如果您不想让浏览器摆布它,您需要找到一个做类似事情的JS库。

相关推荐

Broken images on iphone

我在iPhone上破坏了图像,这只发生在我大约一周前添加新图像的主页上(新图像的格式和大小与旧图像完全相同)这是网站:CartonMaster。伊利诺伊州公司提前感谢,