函数文档

wp_enqueue_img_auto_sizes_contain_css_fix()

💡 云策文档标注

概述

该函数用于注册并内联添加一个 CSS 规则,以修复使用 `sizes=auto` 属性的图片可能出现的视觉问题。它通过覆盖默认用户代理样式表中的类似规则,防止图片因 `width: auto` 或 `width: fit-content` 而显示过小。

关键要点

  • 函数 `wp_enqueue_img_auto_sizes_contain_css_fix()` 在 WordPress 6.9.0 中引入,用于处理图片的 `sizes=auto` 属性相关样式问题。
  • 通过 `wp_register_style()` 和 `wp_add_inline_style()` 动态添加 CSS 规则 `img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}`。
  • 包含向后兼容性检查:如果 `wp_print_auto_sizes_contain_css_fix` 动作未被钩入,则函数提前返回;同时移除该动作以避免重复执行。
  • 使用过滤器 `wp_img_tag_add_auto_sizes` 控制是否启用自动尺寸功能,若禁用则函数提前返回。
  • 通过 `array_unshift()` 确保内联样式在样式队列中优先打印,以保持 CSS 层叠顺序。

代码示例

function wp_enqueue_img_auto_sizes_contain_css_fix(): void {
    // Back-compat for plugins that disable functionality by unhooking this action.
    $priority = has_action( 'wp_head', 'wp_print_auto_sizes_contain_css_fix' );
    if ( false === $priority ) {
        return;
    }
    remove_action( 'wp_head', 'wp_print_auto_sizes_contain_css_fix', $priority );

    /** This filter is documented in wp-includes/media.php */
    $add_auto_sizes = apply_filters( 'wp_img_tag_add_auto_sizes', true );
    if ( ! $add_auto_sizes ) {
        return;
    }

    $handle = 'wp-img-auto-sizes-contain';
    wp_register_style( $handle, false );
    wp_add_inline_style( $handle, 'img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}' );

    // Make sure inline style is printed first since it was previously printed at wp_head priority 1 and this preserves the CSS cascade.
    array_unshift( wp_styles()->queue, $handle );
}

注意事项

  • 该函数依赖于 WordPress 核心样式系统,使用 `wp_styles()` 对象管理样式队列。
  • 开发者可通过过滤器 `wp_img_tag_add_auto_sizes` 自定义是否启用此功能,默认值为 true。
  • 相关资源链接:HTML 规范、WordPress Trac 工单 #62413 和 #62731,供进一步参考。

📄 原文内容

Enqueues a CSS rule to fix potential visual issues with images using sizes=auto.

Description

This rule overrides the similar rule in the default user agent stylesheet, to avoid images that use e.g.
width: auto or width: fit-content to appear smaller.

See also

Source

function wp_enqueue_img_auto_sizes_contain_css_fix(): void {
	// Back-compat for plugins that disable functionality by unhooking this action.
	$priority = has_action( 'wp_head', 'wp_print_auto_sizes_contain_css_fix' );
	if ( false === $priority ) {
		return;
	}
	remove_action( 'wp_head', 'wp_print_auto_sizes_contain_css_fix', $priority );

	/** This filter is documented in wp-includes/media.php */
	$add_auto_sizes = apply_filters( 'wp_img_tag_add_auto_sizes', true );
	if ( ! $add_auto_sizes ) {
		return;
	}

	$handle = 'wp-img-auto-sizes-contain';
	wp_register_style( $handle, false );
	wp_add_inline_style( $handle, 'img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}' );

	// Make sure inline style is printed first since it was previously printed at wp_head priority 1 and this preserves the CSS cascade.
	array_unshift( wp_styles()->queue, $handle );
}

Hooks

apply_filters( ‘wp_img_tag_add_auto_sizes’, boolean $enabled )

Filters whether auto-sizes for lazy loaded images is enabled.

Changelog

Version Description
6.9.0 Introduced.