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?

372voto

BoltClock Punkte 660640

@media at-Regeln und Media-Queries können nicht in Inline-Style-Attributen vorkommen, da sie nur Folgendes enthalten können property: value Erklärungen. Unter die Spezifikation drückt es aus:

Der Wert des style-Attributs muss mit der Syntax des Inhalts einer CSS Deklarationsblock

Die einzige Möglichkeit, Stile auf ein bestimmtes Element nur in bestimmten Medien anzuwenden, ist eine separate Regel in Ihrem Stylesheet (sei es extern verlinkt oder intern in einer <style> Element), was bedeutet, dass Sie einen Selektor dafür entwickeln müssen. Sie können sich einen mit den Entwicklungswerkzeugen Ihres Browsers oder finden Sie eine Kombination aus Klasse und/oder ID, die dieses Element isoliert:

#myelement { background-image: url(particular_ad.png); }

@media (max-width: 300px) {
    #myelement { background-image: url(particular_ad_small.png); }
}

Wenn Sie aufgrund der Beschaffenheit Ihrer Seite keinen Selektor finden, der zuverlässig auf dieses Element allein passt, können Sie eine benutzerdefinierte Eigenschaft verwenden, sofern Sie sich nicht um die Spezifität kümmern müssen oder Internet Explorer :

:root { --particular-ad: url(particular_ad.png); }

@media (max-width: 300px) {
    :root { --particular-ad: url(particular_ad_small.png); }
}

<span style="background-image: var(--particular-ad);"></span>

176voto

Problem

Nein, Media Queries können nicht auf diese Weise verwendet werden.

<span style="@media (...) { ... }"></span>

Lösung

Wenn Sie jedoch ein bestimmtes Verhalten zur Verfügung stellen wollen, das on the fly verwendbar UND reaktionsfähig ist, können Sie die style Markup und nicht das Attribut.

e.i.

<style scoped>
.on-the-fly-behavior {
    background-image: url('particular_ad.png'); 
}
@media (max-width: 300px) {
    .on-the-fly-behavior {
        background-image: url('particular_ad_small.png');
    }
}
</style>
<span class="on-the-fly-behavior"></span>

Sehen Sie sich den Code live auf CodePen an

In meinem Blog zum Beispiel, injiziere ich eine <style> Markup in <head> kurz nach <link> Deklaration für CSS und es ist der Inhalt einer Textarea zur Verfügung gestellt neben der realen Inhalt Textarea für die Schaffung extra-Klasse on the fly, wenn ich schrieb ein artitle.

Anmerkung: Die scoped Attribut ist ein Teil der HTML5-Spezifikation. Wenn Sie es nicht verwenden, wird der Validator Sie tadeln, aber die Browser unterstützen derzeit nicht den eigentlichen Zweck: den Inhalt von "scoped". <style> nur auf das unmittelbare Elternelement und die untergeordneten Elemente dieses Elements. Scoped ist nicht obligatorisch, wenn das <style> Element ist in <head> Aufschlag.


UPDATE: Ich empfehle, die Regeln immer zuerst auf mobilem Weg zu verwenden, so dass der vorherige Code sein sollte:

<style scoped>
/* 0 to 299 */
.on-the-fly-behavior {
    background-image: url('particular_ad_small.png'); 
}
/* 300 to X */
@media (min-width: 300px) { /* or 301 if you want really the same as previously.  */
    .on-the-fly-behavior {   
        background-image: url('particular_ad.png');
    }
}
</style>
<span class="on-the-fly-behavior"></span>

17voto

Arif Hussain Punkte 177

Ja, Sie können Media Query in inline-css schreiben, wenn Sie ein Bild-Tag verwenden. Für verschiedene Gerätegrößen können Sie unterschiedliche Bilder erhalten.

<picture>
    <source media="(min-width: 650px)" srcset="img_pink_flowers.jpg">
    <source media="(min-width: 465px)" srcset="img_white_flower.jpg">
    <img src="img_orange_flowers.jpg" alt="Flowers" style="width:auto;">
</picture>

16voto

Marat Tanalin Punkte 13537

Inline-Stile können derzeit nichts anderes als Deklarationen ( property: value Paare).

Sie können verwenden style Elemente mit entsprechenden media Attribute in head Abschnitt Ihres Dokuments.

9voto

Pavel Punkte 107

Wenn Sie Folgendes verwenden Bootstrap Responsive Dienstprogramme oder eine ähnliche Alternative, die es ermöglicht, Divs je nach Haltepunkt ein- und auszublenden, kann es möglich sein, mehrere Elemente zu verwenden und das geeignetste anzuzeigen, z.B.

 <span class="hidden-xs" style="background: url(particular_ad.png)"></span>
 <span class="visible-xs" style="background: url(particular_ad_small.png)"></span>

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