-
AuthorPosts
-
September 10, 2021 at 10:29 pm #1320466
for background images set to cover the entire screen result in very blurred backgrounds on small screens.
The reason for this seems to be the use of srcset for these images, which uses the screen width to place the alternative image.for those images that are meant to react responsive ( image albs or contain backgrounds ) that is ok – but for covering images not.
Is there a way to exclude background-images with cover setting from srcset ?
________________
Edit My mistake – it is the sliders where images are set to stretch to the full-width of the screen – but set to a min-height due to a lot of content.
F.e. set to a min-height to 430px – then even on small screens ( iphone 6 portrait mode ) the image from srcset should be taken that fullfill the height option – and not the width.
– i do not want to have complicated calculations here – but for me it would be enough if i could decide to exclude this alb from srcset.September 13, 2021 at 3:42 am #1320615Hey Guenter,
Thank you for the inquiry.
Looks like you are using the Fullwidth Slider, which does not set the slide image as background. Are you referring to the Fullscreen Slider element? The theme is using the post_thumbnail_html filter to modify the html of the attachment or image and apply the wp-image-id class name. You can find the function in the enfold/framework/php/class-responsive-images.php -> add_attachment_id_to_img.
Best regards,
IsmaelSeptember 13, 2021 at 9:59 am #1320683My mistake – Yes you are right in this case of the above link. This is a full-width slider element. It would be nice if I could use f.e. a class (similar to using lightbox or not ) to prevent the srcset from being used. In general, it makes sense to use the Responsive Images feature, but causes images that are stretched to the screen width to become blurry at small screen widths.
Or present from srcset the image that fits the min-height option – see here what happens if the min-height determines the presented image:
September 13, 2021 at 10:34 am #1320690September 14, 2021 at 6:13 am #1320835Hi,
We could modify the class-responsive-images.php > prepare_single_image function a bit and add a condition which prevents the theme from adding the scrset attribute when an array contains the current attachment or image ID. We could also add a filter so that we could modify the array in the future.
Look for this code inside the function..
if( is_numeric( $attachment_id ) || 0 != $attachment_id ) { $new_img = $this->add_attachment_id_to_img( $new_img, $attachment_id ); }
.., and replace it with:
if( (is_numeric( $attachment_id ) || 0 != $attachment_id) && !in_array($attachment_id, apply_filters("avf_srcset_exclude_images", array())) ) { $new_img = $this->add_attachment_id_to_img( $new_img, $attachment_id ); }
The filter can be used as follows.
add_filter("avf_srcset_exclude_images", function($exclude) { $exclude = array(123, 111, 141); return $exclude; });
Best regards,
IsmaelSeptember 15, 2021 at 2:06 pm #1321049wow – many thanks – and it will be part of one of the next updates?
________
But is that a good functionality? If i will use the image in an image alb ( and lightbox ) – i would like to have the srcset option. In this case it will react responsive so a srcset makes sense.
Or do i misunderstand that function? on my example page in private content – the image get the same : wp-image-3026 . The 3026 is that ID i have to use in the snippet?
I don’t want to exculde the whole image from srcset but f.e. the image in a fullwidth slideshow where the slideshow has a min-height option
on those sliders the image will be very blurry when we have a very small screen ( f.e. iphone5 : 320px)September 16, 2021 at 12:34 pm #1321208Hi,
This is not going to be included in the next patch. We are just trying to provide a possible solution. You could also remove the make_image_responsive function from the enfold/config-templatebuilder/avia-shortcodes/av-helper-slideshow.php line 787.
$img_tag = "<img src='{$img[0]}' width='{$img[1]}' height='{$img[2]}' title='{$linktitle}' alt='{$linkalt}' {$markup_url} {$img_style} />"; $img_tag = Av_Responsive_Images()->make_image_responsive( $img_tag, $slide->ID, $this->config['lazy_loading'] );
Maybe add a new element option or toggle in the enfold/config-templatebuilder/avia-template-builder/php/class-popup-templates.php where you can disable/enable srcset attribute or responsive images for the slider. Something like:
/** * Responsive Images Option * * @since 4.8.6.2 * @param array $element * @return array */ protected function responsive_image_toggle( array $element ) { $desc = __( 'Enable responsive images or add srcset attribute to slider images.', 'avia_framework' ) . ' '; $id = isset( $element['id'] ) && ! empty( $element['id'] ) ? $element['id'] : 'responsive_srcset'; $std = isset( $element['std'] ) && in_array( $element['std'] , array( 'disabled', 'enabled' ) ) ? $element['std'] : 'enabled'; $required = isset( $element['required'] ) && is_array( $element['required'] ) ? $element['required'] : array(); $lockable = isset( $element['lockable'] ) ? $element['lockable'] : false; $c = array( array( 'name' => __( 'Responsive Images', 'avia_framework' ), 'desc' => $desc, 'id' => $id, 'type' => 'select', 'std' => $std, 'lockable' => $lockable, 'required' => $required, 'subtype' => array( __( 'Add srcset attribute', 'avia_framework' ) => 'enabled', __( 'Remove srcset attribute', 'avia_framework' ) => 'disabled' ) ) ); if( isset( $element['no_toggle'] ) && true === $element['no_toggle'] ) { $template = $c; } else { $template = array( array( 'type' => 'template', 'template_id' => 'toggle', 'title' => __( 'Performance', 'avia_framework' ), 'content' => $c ), ); } return $template; }
You can then add a condition like so:
$img_tag = "<img src='{$img[0]}' width='{$img[1]}' height='{$img[2]}' title='{$linktitle}' alt='{$linkalt}' {$markup_url} {$img_style} />"; if($responsive_srcset == "enabled") { $img_tag = Av_Responsive_Images()->make_image_responsive( $img_tag, $slide->ID, $this->config['lazy_loading'] ); }
Best regards,
IsmaelSeptember 16, 2021 at 10:21 pm #1321285why isn’t it possible to have an exclude class like on :
$.fn.avia_activate_lightbox = function(variables)
we have there a possibility to exclude from lightbox function by adding a class to a parent-element.
This seems to be a very simple way to do that. If we like to exclude it from srcset we can give a class to the alb element itself – or – just a checkbox under the f.e. “select slide content”.September 17, 2021 at 8:23 am #1321341Hi,
That could also work. We have to modify the config-templatebuilder\avia-shortcodes\slideshow_fullsize\slideshow_fullsize.php file, around line 1073, add this code below to pass the class names to the avia_slideshow object.
$slider->set_extra_class( $meta["el_class"] );
In the config-templatebuilder\avia-shortcodes\av-helper-slideshow.php, around line 789, we could check if the class name “nosrcset” exists or not.
if(false == strpos($this->config['class'], "nosrcset")) { $img_tag = Av_Responsive_Images()->make_image_responsive( $img_tag, $slide->ID, $this->config['lazy_loading'] ); }
The srcset attribute should not be added whenever the “nosrcset” is used as a custom css class name for a Fullwidth Slider element.
Best regards,
IsmaelSeptember 17, 2021 at 10:59 am #1321358it works this way:
if( $this->config['bg_slider'] != 'true' && empty( $video ) ) { $img_style = ''; if( ! empty( $this->config['min_height'] ) && $this->config['min_height'] != '0px' ) { $percent = 100 / ( 100 / $img[2] * (int) $this->config['min_height'] ); $this->config['min_width'] = ceil( ( $img[1] / $percent ) ) . 'px'; $img_style .= AviaHelper::style_string( $this->config, 'min_height', 'min-height' ); $img_style .= AviaHelper::style_string( $this->config, 'min_width', 'min-width' ); $img_style = AviaHelper::style_string( $img_style ); } // here is the new check if(false == strpos($this->config['class'], "nosrcset")) { $img_tag = Av_Responsive_Images()->make_image_responsive( $img_tag, $slide->ID, $this->config['lazy_loading'] ); } $img_tag = "<img src='{$img[0]}' width='{$img[1]}' height='{$img[2]}' title='{$linktitle}' alt='{$linkalt}' {$markup_url} {$img_style} />"; $html .= $img_tag; }
Thanks – that’s a feasible solution.
Can be closed ( maybe this will be a nice to have on general )
i did it for fullscreenslider too!
But i guess there are other albs that could benefit from it too.
So a slightly different way would have to be found.September 19, 2021 at 7:31 am #1321491hm ?
rejoiced too soon!
if I place two sliders the one with the class: nosrcset
the other without – both times the srcset is suppressed.September 21, 2021 at 6:13 am #1321712Hi,
It works fine on our end. Please check the screenshot below. Only the slider with the nosrcset class name removes the srcset attribute.
Screenshot: https://imgur.com/abMifmz
Have you tried selecting the original size of the image in the Styling > Slideshow Settings > Slideshow Image and Video Size settings?
Best regards,
IsmaelSeptember 22, 2021 at 9:39 am #1321858is the replacement code i posted above correct?
and the place i inserted the extra_class – just before the other extra_class$slider = new avia_slideshow( $atts ); $slider->set_extra_class( $meta["el_class"] ); $slider->set_extra_class( $stretch );
and please try in your constellation to use the same image in both sliders.
September 22, 2021 at 9:57 am #1321860Hi!
Both sliders are actually using the same set of images. We just displayed the 4th image in the first slider and the first one in the other because they are the closest, and so that we can show the difference. Did you modify line 789 of the av-helper-slideshow.php file?
if(false == strpos($this->config['class'], "nosrcset")) { $img_tag = Av_Responsive_Images()->make_image_responsive( $img_tag, $slide->ID, $this->config['lazy_loading'] ); }
Regards,
IsmaelSeptember 22, 2021 at 10:14 am #1321867there are two instances of
$img_tag = Av_Responsive_Images()->make_image_responsive( …
arround line 412 and arround line 789 first i tried only the 789September 22, 2021 at 8:11 pm #1321952Can be closed – guess Guenter found a better solution (for the slider)
- This reply was modified 3 years, 2 months ago by Guenni007.
September 23, 2021 at 6:10 am #1321975 -
AuthorPosts
- The topic ‘exclude images from srcset responsive react.’ is closed to new replies.