«Машина с клоунами»

Техника «отзывчивых» изображений

Источник идеи: Clown Car Technique: Solving Adaptive Images In Responsive Web Design

Автор: Estelle Weyl

Техника состоит в использовании SVG c Media Queries для загрузки на страницу изображений только нужного размера.

Чтобы увидеть пример в действии, поизменяйте размер окна браузера: при разных размерах окна картинка слева будет разной (всего три размера).

SVG вставляется через object. Внутри файла задаются стили, которые в зависимости от ширины внешнего контейнера загружают для всего SVG подходящее фоновое изображение.

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

Примерный код:

SVG
<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 532 800"
     preserveAspectRatio="xMidYMid meet">
    <style>
       svg {
            background-size: content;
            background-repeat: no-repeat;
            }

        @media screen and (max-width: 100px) {
            svg {
                background-image: url(small.jpg);
            }
        }
        @media screen and (min-width: 101px) and (max-width: 300px) {
            svg {
                background-image: url(middle.jpg);
            }
        }

        @media screen and (min-width: 301px) and (max-width: 700px) {
            svg {
                background-image: url(large.jpg);
            }
        }
    </style>
</svg>
Object
<object data="your.svg" type="image/svg+xml"></object>
Размеры object также задаются через Media Queries:
@media screen and (max-width: 600px) {
  OBJECT {
    width: 100px;
    height: 150px;
    }
}

@media screen and (min-width: 601px) and (max-width: 800px) {
  OBJECT {
    width: 200px;
    height: 300px;
    }
}
@media screen and (min-width: 801px) {
  OBJECT {
    width: 332px;
    height: 500px;
    }
}