Make WordPress Core


Ignore:
Timestamp:
10/07/2025 06:22:02 AM (2 months ago)
Author:
westonruter
Message:

Media: Switch to enqueueing contain-intrinsic-size CSS fix for IMG tags having sizes=auto.

This deprecates the wp_print_auto_sizes_contain_css_fix() function running at wp_head priority 1, in favor of a wp_enqueue_img_auto_sizes_contain_css_fix() function which runs just before at wp_head priority 0. The latter function unhooks the former while also enqueueing an inline style to be printed with all other styles but up front to preserve the cascade. This eliminates directly printing the STYLE tag, which was a change done similarly before for the emoji styles. See #58775.

For backwards compatibility, the CSS can still be prevented from being enqueued/printed via:

remove_action( 'wp_head', 'wp_print_auto_sizes_contain_css_fix', 1 );

This change ensures that all styles are printed together using the correct API for emitting styles.

Developed in https://github.com/WordPress/wordpress-develop/pull/8954.

Follow-up to [59435].

Props westonruter, sabernhardt, SirLouen, flixos90, joemcgill, SergeyBiryukov, superpoincare.
See #62413.
Fixes #62731.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/media.php

    r60780 r60910  
    20822082
    20832083/**
    2084  * Prints a CSS rule to fix potential visual issues with images using `sizes=auto`.
     2084 * Enqueues a CSS rule to fix potential visual issues with images using `sizes=auto`.
    20852085 *
    20862086 * This rule overrides the similar rule in the default user agent stylesheet, to avoid images that use e.g.
    20872087 * `width: auto` or `width: fit-content` to appear smaller.
    20882088 *
    2089  * @since 6.7.1
     2089 * @since 6.9.0
     2090 *
    20902091 * @see https://html.spec.whatwg.org/multipage/rendering.html#img-contain-size
    20912092 * @see https://core.trac.wordpress.org/ticket/62413
    2092  */
    2093 function wp_print_auto_sizes_contain_css_fix() {
     2093 * @see https://core.trac.wordpress.org/ticket/62731
     2094 */
     2095function wp_enqueue_img_auto_sizes_contain_css_fix(): void {
     2096    // Back-compat for plugins that disable functionality by unhooking this action.
     2097    $priority = has_action( 'wp_head', 'wp_print_auto_sizes_contain_css_fix' );
     2098    if ( false === $priority ) {
     2099        return;
     2100    }
     2101    remove_action( 'wp_head', 'wp_print_auto_sizes_contain_css_fix', $priority );
     2102
    20942103    /** This filter is documented in wp-includes/media.php */
    20952104    $add_auto_sizes = apply_filters( 'wp_img_tag_add_auto_sizes', true );
     
    20982107    }
    20992108
    2100     ?>
    2101     <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style>
    2102     <?php
     2109    $handle = 'wp-img-auto-sizes-contain';
     2110    wp_register_style( $handle, false );
     2111    wp_add_inline_style( $handle, 'img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}' );
     2112
     2113    // Make sure inline style is printed first since it was previously printed at wp_head priority 1 and this preserves the CSS cascade.
     2114    array_unshift( wp_styles()->queue, $handle );
    21032115}
    21042116
Note: See TracChangeset for help on using the changeset viewer.