Necesito cargar dinámicamente imágenes de banner en una aplicación HTML5 y quisiera un par de versiones diferentes para adaptarse a los anchos de pantalla. No puedo determinar correctamente el ancho de pantalla del teléfono, por lo que la única forma en que puedo pensar en hacerlo es agregar imágenes de fondo de un div y usar @media para determinar el ancho de pantalla y mostrar la imagen correcta.
Por ejemplo:
<span style="background-image:particular_ad.png; @media (max-width:300px){background-image:particular_ad_small.png;}"></span>
¿Es esto posible o alguien tiene alguna otra sugerencia?
html
css
media-queries
Bailarín
fuente
fuente
Respuestas:
No,
@media
las consultas de reglas y medios no pueden existir en atributos de estilo en línea, ya que solo pueden contenerproperty: value
declaraciones. Como dice la especificación :La única forma de aplicar estilos a un elemento solo en ciertos medios es con una regla separada en su hoja de estilos, lo que significa que deberá encontrar un selector para ello.
Un
span
selector ficticio se vería así, pero si está apuntando a un elemento muy específico, necesitará un selector más específico:fuente
<style>
etiqueta en su HTML también. Este es un enfoque necesario para el caso en el quebackground-image
se extrae dinámicamente de una base de datos. Obviamente en la hoja de estilo externa no es el lugar adecuado para eso.<script>
clientes de correo electrónico a menudo eliminan la etiqueta cuando se reenvía un correo electrónico, por lo que las personas tienden a usar estilos en línea para los correos electrónicos. Y esto significa que no hay consultas de los medios. Actualmente estoy buscando las mejores prácticas para esta situación, pero solo un aviso amistoso.em
s, no enpx
. De esa manera, seguirá funcionando con sensatez cuando haga zoom.Problema
No, las consultas de medios no se pueden usar de esta manera
Solución
Pero si desea proporcionar un comportamiento específico que se pueda usar sobre la marcha Y que responda, puede usar el
style
marcado y no el atributo.ei
Vea el código trabajando en vivo en CodePen
En mi blog, por ejemplo, inserto un
<style>
marcado<head>
justo después de la<link>
declaración de CSS y contiene el contenido de un área de texto proporcionada junto al área de texto de contenido real para crear una clase adicional sobre la marcha cuando escribí un artículo.Nota: el
scoped
atributo es parte de la especificación HTML5. Si no lo usa, el validador lo culpará, pero los navegadores actualmente no son compatibles con el propósito real: limitar el contenido<style>
solo al elemento primario inmediato y a los elementos secundarios de ese elemento. El alcance no es obligatorio si el<style>
elemento está<head>
marcado.ACTUALIZACIÓN: Aconsejo usar siempre las reglas en el móvil de la primera manera, por lo que el código anterior debería ser:
fuente
background-image
cuando se carga la página..on-the-fly-behavior
que se use en cualquier lugar, pero si la palabra es "ignorar" por algún navegador no es un problema. <style> puede usarse en <body> en todos los navegadores, es trabajo. Es solo un requisito de validación de w3c.scoped
es una solución brillante, no es oficialmente compatible con ningún navegador. Espero que cambie pronto.<style>
, omedia queries
todos o característica de HTML / CSS. Entonces, en realidad el problema es más grande que eso. Solo sé que puede crear el correo electrónico que se muestra de la misma manera en todos los correos electrónicos del cliente (incluido Gmail) con solo la función HTML4 y CSS2 (con algún truco de Outlook), pero no hay consultas de medios en este caso.Los estilos en línea no pueden contener nada más que declaraciones (
property: value
pares).Puede usar
style
elementos con losmedia
atributos apropiados en lahead
sección de su documento.fuente
Sí, puede escribir una consulta de medios en inline-css si está usando una etiqueta de imagen. Para diferentes tamaños de dispositivo, puede obtener diferentes imágenes.
fuente
Si está utilizando Bootstrap Responsive Utilities o una alternativa similar que permite ocultar / mostrar divs dependiendo de los puntos de ruptura, es posible que pueda usar varios elementos y mostrar el más apropiado. es decir
fuente
Las consultas de medios en atributos de estilo no son posibles en este momento. Pero si tiene que configurar esto dinámicamente a través de Javascript. También puede insertar esa regla a través de JS.
Esto es como si el estilo estuviera allí en la hoja de estilos. Así que tenga en cuenta la especificidad.
fuente
Hola, acabo de escribirlo.
Ahora puedes usar más
<div style="color: red; @media (max-width: 200px) { color: green }">
o menos.Disfrutar.
fuente
Traté de probar esto y no parecía funcionar, pero tengo curiosidad de por qué Apple lo está usando. Estaba en https://linkmaker.itunes.apple.com/us/ y noté que en el código generado que proporciona si selecciona el botón de opción 'Botón grande', están utilizando una consulta de medios en línea.
nota: saltos de línea agregados para facilitar la lectura, el código generado original se minimiza
fuente
Puedes usar image-set ()
fuente
sí, puedes hacerlo con javascript mediante window.matchMedia
escritorio para texto en color rojo
tableta para texto en color verde
fuente
Las consultas de medios en línea son posibles mediante el uso de algo como Breakpoint for Sass
Esta publicación de blog hace un buen trabajo explicando cómo las consultas de medios en línea son más manejables que los bloques separados: No hay punto de interrupción
Relacionado con las consultas de medios en línea está la idea de "consultas de elementos", algunas lecturas interesantes son:
fuente
si agrega la regla al archivo print.css, no tiene que usar @media.
Lo desconecté en el smarty foreach que uso para dar a algunos elementos un color de fondo.
fuente