Preciso carregar dinamicamente imagens de banner em um aplicativo HTML5 e gostaria de duas versões diferentes para se adequar às larguras da tela. Como não consigo determinar corretamente a largura da tela do telefone, a única maneira de pensar nisso é adicionar imagens de plano de fundo de uma div e usar @media para determinar a largura da tela e exibir a imagem correta.
Por exemplo:
<span style="background-image:particular_ad.png; @media (max-width:300px){background-image:particular_ad_small.png;}"></span>
Isso é possível ou alguém tem outras sugestões?
html
css
media-queries
Dançarino
fonte
fonte
Respostas:
Não,
@media
regras e consultas de mídia não podem existir em atributos de estilo embutido, pois podem conter apenasproperty: value
declarações. Como as especificações colocam:A única maneira de aplicar estilos a um elemento apenas em determinadas mídias é com uma regra separada na sua folha de estilo, o que significa que você precisará criar um seletor para ele.
Um
span
seletor fictício se pareceria com isso, mas se você estiver segmentando um elemento muito específico, precisará de um seletor mais específico:fonte
<style>
tag no seu HTML também. Essa é uma abordagem necessária para o caso em quebackground-image
é extraído dinamicamente de um banco de dados. Obviamente, na folha de estilo externa não é o lugar certo para isso.<script>
tag geralmente é removida pelos clientes de email quando um email é encaminhado; portanto, as pessoas tendem a usar estilos in-line para emails. E isso significa que não há consultas de mídia. Atualmente, estou procurando as melhores práticas para essa situação, mas apenas um aviso amigável.em
s, não empx
. Dessa forma, ainda funcionará com sensatez ao aumentar o zoom.Problema
Não, as consultas de mídia não podem ser usadas dessa maneira
Solução
Mas se você deseja fornecer um comportamento específico utilizável em tempo real e responsivo, pode usar a
style
marcação e não o atributo.ei
Veja o código trabalhando ao vivo no CodePen
No meu Blog, por exemplo, injeto uma
<style>
marcação<head>
logo após a<link>
declaração para CSS e ela contém o conteúdo de uma área de texto fornecida ao lado da área de texto de conteúdo real para criar classe extra em tempo real quando escrevi um artigo.Nota: o
scoped
atributo faz parte da especificação HTML5. Se você não o usar, o validador o culpará, mas os navegadores atualmente não suportam o objetivo real: definir o escopo do conteúdo<style>
apenas no elemento pai imediatamente e nos elementos filhos desse elemento. O escopo não é obrigatório se o<style>
elemento estiver na<head>
marcação.ATUALIZAÇÃO: Eu aconselho a sempre usar as regras da maneira móvel para que o código anterior seja:
fonte
background-image
quando a página é carregada..on-the-fly-behavior
uso em qualquer lugar, mas se a palavra for «ignorar» por algum navegador, não será um problema. <style> pode ser usado em <body> em todo navegador, é trabalho. É apenas um requisito de validação do w3c.scoped
seja uma solução brilhante, não é oficialmente suportada por nenhum navegador. Espero que isso mude em breve.<style>
, oumedia queries
ou todos os recursos HTML / CSS. Então, na verdade, o problema é maior do que isso. Eu sei apenas que você é capaz de criar e-mails exibidos da mesma maneira em todos os E-mails de Clientes (Gmail incluído) com apenas o recurso HTML4 e CSS2 (com algum hack do Outlook), mas não há Consultas de Mídia neste caso.No momento, os estilos embutidos não podem conter nada além de declarações (
property: value
pares).Você pode usar
style
elementos commedia
atributos apropriados nahead
seção do seu documento.fonte
Sim, você pode escrever uma consulta de mídia em CSS embutido se estiver usando uma marca de imagem. Para diferentes tamanhos de dispositivo, você pode obter imagens diferentes.
fonte
Se você estiver usando os Bootstrap Responsive Utilities ou uma alternativa semelhante que permita ocultar / mostrar divs, dependendo dos pontos de interrupção, pode ser possível usar vários elementos e mostrar o mais apropriado. ie
fonte
As consultas de mídia em Atributos de estilo não são possíveis no momento. Mas se você tiver que definir isso dinamicamente via Javascript. Você pode inserir essa regra via JS também.
É como se o estilo estivesse na folha de estilo. Portanto, esteja ciente da especificidade.
fonte
Ei, acabei de escrever.
Agora você pode usar mais
<div style="color: red; @media (max-width: 200px) { color: green }">
ou menos.Aproveitar.
fonte
Tentei testar isso e ele não parecia funcionar, mas estou curioso para saber por que a Apple está usando. Eu estava apenas em https://linkmaker.itunes.apple.com/us/ e notei o código gerado que fornece se você selecionar o botão de opção 'Botão grande', eles estão usando uma consulta de mídia embutida.
nota: quebras de linha adicionadas para facilitar a leitura, o código gerado original é reduzido
fonte
Você pode usar o conjunto de imagens ()
fonte
sim, você pode usar javascript na janela window.matchMedia
área de trabalho para texto em vermelho
tablet para texto em cor verde
fonte
Consultas de mídia em linha são possíveis usando algo como Breakpoint for Sass
Esta postagem do blog explica bem como as consultas de mídia embutida são mais gerenciáveis do que blocos separados: Não há ponto de interrupção
Relacionada às consultas de mídia embutida está a ideia de "consultas de elemento", algumas leituras interessantes são:
fonte
se você adicionar a regra ao arquivo print.css, não precisará usar @media.
Eu o incluí no smarty foreach que eu uso para dar a alguns elementos uma cor de fundo.
fonte