You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅为<picture>元素中实际加载的图片应用CSS样式

问题背景

Lighthouse 建议使用下一代图片格式实现更快的下载速度与更低的数据消耗,该需求可通过 HTML <picture> 元素实现。

我们在使用 <picture> 元素时,常会遇到需要仅对实际加载的图片应用CSS样式的场景。如果直接使用通用选择器匹配 <picture> 的所有子元素,会出现样式应用不符合预期的问题,示例代码如下:

问题示例代码

/* 该写法会错误匹配所有子元素,不符合预期 */
picture * {
  border: 2px solid red;
}
<div style="display: flex; gap: 30px;">
  <p>AVIF: 50</p>
  <p>WebP: 100</p>
  <p>img: 150</p>
</div>

<picture>
  <source type="image/avif" srcSet="https://via.placeholder.com/50" width="50" height="50" />
  <source type="image/webp" srcSet="https://via.placeholder.com/100" width="100" height="100" />
  <img src="https://via.placeholder.com/150">
</picture>

注意:截至当前,Chrome 支持 AVIF 格式,Edge 与 Firefox 支持 WebP 格式,浏览器会根据自身支持情况加载对应类型的图片。

以下为 Microsoft Edge 中运行上述代码片段的效果截图,供参考:
HTML picture element styling


解决方案

<picture> 元素下的 <source> 标签仅作为资源候选的元数据存在,不会被浏览器渲染到页面中。无论浏览器最终选择加载哪个 <source> 对应的资源,最终都会将资源内容加载到 <picture> 内部的 <img> 标签中展示,所以只需要针对该 <img> 标签设置样式即可:

/* 仅匹配实际渲染的图片元素 */
picture img {
  border: 2px solid red;
}

内容的提问来源于stack exchange,提问作者Gangula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:24:04