Nur für den Fall, dass Sie Geistesblitze über die Logik in CSS-Medienabfragen haben, so wie ich.
Wenn
Das sind Medienabfragen: logische if-Anweisungen. „Wenn“ diese Dinge für den Browser zutreffen, verwenden Sie das darin enthaltene CSS.
/* IF the viewport is 550px or smaller, do this */
@media (max-width: 550px) {
html { background: hsl(0 0% 0% / 0.5); }
}
Media Queries Level 4 erlaubt eine Vergleichssyntax wie diese, aber die Browserunterstützung ist derzeit viel geringer
@media (width <= 30em) {
html { background: rgb(0 0 0 / 0.5); }
}
Und
Das Schlüsselwort and.
/* IF the viewport is 550px or smaller, do this */
@media (min-width: 600px) and (max-width: 800px) {
html { background: red; }
}
Die Media Queries Level 4-Syntax glänzt hier wirklich
@media (600px <= width <= 800px) {
html { background: red; }
}
Oder
Komma trennen.
@media (max-width: 600px), (min-width: 800px) {
html { background: red; }
}
Technisch gesehen werden diese wie zwei separate Medienabfragen behandelt, aber das ist effektiv oder.
Nicht
Kehren Sie die Logik mit dem Schlüsselwort not um.
@media not all and (max-width: 600px) {
html { background: red; }
}
Allein not (max-width: 600px) scheint bei mir nicht zu funktionieren, daher die leicht seltsame Syntax oben. Vielleicht kann mir das jemand erklären. Beachten Sie, dass not nicht nur für die aktuelle Medienabfrage funktioniert, sodass es, wenn Sie kommagetrennte Werte verwenden, nur die Medienabfrage beeinflusst, innerhalb der es sich befindet. Beachten Sie auch, dass not die Logik für die gesamte Medienabfrage als Ganzes umkehrt, nicht für einzelne Teile davon. nicht x und y = nicht (x und y) ≠ (nicht x) und y.
Exklusiv
Um sicherzustellen, dass zu jeder Zeit nur eine Medienabfrage wirksam ist, machen Sie die Zahlen (oder was auch immer) so, dass dies möglich ist. Es kann einfacher sein, sie auf diese Weise mental zu verwalten.
@media (max-width: 400px) {
html { background: red; }
}
@media (min-width: 401px) and (max-width: 800px) {
html { background: green; }
}
@media (min-width: 801px) {
html { background: blue; }
}
Logisch gesehen ist dies ein bisschen wie eine switch-Anweisung, nur ohne eine einfache Möglichkeit, „wenn keine dieser Bedingungen zutrifft, tu dies“ wie bei default.
Das sind zukünftige CSS-Sachen, aber die @when-Syntax wird helfen, dies zu verbessern
@when media(min-width: 600px) {
/* ... */
}
@else {
/* ... */
}
Überschreiben
Es gibt nichts, was verhindert, dass mehr als eine Medienabfrage gleichzeitig wahr ist. Es kann in einigen Fällen effizienter sein, dies zu nutzen, anstatt sie alle exklusiv zu machen.
@media (min-width: 400px) {
html { background: red; }
}
@media (min-width: 600px) {
html { background: green; }
}
@media (min-width: 800px) {
html { background: blue; }
}
Medienabfragen fügen den von ihnen enthaltenen Selektoren keine Spezifität hinzu, aber die Quellreihenfolge ist immer noch wichtig. Das obige wird funktionieren, weil sie richtig geordnet sind. Tauschen Sie diese Reihenfolge und bei Browserfensterbreiten über 800 Pixel wird der Hintergrund rot sein, vielleicht unintuitiv.
Mobile First
Ihre Styles für kleine Bildschirme befinden sich in Ihrem normalen Bildschirm-CSS, und dann, wenn der Bildschirm größer wird, überschreiben Sie, was Sie brauchen. Also im Allgemeinen min-width-Medienabfragen.
html { background: red; }
@media (min-width: 600px) {
html { background: green; }
}
Desktop First
Ihre Styles für große Bildschirme befinden sich in Ihrem normalen Bildschirm-CSS, und dann, wenn der Bildschirm kleiner wird, überschreiben Sie, was Sie brauchen. Also im Allgemeinen max-width-Medienabfragen.
html { background: red; }
@media (max-width: 600px) {
html { background: green; }
}
Verrückt werden
Sie können damit so komplex sein, wie Sie möchten.
@media
only screen and (min-width: 100px),
not all and (min-width: 100px),
not print and (min-height: 100px),
(color),
(min-height: 100px) and (max-height: 1000px),
handheld and (orientation: landscape)
{
html { background: red; }
}
Hinweis: Das Schlüsselwort only war dazu gedacht, Browser, die keine Medienabfragen unterstützen, daran zu hindern, das Stylesheet zu laden oder die Styles zu verwenden. Ich bin mir nicht sicher, wie nützlich das jemals war / noch ist.
Das ist spitze, ich habe auch gelegentlich Geistesblitze deswegen! Danke :D
Wie immer ein großartiger Spaziergang. Ein Geistesblitz-Post, der mich für Medienabfragen aufgewärmt hat.
Was ist der Anwendungsfall für
not? Gibt es etwas, das Sie mit@media not all and (max-width: 600px)tun können, das Sie nicht mit@media (min-width: 801px)tun könnten?Ich vermute, Sie brauchen es vielleicht beim Aufbau komplizierter Abfragen Klausel für Klausel, wie im letzten Beispiel des Artikels. Aber brauchen Sie das wirklich?
Logik ist ein seltsames Biest. Manchmal ist es sinnvoller, in der Sprache spezifisch zu sein, was man nicht tut.
Ich denke auch, dass es einige boolesche Schlüsselwörter geben könnte, die
notanstelle des Gegenteils erfordern, wie vielleichtnot (color)– aber das bin ich mir nicht ganz sicher. Ich weiß, dass esmonochromegibt, aber ich bin mir nicht sicher, ob das das genaue Gegenteil voncolor notist.Gypsy: „Es gibt vielleicht eine Möglichkeit. Haben Sie von den Mönchen von Deshuba gehört?“
Fry: „Ich habe… NICHT von ihnen gehört…“
[audio src="http://www.gotfuturama.com/Multimedia/EpisodeSounds/3ACV20/24.mp3" /]
Tolle Zusammenfassung! Ich habe spezifische Höhen verwendet, um Retina-Grafiken zu testen.
Das erste @media-Argument ist nur Höhe (nicht min oder max), was das Testen erheblich erleichtert.
Viele meiner Probleme mit Responsive Design würden gelöst, wenn ich ein Layout ändern könnte, abhängig von der Breite/Höhe des Containers eines Elements und nicht des Viewports. Ich hoffe, das wird eines Tages passieren.
Sie sollten sich vielleicht mit proportionalen Medienabfragen befassen.
Sie sind nicht allein, wen interessiert der Viewport?! Nun, hier ist ein Anfang: http://blog.andyhume.net/responsive-containers/
Ich verwende den Mobile-First-Ansatz, aber ich hasse die Tatsache, dass ich mein Stylesheet für IE8 im Grunde neu erstellen muss, da es die Medienabfragen ignoriert. Hat jemand Tipps zur Verbesserung dieses Workflows?
Eigentlich ja, machen Sie es umgekehrt. Gehen Sie in Ihrem Hauptworkflow davon aus, dass Sie für eine Nicht-Medienabfrage-Website (z. B. Desktop, IE8) entwerfen, und verwenden Sie dann Medienabfragen nur dort, wo Sie sie benötigen, und halten Sie sie am Ende Ihres Stylesheets. Es ist nicht gerade Mobile-First-Design, aber ich habe festgestellt, dass es sehr einfach zu verwenden ist, indem man nur das ändert, was sich für ein bestimmtes Gerät, eine bestimmte Breite usw. ändern muss. Zumindest verhindert es, dass Sie Ihren gesamten Code in jeder Medienabfrage duplizieren, indem Sie das schlimmste Szenario (IE7, IE8) annehmen und dann progressive Verbesserungen und Anpassungen vornehmen.
@Stephen Ist der Mobile-First-Ansatz nicht eher die Reihenfolge, in der Sie die Medienabfragen erstellen (kleinere Ansichtsfenster -> größere Ansichtsfenster) als wo die eigentlichen Abfragen im Dokument zu finden sind?
Wenn ich Responsive Design betreibe, packe ich immer alles an einem Ort am Ende des Stylesheets zusammen, anstatt jeden einzelnen neben dem entsprechenden Selektor usw. zu platzieren.
Ich verwende bedingte Kommentare im HTML-Element und dann LESS, um alle meine Medienabfragen zu verwalten, und speise sie dann auch für IE7 und IE8 ein.
Auf diese Weise muss ich die Medienabfragen nur einmal schreiben, und IE erhält immer noch eine gute Desktop-Erfahrung.
Ich schätze, es wäre wahrscheinlich auch effizienter, ein separates Stylesheet zu haben, das dann nur für IE bedingt eingebunden wird, um die Duplizierung in der Haupt-CSS-Datei zu vermeiden, aber das ist die Theorie.
Bitte schauen Sie sich die CSS Media Query Live Demo und Cheat Sheet an.
Ich hoffe, es ist hilfreich für die Entwickler und Designer.
https://github.com/AndreLion/mediaquery
Schöner Artikel! Ich hätte wirklich gerne ein Tutorial über gängige CSS-Medienabfragen, die die Mehrheit der mobilen Geräte unterstützen, d. h. kleine/große Smartphones, Tablets, verschiedene Ansichtsfensterorientierungen usw. Ich möchte nicht *jedes* Geräte-Ansichtsfenster unterstützen, aber die gängigsten... Haben Sie Vorschläge?
Toller Artikel Chris, einfach und unkompliziert!
Ich schätze das wirklich, besonders die Erläuterung von „not“.
Danke für diese prägnante Klarheit im Medienabfrage-Chaos. Die Beispiele für exklusiv und überschreiben treffen den Nagel auf den Kopf!
Sie beweisen wieder einmal, warum Entwickler zu Ihnen strömen, wenn es um CSS geht. Sie vereinfachen die Dinge sehr gut.
Ich hätte gerne einige Informationen darüber, wie Drucker auf Medienabfragen reagieren. Was ist die „min-width“ eines Druckers?!
Hallo,
Ich benutze Medienabfragen für ein responsives Web. Ich habe den Top-Down-Ansatz von Desktop zu kleineren Geräten verwendet, aber wenn es um das Testen auf Android-Geräten geht, ist das wirklich schmerzhaft. Zum Beispiel gerät ein Android-Gerät mit einer Auflösung von 800x480 in Konflikt mit dem iPad mit einer Auflösung von 768x1024.
Ich habe sowohl „min-device-width“ als auch „max-device width“ für beide verwendet, aber das Ergebnis ist dasselbe.
Was kann die Lösung für diese Art von Situation sein? Hilfe….
Die Lösung ist im Allgemeinen Mobile-First-Styling. Indem man die Dinge Mobile-First behandelt, konzentriert man sich mehr auf den Inhalt und fügt Stile hinzu, wenn die Fähigkeit (und Größe) es erlaubt, anstatt zu versuchen, Dinge zu entfernen, wenn der Ansichtsfenster zu klein wird.
Proportionale Medienabfragen können ebenfalls helfen, da sie sich nicht mehr um Pixelabmessungen kümmern (was bei Ausnahmefällen wie dem Kindle Fire oder einem Projektor hilft).
Hallo Vipul,
Können Sie mir erklären, wie Sie das Stylesheet geändert haben, um die Medienabfrageänderungen für Responsive Webdesign zu integrieren?
Jede Hilfe wird geschätzt
Hallo Sach,
Versuchen Sie es so,
Danke, dass Sie es so erklärt haben, dass ich es endlich verstehe
Hier sind 2 Links, die sehr nützlich sein könnten
http://www.mobitest.me/ informiert über den Bildschirm und unterstützte Funktionen.
http://www.mobitest.me/devices/ eine Liste gängiger mobiler Werte
Ihre Links funktionieren nicht
Ich denke, es hängt alles von den Beschränkungen des Projekts ab, welche der von Ihnen behandelten Ansätze der am besten geeignete und code-effizienteste Ansatz ist.
@media not, (max-width: 600px) {
html { background: red; }
}
Das Hinzufügen des Kommas scheint bei der
not-Medienabfrage bei mir zu funktionieren.@media (min-width: 801px) and (max-width: 1365px){
/* Stil geht hier */
}
Ich benutze diese Medienabfrage. Sie funktioniert nicht bis zu max-width:1365px. Sie funktioniert nur bis 1224px.
Hilf mir!!!
Sind Sie sicher, dass Sie es nicht mit einer anderen Abfrage überschreiben?
Eine Nebenbemerkung an alle: Seien Sie vorsichtig, wenn Sie Online-CSS-Minifizierer verwenden, da einige von ihnen den @media-Code zerstören :)
Ja, ich bin sicher, dass es nicht durch andere Medienabfragen überschrieben wird.
Wie verwende ich max oder min-height mit Medienabfragen? Irgendein Beispiel und was ist der Unterschied zwischen @media(max-width:etc)
und @media screen and(max-width:etc)
und @media all?
Ich verwende Medienabfragen für ein responsives Web, üblicherweise verwenden wir Medienabfragen wie diese
@media (min-width: 1024px) and (max-width: 1280px){
/* Stil geht hier */
}
Das ist in Ordnung...
Meine Frage ist diese: Wenn wir die Höhe über Medienabfragen steuern müssen, was machen wir dann?
Wie Sie wissen, verwenden einige Benutzer Auflösungen von 1280x768 und einige 1280x960/1024, einige höhere Auflösungen. Wir Entwickler sind in diesen Situationen gefangen. Ich brauche Hilfe und wünsche mir eine Lösung von Ihnen...
Hallo. Ich „staple“ einige Medienabfragen für Retina und auch für mon-width wie folgt
Mein Problem ist, dass die letzte Medienabfrage alles überschreibt. Ich kann nicht herausfinden, warum. Ich hätte gedacht, dass der Vorgänger ihn überschreiben würde, wenn die Breite übereinstimmt.
Weiß jemand warum?
Beste Grüße
Ich habe es nicht versucht, aber man kann nicht mit not anfangen. Soweit ich weiß, dient die „not“-Logik dazu, Elemente aus einer anfänglichen Gruppe zu subtrahieren. Sie sollten also mit dem Rest beginnen und dann die not-Subtraktion hinzufügen. Ihre Hacks funktionieren wahrscheinlich, weil Sie erzwingen, dass eine ganze Gruppe definiert wird (anders als dort, wo das not ist), um etwas zum Subtrahieren zu haben.
Ich hätte einfach gerne…
:-)
Ich sehe nicht, wie diese einander überschreiben, kann jemand bitte erklären?
Beste Grüße,
Karl
Alle oben genannten 3 Stile sind auf meiner Website. Wie kann ich nur 2 davon für Desktop laden lassen?
Auf die gleiche Weise brauche ich im Handy einen Stil.
per E-Mail von Arkadiusz Czekajski