416 Stimmen

Ist es möglich, CSS @media Regeln inline zu setzen?

Ich muss dynamisch Banner-Bilder in eine HTML5-App laden und möchte ein paar verschiedene Versionen, um die Bildschirm-Breiten anzupassen. Ich kann die Bildschirmbreite des Telefons nicht korrekt bestimmen, also ist der einzige Weg, den ich mir vorstellen kann, dies zu tun, Hintergrundbilder eines Divs hinzuzufügen und @media zu verwenden, um die Bildschirmbreite zu bestimmen und das richtige Bild anzuzeigen.

Zum Beispiel:

 <span style="background-image:particular_ad.png; @media (max-width:300px){background-image:particular_ad_small.png;}"></span>

Ist dies möglich, oder hat jemand einen anderen Vorschlag?

3voto

rlueder Punkte 340

Inline-Medienabfragen sind möglich, indem man etwas wie Haltepunkt für Sass

In diesem Blogbeitrag wird gut erklärt, wie Inline-Medienabfragen besser zu handhaben sind als separate Blöcke: Es gibt keinen Haltepunkt

Im Zusammenhang mit Inline-Media-Queries gibt es die Idee der "Element-Queries", von denen es einige interessante gibt:

  1. Überlegungen zu Media Queries für Elemente
  2. Medienabfragen sind ein Hack
  3. Medienabfragen sind nicht die Antwort: Element Query Polyfill
  4. if else blockiert

1voto

Paul Wolbers Punkte 21

Wenn Sie die Regel zur Datei print.css hinzufügen, müssen Sie @media nicht verwenden.

Ich uncluded es in der Smarty foreach ich verwenden, um einige Elemente eine Hintergrundfarbe zu geben.

<script type='text/javascript'>
  document.styleSheets[3].insertRule(" #caldiv_<?smarty $item.calendar_id ?> { border-color:<?smarty $item.color ?> }", 1);
</script>

1voto

AGrush Punkte 1047

Es ist verrückt, dass sie nicht an Media-Queries auf HTML-Ebene gedacht haben, da offensichtlich Stil-Css nach HTML geladen wird, ist es ein großer Nachteil, Stil innerhalb von HTML zu inlinen.

-2voto

Christiyan Punkte 319

Ja, das ist durchaus möglich, aber nur unter Verwendung von Javascript-Ereignisattributen in HTML-Elementen. Dabei ist zu beachten, dass nicht jedes HTML-Tag-Element jedes js-Ereignis auslösen kann, das auf Änderungen im DOM warten kann, wie z.B. onresize oder js-Code ausführen, wenn DOM geladen wird, wie onload Veranstaltung tut. In dem obigen Beispiel verwende ich Körper y img Tags, da sie in der Lage sind, zu schießen img sólo onload Ereignis, Body-Tag beide onload y onresize . Je nach Ereignis können Sie den Ansatz wählen, um Ihr Problem zu lösen, wie mit dem Code aus den Beispielen.

Mit einer Körper Tag:

<body onload="
const mediaQueryList = window.matchMedia('(max-width: 600px)');
function screenTest(e) {
 if (e.matches) {
 /* the viewport is 600 pixels wide or less */
  console.log('This is a narrow screen — 600px wide or less.');
  document.body.style.backgroundColor = 'pink';
 } else {
 /* the viewport is more than 600 pixels wide */
  console.log('This is a wide screen — more than 600px wide.');
  document.body.style.backgroundColor = 'aquamarine';
 }
}
mediaQueryList.addEventListener('change', screenTest);
" onresize="
if (document.documentElement.offsetWidth <= 600) {
/* the viewport is 600 pixels wide or less */
console.log('This is a narrow screen — 600px wide or less.');
document.body.style.backgroundColor = 'pink';
} else {
/* the viewport is more than 600 pixels wide */
 console.log('This is a wide screen — more than 600px wide.');
 document.body.style.backgroundColor = 'aquamarine';
}
"><!-- Some other code goes here --></body>

Verwendung von img Tag:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==" 
width="100%" style="width: 100vw; height: 1px;" 
alt="" height="1"  
onload="
   const mediaQueryList = window.matchMedia('(max-width: 600px)');
   function screenTest(e) {
     if (e.matches) {
        /* the viewport is 600 pixels wide or less */
        console.log('This is a narrow screen — 600px wide or less.');
        document.body.style.backgroundColor = 'pink';
     } else {
        /* the viewport is more than 600 pixels wide */
        console.log('This is a wide screen — more than 600px wide.');
        document.body.style.backgroundColor = 'aquamarine';
     }
   }
   mediaQueryList.addEventListener('change', screenTest);
" />

Sie sollten auch bedenken, dass, wenn Sie sich für diese Art der Einbettung von mediaquery css in einen HTML-Brief entscheiden, dieser möglicherweise nicht durch die Blacklists von Mail-Servern kommt, die in den meisten Fällen solche Javascript-Ereignisse unterbinden. Aber für die Zwecke eines Ajax oder Banners, einer dynamischen Anwendung, sollte dieser Ansatz kein Problem darstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X