#html #css #cross-browser #background-image #webp
#HTML #css #кросс-браузерный #фоновое изображение #webp
Вопрос:
Я хотел бы использовать формат изображения WebP в моем background-image
свойстве CSS. Но, поскольку WebP является довольно новым и до сих пор не поддерживается всеми новыми и старыми браузерами, я также хотел бы добавить поддержку версии этого изображения в формате JPEG в качестве запасного варианта.
Я знаю, что могу использовать <picture>
тег для этого, например:
<picture>
<source type="image/webp" srcset="image.webp">
<source type="image/jpeg" srcset="image.jpg">
<img src="image.jpg">
</picture>
И это заставило бы браузер загружать первый поддерживаемый формат. Но могу ли я каким-то образом добиться того же эффекта, используя только CSS, поскольку я устанавливаю фоновое изображение с помощью background-image
свойства? Я знаю, что могу выбирать изображения на основе размера экрана с помощью @media
запросов, но как мне загружать изображения на основе поддержки браузера?
Я пытался найти решение, но не смог его найти. Дайте мне знать, если это дубликат и решение уже существует.
Спасибо.
Комментарии:
1. Я ценю, что вы написали, как вы можете это сделать,
<picture>
поскольку это именно то, что мне было нужно.
Ответ №1:
@supports
Вместо этого используйте CSS.
.yourclass {
background: url("image.jpg") no-repeat center / contain;
}
@supports (background-image: url("image.webp")) {
.yourclass {
background: url("image.webp") no-repeat center / contain;
}
}
Не волнуйтесь. Откройте инспектор, и вы заметите, что браузер не загружает оба изображения.
Что следует учитывать:
- Обратите внимание, что вы должны объявить
webp
версию послеjpg
, или каскадный поток должен выиграть. - Параметры
background-repeat
,background-position
иbackground-size
приведены только для примера.
Комментарии:
1. Выглядело многообещающе, но, тестируя Safari, я обнаружил, что, несмотря на невозможность использовать webp, он будет использовать правила внутри части @supports.
2. Я также тестировал Safari, этот ответ неверен. Я думаю
@supports
, что только тесты этого правила CSS доступны и действительны для текущего браузера, но не скажут вам, может ли ресурс быть успешно загружен.3. @bambooom с какой версией Safari вы тестировали? caniuse.com/#feat=css-featurequeries
4. @ed1nh0 Safari версии 13.0.5 (15608.5.11). Я не имею
@supports
в виду, что он не поддерживается в Safari. Но я согласен с первым комментарием. Запросы функций @supports возвращают true для Safari 13, так что правилоurl("image.webp")
применяется, но webp не может быть показан в Safari.
Ответ №2:
Используйте 2 фоновых изображения: одно с JPG или PNG, другое с WEBP, браузер автоматически выберет лучшее.
Нашел этот код в codepen:Robin Rendle
CSS:
element {
width: 50vw;
height: 100vh;
background-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/14179/cust-housegreening-pup@2x-4cf7ada520811031a97bee12c06d9e9367f811bd86255ea60d40aa809cf58801.jpg');
background-image: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/14179/cust-housegreening-pup@2x-4cf7ada520811031a97bee12c06d9e9367f811bd86255ea60d40aa809cf58801.webp');
}
Комментарии:
1. Я могу подтвердить, что этот подход НЕ работает. При использовании этого подхода как FireFox, так и Google Chrome загружают
.webp
версию изображения и работают нормально. Но в Safari (v12.1.1), который не поддерживает WebP, это не работает. Safari по-прежнему пытается загрузить.webp
формат и не показывает изображение. Это предполагаемое поведение CSS, поскольку при использовании несколькихbackground-image
атрибутов браузер всегда загружает последнее упомянутое изображение. Даже предоставленный вами codepen не работает в Safari.2. Извините за это, проверил это в текущем браузере. единственный способ — использовать JS для определения поддержки webp и добавления класса body, чтобы все элементы с фоновыми изображениями можно было переключить на webp
3. вы можете обратиться к этому link:css-tricks.com/using-webp-images и вот что: freecodecamp.org/news /…