Как использовать изображение с адаптивным стилем изображения в качестве фона?


Нам необходимо использовать модуль Отзывчивое изображение . Ключ в том, что мы хотим иметь возможность использовать поле изображения (field_image) с адаптивными стилями изображения в качестве фона и помещать заголовок узла поверх них.

Как мы можем этого достичь?

Мы попробовали следующее, но это позволяет получить только исходную фотографию в шаблоне ветки. Другими словами, когда я использую инструменты разработки Chrome, чтобы узнать, извлекал ли он другие изображения как часть отзывчивого Настройки стиля изображения, он их не извлекает.

<div class="wrapper">
    <div class="wrapper__image" style="background-image: url('{{file_url(content.field_image.0['#item'].entity.uri.value)}}>
    </div>
    <div class="wrapper__content"> {# title goes here #} </div>
</div>

Пример изображения: Image with text on top

В настоящее время мы используем готовый шаблон с адаптивным изображением ветки

{% if output_image_tag %}
  {{ img_element }}
{% else %}
  <picture>
    {% if sources %}
      {#
      Internet Explorer 9 doesn't recognise source elements that are wrapped in
      picture tags. See http://scottjehl.github.io/picturefill/#ie9
      #}
      <!--[if IE 9]><video style="display: none;"><![endif]-->
      {% for source_attributes in sources %}
        <source{{ source_attributes }}/>
      {% endfor %}
      <!--[if IE 9]></video><![endif]-->
    {% endif %}
    {# The controlling image, with the fallback image in srcset. #}
    {{ img_element }}
  </picture>
{% endif %}
Author: usernameabc, 2018-02-08

2 answers

То, что вы пытаетесь, не будет работать на фоновом изображении. Вам нужно будет сделать это самостоятельно с помощью javascript. Как я делал это ранее, в div добавляются атрибуты данных для каждой точки останова, например

<div data-mobile-image="mobilestylename/aaa.jpg" data-desktop-image="desktopstylename/aaa.jpg">

Затем в javscript используйте matchmedia или класс body, если он уже добавлен вашей темой, чтобы узнать, в какой точке останова вы находитесь, а затем выполните

var mobile_image = $('.mydiv').data('mobile-image');
$('.mydiv').css('background-image',mobile_image);
 0
Author: Leigh, 2018-02-09 09:14:42

Вы можете разрешить адаптивную разметку изображения из ядра:

<div class="wrapper">
  <div class="wrapper__image">{{ content.field_image }}</div>
  <div class="wrapper__content"> {# title goes here #} </div>
</div>

И используйте свойство CSS , соответствующее объекту на вашем адаптивном изображении:

.wrapper__image {
  position: relative;
  width : 100%
  height : 100vh
}

.wrapper__image {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 0;
}

.wrapper__image img {
  object-fit: cover;
  object-position: center;
  width: 100%;
  height: 100%;
}

Вы можете легко найти полифайлы JavaScript, чтобы включить эту функцию в IE.

 0
Author: Flo Develop, 2019-08-28 12:54:00