Мне нужно динамически загружать изображения баннеров в приложение HTML5 и хотелось бы, чтобы несколько разных версий соответствовали ширине экрана. Я не могу правильно определить ширину экрана телефона, поэтому я могу думать только о том, чтобы добавить фоновые изображения div и использовать @media, чтобы определить ширину экрана и отобразить правильное изображение.
Например:
<span style="background-image:particular_ad.png; @media (max-width:300px){background-image:particular_ad_small.png;}"></span>
Это возможно, или у кого-нибудь есть другие предложения?
html
css
media-queries
танцовщик
источник
источник
Ответы:
Нет,
@media
правила и медиазапросы не могут существовать в атрибутах встроенного стиля, поскольку они могут содержать толькоproperty: value
объявления. Как сказано в спецификации :Единственный способ применить стили к элементу только на определенных носителях - это использовать отдельное правило в вашей таблице стилей, а это значит, что вам потребуется создать селектор для него.
Фиктивный
span
селектор будет выглядеть следующим образом, но если вы нацеливаетесь на очень определенный элемент, вам понадобится более конкретный селектор:источник
<style>
тег в свой HTML. Это необходимый подход для случая, когдаbackground-image
динамически извлекается из базы данных. Очевидно, что во внешней таблице стилей это не подходящее место для этого.<script>
тег часто удаляется почтовыми клиентами при пересылке электронной почты, поэтому люди склонны использовать встроенные стили для электронных писем. А это значит, что нет медиа-запросов. В настоящее время я ищу лучшие практики для этой ситуации, но просто дружеский хедз-ап.em
с, а не вpx
. Таким образом, он будет работать разумно при увеличении масштаба.проблема
Нет, медиазапросы не могут быть использованы таким образом
Решение
Но если вы хотите обеспечить конкретное поведение, которое можно использовать на лету И реагировать, вы можете использовать
style
разметку, а не атрибут.й
Смотрите код, работающий вживую на CodePen
Например, в моем блоге я добавляю
<style>
разметку<head>
сразу после<link>
объявления для CSS, и она содержит содержимое текстовой области, предоставляемой рядом с реальной текстовой областью содержимого, для создания дополнительного класса на лету, когда я писал artitle.Примечание:
scoped
атрибут является частью спецификации HTML5. Если вы не используете его, валидатор обвинит вас, но браузеры в настоящее время не поддерживают реальную цель: ограничивают содержимое<style>
только непосредственно родительским элементом и дочерними элементами этого элемента. Область действия не обязательна, если<style>
элемент находится в<head>
разметке.ОБНОВЛЕНИЕ: Я советую всегда использовать правила для мобильных устройств, поэтому предыдущий код должен быть:
источник
background-image
время загрузки страницы..on-the-fly-behavior
его использования, но если слово «игнорировать» каким-то навигатором не является проблемой. <style> может использоваться в <body> во всех навигаторах, это работает. Это просто требование проверки w3c.scoped
это блестящее решение, оно официально не поддерживается ни одним браузером. Надеюсь, это скоро изменится.<style>
, илиmedia queries
все или функцию HTML / CSS. Так что на самом деле проблема более серьезна. Я только знаю, что вы можете создавать электронную почту, отображаемую таким же образом на всей клиентской электронной почте (включая Gmail) только с функцией HTML4 и CSS2 (с некоторым взломом Outlook), но в этом случае нет медиазапросов.Встроенные стили в настоящее время не могут содержать ничего, кроме объявлений (
property: value
пар).Вы можете использовать
style
элементы с соответствующимиmedia
атрибутами вhead
разделе вашего документа.источник
Да, вы можете написать медиа-запрос в inline-css, если вы используете тег изображения. Для разных размеров устройства вы можете получить разные изображения.
источник
Если вы используете Bootstrap Responsive Utilities или аналогичную альтернативу, которая позволяет скрывать / показывать div в зависимости от точек останова, может оказаться возможным использовать несколько элементов и показать наиболее подходящий. т.е.
источник
Медиа-запросы в стиле-атрибутах сейчас невозможны. Но если вам нужно установить это динамически с помощью Javascript. Вы можете вставить это правило через JS aswell.
Это как если бы стиль был в таблице стилей. Так что будьте в курсе специфики.
источник
Эй, я только что написал это.
Теперь вы можете использовать
<div style="color: red; @media (max-width: 200px) { color: green }">
или так.Наслаждаться.
источник
Я пытался проверить это, но это не сработало, но мне любопытно, почему Apple его использует. Я был только на https://linkmaker.itunes.apple.com/us/ и заметил, что в сгенерированном коде, который он предоставляет, если вы выбираете радиокнопку «Большая кнопка», они используют встроенный медиа-запрос.
примечание: добавлены разрывы строк для удобства чтения, минимизирован исходный сгенерированный код
источник
Вы можете использовать image-set ()
источник
да, вы можете сделать с JavaScript с помощью window.matchMedia
рабочий стол для текста красного цвета
планшет для текста зеленого цвета
источник
Встроенные медиа-запросы возможны при использовании чего-то вроде точки останова для Sass
Это сообщение в блоге хорошо объясняет, как встроенные медиа-запросы более управляемы, чем отдельные блоки: Точки останова нет
С «встроенными медиа-запросами» связана идея «элементарных запросов». Вот несколько интересных прочтений:
источник
если вы добавляете правило в файл print.css, вам не нужно использовать @media.
Я включил его в умный foreach, который я использую, чтобы придать некоторым элементам цвет фона.
источник