Указание размеров изображения или соотношения сторон вручную - единственный способ избежать скачков вследствие перекомпоновки DOM?

Рейтинг: 1Ответов: 0Опубликовано: 28.01.2023

Как я понял из урока по AMP, "вы должны указывать размеры изображения вручную, потому что если не указывать, будут скачки в потоке документа по мере загрузки изображения":

введите сюда описание изображения

<amp-img
  src="mountains.jpg"
  layout="responsive"
  width="266"
  height="150"
></amp-img>

Такая проблема имеет место быть и без AMP, поэтому дальше я буду говорить про обычный тэг img (AMP я упомянул затем, что там эта проблема рассмотрена). В идеале было бы просто указать максимальную ширину, а также указать занимать максимум доступного пространства (width: 100%) - и чтобы всё работало:

<figure>
  <img
    src="/images/gray_kitten.jpg"
    style="max-width: 500px; width: 100%;"
    alt="Серый котёнок"
  /> 
  <figcaption>Серый котёнок</figcaption>
</figure>

Но нет, ведь возникнет то явление, о котором говорилось выше. Что же делать? Можно обёртке тэга img указать какой-нибудь цвет-фона по умолчанию, а также соотношение сторон на основе длины и ширины изображения:

<figure>
  <div class="ImageWrapper" style="aspect-ratio: 960 / 280; background-color: lightgrey">
    <img
      src="/images/gray_kitten.jpg"
      alt="Серый котёнок"
    /> 
  <figcaption>Серый котёнок</figcaption>
</figure>

Вопрос у меня такой: единственное ли это решение проблемы скачков из-за перекомпоновки DOM вследствие загрузки изображений? Нет ли что-нибудь более технологичного?

А не нравится мне то, что ручное указание размеров или соотношение сторон изображения - это антипрограммистский подход, потому что в программировании всё тяготеет к автоматизации и смотреть свойства файла, проверять соотношения сторон изображения, вводить их с клавиатуры а потом ещё править вручную всё это по мере обновления контента - слишком много рутины для третьего десятилетия 21 века. О каких нанотехнологиях, терраформировании Марса и квантовых компьютерах может идти речь, когда я должен вручную узнавать размеры изображения и вводить их?

Ответы

Ответов пока нет.