Милен Петрински - Гонзо
И каква е ползата от тях?
Метод за сервиране на различни източници за едно изображения в зависимост от размера на екрана, неговата разделителна способност, или други фактори.
<img src="image.jpg" srcset="image-360x340.jpg 360w, image-800x600.jpg 800w" sizes="(min-width: 840px) 800px, calc(100vw - 40px)" alt="" />
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-sizes
<picture>
<source media="(min-width: 840px)" src="image-800x600px.jpg" type="image/jpeg" />
<source media="(min-width: 840px)" src="image-800x600px.webp" type="image/webp" />
<source media="(max-width: 640px) and (orientation: portrait)" src="image-640x800px.jpg" />
<source media="(max-width: 640px) and (orientation: landscape)" src="image-640x400px.jpg" />
<img src="image.jpg" alt="" />
</picture>
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture




От версия 4.4 насам WordPress разполага с доста функции за работа с отзивчиви изображения.
https://make.wordpress.org/core/2015/11/10/responsive-images-in-wordpress-4-4/
WordPress генерира сам srcset, като включва всички изображения със същите пропорции като изображението в src.
По подразбиране WordPress генерира sizes="(max-width: [image width]) 100vw, [image width]"
Накарайте WordPress да генерира нужните ви размери картинки.
add_image_size( string $name, int $width, int $height, bool|array $crop = false )
https://developer.wordpress.org/reference/functions/add_image_size/
// header images on big screens
add_image_size( 'header-image-huge', 1920, 453, true );
add_image_size( 'header-image-large', 1650, 390, true );
add_image_size( 'header-image-big', 1366, 323, true );
add_image_size( 'header-image-small', 1024, 242, true );
// header images on medium screens
add_image_size( 'wide-large', 1024, 391, true );
add_image_size( 'wide-big', 800, 306, true );
// header images on small screens
add_image_size( 'square-big', 520, 320, true );
add_image_size( 'square-medium', 360, 222, true );
the_post_thumbnail( 'image-medium', array( 'sizes' => '(min-width: 37.5em) calc(50vw - 1.5em), (min-width: 60em) 29.5em, 100vw' ) );
function my_image_sizes( $sizes, $size, $image_src, $image_meta, $attachment_id ) {
// направете някаква магия
return $sizes;
}
add_filter( 'wp_calculate_image_sizes', 'my_image_sizes', 99, 5 );
<?php $src = wp_get_attachment_image_src( $image_ID, 'header-image-base', false )[0]; $srcset = wp_get_attachment_image_srcset( $image_ID, 'header-image-base' ); ?><img src="<?php echo esc_url( $src ); ?>" srcset="<?php echo esc_attr( $srcset ); ?>" sizes="(min-width: 37.5em) calc(50vw - 1.5em), (min-width: 60em) 29.5em, 100vw" />
<picture><?php $src = wp_get_attachment_image_src( $image_ID, 'image-square', false )[0]; ?><source media="(max-width: 1024px) and (orientation: portrait)" src="<?php echo esc_url( $src ); ?>" />...<?php $src = wp_get_attachment_image_src( $image_ID, 'image-medium', false )[0]; ?><img src="<?php echo esc_url( $src ); ?>" alt="" /> </picture>
