Ich muss Bannerbilder dynamisch in eine HTML5-App laden und möchte ein paar verschiedene Versionen, die den Bildschirmbreiten entsprechen. Ich kann die Bildschirmbreite des Telefons nicht richtig bestimmen. Daher kann ich mir nur vorstellen, Hintergrundbilder eines div hinzuzufügen und mit @media die Bildschirmbreite zu bestimmen und das richtige Bild anzuzeigen.
Beispielsweise:
<span style="background-image:particular_ad.png; @media (max-width:300px){background-image:particular_ad_small.png;}"></span>
Ist das möglich oder hat jemand andere Vorschläge?
html
css
media-queries
Tänzer
quelle
quelle
Antworten:
Nein,
@media
Regeln und Medienabfragen können nicht in Inline-Stilattributen vorhanden sein, da sie nurproperty: value
Deklarationen enthalten können . Wie die Spezifikation es ausdrückt:Die einzige Möglichkeit, Stile nur in bestimmten Medien auf ein Element anzuwenden, besteht in einer separaten Regel in Ihrem Stylesheet. Dies bedeutet, dass Sie einen Selektor dafür erstellen müssen.
Ein Dummy-
span
Selektor würde so aussehen, aber wenn Sie auf ein ganz bestimmtes Element abzielen, benötigen Sie einen spezifischeren Selektor:quelle
<style>
Tag in Ihr HTML einfügen. Dies ist ein notwendiger Ansatz für den Fall, dass dasbackground-image
dynamisch aus einer Datenbank abgerufen wird. Offensichtlich ist das externe Stylesheet dafür nicht der richtige Ort.<script>
Tag wird häufig von E-Mail-Clients entfernt, wenn eine E-Mail weitergeleitet wird. Daher tendieren die Benutzer dazu, Inline-Stile für E-Mails zu verwenden. Und das bedeutet keine Medienabfragen. Ich bin derzeit auf der Suche nach den besten Praktiken für diese Situation, aber nur nach einem freundlichen Heads-up.em
s ein, nicht inpx
. Auf diese Weise funktioniert es beim Zoomen immer noch sinnvoll.Problem
Nein, Medienabfragen können auf diese Weise nicht verwendet werden
Lösung
Wenn Sie jedoch ein bestimmtes Verhalten bereitstellen möchten, das im laufenden Betrieb verwendet werden kann UND reagiert, können Sie das
style
Markup und nicht das Attribut verwenden.ei
Sehen Sie sich den Code live in CodePen an
In meinem Blog füge ich beispielsweise direkt nach der Deklaration für CSS ein
<style>
Markup ein , das den Inhalt eines Textbereichs enthält, der neben dem Textbereich für echten Inhalt bereitgestellt wird, um beim Schreiben eines Artikels im Handumdrehen eine zusätzliche Klasse zu erstellen.<head>
<link>
Hinweis: Das
scoped
Attribut ist Teil der HTML5-Spezifikation. Wenn Sie es nicht verwenden, wird der Validator Sie beschuldigen, aber Browser unterstützen derzeit nicht den eigentlichen Zweck: den Inhalt<style>
nur auf das unmittelbar übergeordnete Element und die untergeordneten Elemente dieses Elements zu beschränken. Der Gültigkeitsbereich ist nicht obligatorisch, wenn sich das<style>
Element im<head>
Markup befindet.UPDATE: Ich rate, Regeln immer zuerst auf dem Handy zu verwenden, daher sollte der vorherige Code lauten:
quelle
background-image
der Seite dynamisch ändern können..on-the-fly-behavior
die Verwendung nicht zuzulassen , aber wenn das Wort von einem Navigator «ignorieren» lautet, ist dies kein Problem. <style> kann in <body> in allen Navigatoren verwendet werden, es funktioniert. Es ist nur eine w3c-Validierungsanforderung.scoped
es sich um eine brillante Lösung handelt, wird sie von keinem Browser offiziell unterstützt. Hoffentlich ändert sich das bald.<style>
, odermedia queries
oder alle HTML / CSS - Funktion. Das Problem ist also tatsächlich größer. Ich weiß nur, dass Sie E-Mails erstellen können, die in allen Client-E-Mails (einschließlich Google Mail) auf dieselbe Weise angezeigt werden, und zwar nur mit HTML4- und CSS2-Funktionen (mit einigen Outlook-Hacks). In diesem Fall gibt es jedoch keine Medienabfragen.Inline-Stile dürfen derzeit nur Deklarationen (
property: value
Paare) enthalten.Sie können
style
Elemente mit entsprechendenmedia
Attributen imhead
Abschnitt Ihres Dokuments verwenden.quelle
Ja, Sie können eine Medienabfrage in Inline-CSS schreiben, wenn Sie ein Bild-Tag verwenden. Für verschiedene Gerätegrößen können Sie unterschiedliche Bilder erhalten.
quelle
Wenn Sie Bootstrap Responsive Utilities oder eine ähnliche Alternative verwenden, mit der Divs abhängig von den Haltepunkten ausgeblendet / angezeigt werden können, können möglicherweise mehrere Elemente verwendet und die am besten geeigneten angezeigt werden. dh
quelle
Medienabfragen in Stilattributen sind derzeit nicht möglich. Aber wenn Sie dies dynamisch über Javascript einstellen müssen. Sie können diese Regel auch über JS einfügen.
Dies ist, als ob der Stil im Stylesheet vorhanden wäre. Seien Sie sich also der Spezifität bewusst.
quelle
Hey, ich habe es gerade geschrieben.
Jetzt können Sie
<div style="color: red; @media (max-width: 200px) { color: green }">
oder so verwenden.Genießen.
quelle
Ich habe versucht, dies zu testen, und es schien nicht zu funktionieren, aber ich bin gespannt, warum Apple es verwendet. Ich war gerade auf https://linkmaker.itunes.apple.com/us/ und habe im generierten Code festgestellt, dass bei Verwendung des Optionsfelds "Großer Button" eine Inline-Medienabfrage verwendet wird.
Hinweis: Zur besseren Lesbarkeit wurden Zeilenumbrüche hinzugefügt. Der ursprünglich generierte Code wird minimiert
quelle
Sie können image-set () verwenden
quelle
Ja, Sie können mit Javascript über window.matchMedia arbeiten
Desktop für roten Text
Tablette für grünen Text
quelle
Inline-Medienabfragen sind mit Breakpoint for Sass möglich
In diesem Blog-Beitrag wird gut erklärt, wie Inline-Medienabfragen besser verwaltet werden können als separate Blöcke: Es gibt keinen Haltepunkt
Im Zusammenhang mit Inline-Medienabfragen steht die Idee der "Elementabfragen", einige interessante Lesarten sind:
quelle
Wenn Sie die Regel zur Datei print.css hinzufügen, müssen Sie @media nicht verwenden.
Ich habe es in dem Smarty Foreach ausgeschlossen, mit dem ich einigen Elementen eine Hintergrundfarbe gebe.
quelle