J'ai besoin de charger dynamiquement des images de bannière dans une application HTML5 et j'aimerais que deux versions différentes correspondent à la largeur de l'écran. Je ne peux pas déterminer correctement la largeur d'écran du téléphone, donc la seule façon d'y penser est d'ajouter des images d'arrière-plan d'un div et d'utiliser @media pour déterminer la largeur d'écran et afficher l'image correcte.
Par exemple:
<span style="background-image:particular_ad.png; @media (max-width:300px){background-image:particular_ad_small.png;}"></span>
Est-ce possible ou quelqu'un a-t-il d'autres suggestions?
html
css
media-queries
Danseur
la source
la source
Réponses:
Non, les
@media
règles et les requêtes multimédias ne peuvent pas exister dans les attributs de style en ligne car elles ne peuvent contenir que desproperty: value
déclarations. Comme le dit la spécification :La seule façon d'appliquer des styles à un élément uniquement sur certains supports est d'utiliser une règle distincte dans votre feuille de style, ce qui signifie que vous devrez créer un sélecteur pour celui-ci.
Un
span
sélecteur factice ressemblerait à ceci, mais si vous ciblez un élément très spécifique, vous aurez besoin d'un sélecteur plus spécifique:la source
<style>
balise dans votre code HTML. Il s'agit d'une approche nécessaire dans le cas où lebackground-image
est extrait dynamiquement d'une base de données. De toute évidence, la feuille de style externe n'est pas le bon endroit pour cela.<script>
balise est souvent supprimée par les clients de messagerie lorsqu'un e-mail est transféré, de sorte que les gens ont tendance à utiliser des styles en ligne pour les e-mails. Et cela signifie aucune interrogation des médias. Je recherche actuellement les meilleures pratiques pour cette situation, mais juste un heads-up amical.em
s, pas enpx
. De cette façon, cela fonctionnera toujours sensiblement lorsque vous zoomerez.Problème
Non, les requêtes multimédias ne peuvent pas être utilisées de cette manière
Solution
Mais si vous voulez fournir un comportement spécifique utilisable à la volée ET réactif, vous pouvez utiliser le
style
balisage et non l'attribut.ei
Voir le code en direct sur CodePen
Dans mon blog par exemple, j'injecte un
<style>
balisage<head>
juste après la<link>
déclaration pour CSS et il contient le contenu d'une zone de texte fournie à côté de la zone de texte de contenu réel pour créer une classe supplémentaire à la volée lorsque j'ai écrit un article.Remarque: l'
scoped
attribut fait partie de la spécification HTML5. Si vous ne l'utilisez pas, le validateur vous en voudra mais les navigateurs ne prennent actuellement pas en charge le véritable objectif: délimiter le contenu de<style>
uniquement sur l'élément immédiatement parent et les éléments enfants de cet élément. La portée n'est pas obligatoire si l'<style>
élément est en<head>
balisage.MISE À JOUR: Je conseille de toujours utiliser les règles dans le premier mobile, donc le code précédent devrait être:
la source
background-image
moment où la page se charge..on-the-fly-behavior
pas être utilisé n'importe où, mais si le mot est «ignoré» par un navigateur, ce n'est pas un problème. <style> peut être utilisé dans <body> dans tous les navigateurs, cela fonctionne. C'est juste une exigence de validation w3c.scoped
une solution brillante, elle n'est officiellement prise en charge par aucun navigateur. Espérons que cela changera bientôt.<style>
,media queries
ou la totalité des fonctionnalités HTML / CSS. Donc, en réalité, le problème est plus grave que cela. Je sais seulement que vous pouvez créer des e-mails affichés de la même manière sur tous les e-mails clients (Gmail inclus) avec uniquement les fonctionnalités HTML4 et CSS2 (avec un certain piratage Outlook), mais il n'y a pas de requêtes multimédias dans ce cas.Les styles en ligne ne peuvent actuellement contenir que des déclarations (
property: value
paires).Vous pouvez utiliser des
style
éléments avec lesmedia
attributs appropriés dans lahead
section de votre document.la source
Oui, vous pouvez écrire une requête média en inline-css si vous utilisez un tag d'image. Pour différentes tailles d'appareils, vous pouvez obtenir différentes images.
la source
Si vous utilisez Bootstrap Responsive Utilities ou une alternative similaire qui permet de masquer / afficher les div en fonction des points d'arrêt, il peut être possible d'utiliser plusieurs éléments et d'afficher le plus approprié. c'est à dire
la source
Les requêtes multimédias dans les attributs de style ne sont pas possibles pour le moment. Mais si vous devez définir cela dynamiquement via Javascript. Vous pouvez également insérer cette règle via JS.
C'est comme si le style était là dans la feuille de style. Soyez donc conscient de la spécificité.
la source
Hé je viens de l'écrire.
Maintenant, vous pouvez utiliser
<div style="color: red; @media (max-width: 200px) { color: green }">
ou ainsi.Prendre plaisir.
la source
J'ai essayé de tester cela et cela ne semble pas fonctionner mais je suis curieux de savoir pourquoi Apple l'utilise. J'étais juste sur https://linkmaker.itunes.apple.com/us/ et j'ai remarqué dans le code généré qu'il fournit si vous sélectionnez le bouton radio "Grand bouton", ils utilisent une requête multimédia en ligne.
remarque: ajout de sauts de ligne pour plus de lisibilité, le code généré d'origine est réduit
la source
Vous pouvez utiliser image-set ()
la source
oui, vous pouvez le faire avec javascript par le window.matchMedia
bureau pour le texte de couleur rouge
tablette pour texte de couleur verte
la source
Les requêtes de médias en ligne sont possibles en utilisant quelque chose comme Breakpoint for Sass
Ce billet de blog explique bien comment les requêtes multimédias en ligne sont plus faciles à gérer que les blocs séparés: il n'y a pas de point d'arrêt
L'idée des «requêtes d'éléments» est liée aux requêtes de médias en ligne, voici quelques lectures intéressantes:
la source
si vous ajoutez la règle au fichier print.css, vous n'avez pas besoin d'utiliser @media.
Je l'ai exclu dans le smarty foreach que j'utilise pour donner à certains éléments une couleur d'arrière-plan.
la source