Wir haben bereits die Verwendung von CSS Media Queries behandelt, um unterschiedliche Stylesheets je nach Größe des Browserfensters zuzuweisen. In diesem Beispiel haben wir das Layout der gesamten Seite basierend auf dem verfügbaren Platz geändert. Es ist jedoch nicht erforderlich, mit dieser Technik so drastische Änderungen vorzunehmen. In diesem Tutorial werden wir uns mit einer Designanpassung mit kleinerem Umfang befassen. Wir werden auch die Syntax für die Verwendung von Media Queries innerhalb eines einzigen Stylesheets und weitere Beispiele dafür behandeln.
Die CSS Media Query-Syntax zum Aufrufen eines externen Stylesheets lautet wie folgt:
<link rel='stylesheet' media='screen and (min-width: 701px) and (max-width: 900px)' href='css/medium.css' />

Sie sind möglicherweise mit dem Media-Attribut vertraut, das normalerweise "screen" oder "print" oder sogar eine durch Kommas getrennte Liste wie "screen, projection" ist. Das Media-Attribut kann direkt in eine CSS-Datei integriert werden, wie hier:
@media screen {
body {
width: 75%;
}
}
@media print {
body {
width: 100%;
}
}
Ebenso können Sie fortgeschrittenere CSS Media Queries verwenden wie:
@media all and (max-width: 699px) and (min-width: 520px), (min-width: 1151px) {
body {
background: #ccc;
}
}
Sie können so viele Media Queries wie gewünscht in einer CSS-Datei verwenden. Beachten Sie, dass Sie den **and**-Operator verwenden können, um zu verlangen, dass mehrere Abfragen wahr sind, aber Sie müssen das Komma (,) als **or**-Operator verwenden, um Gruppen von mehreren Abfragen zu trennen. Das Schlüsselwort **not** kann ebenfalls verwendet werden, um die Logik zu ändern.
Beispiel
Nehmen wir an, wir haben ein Design mit variabler Breite, bei dem die Seitenleiste 35 % der Breite der Seite einnimmt. Das bedeutet, abhängig von der Breite des Browserfensters kann diese Seitenleiste sehr schmal oder sehr breit sein, das ist einfach die Natur von Designs mit variabler Breite. Mit CSS Media Queries können wir sagen: „Wenn der Browser sehr schmal ist, tue dies, wenn er breiter ist, tue dies, wenn er sehr breit ist, tue dies.“ Beachten Sie, dass die Messung der Breite nicht das Einzige ist, was Media Queries tun können. Es ist nur ein besonders praktisches Beispiel.
In unserer Beispiel-Seitenleiste haben wir eine Liste von Namen des Super Teams, die als E-Mail-Links fungieren. Der HTML-Code ist ziemlich einfach
<ul id="nav">
<li><a data-email="[email protected]" href="mailto:[email protected]">Chris Coyier</a></li>
<li><a data-email="[email protected]" href="mailto:[email protected]">Elisabeth Moss</a></li>
<li><a data-email="[email protected]" href="mailto:[email protected]">Amanda Righetti</a></li>
</ul>
Es ist nur eine Liste von Links. Das href-Attribut ist ein mailto:-Link. Das einzige, was Ihnen vielleicht ungewöhnlich vorkommt, ist das data-email-Attribut. In HTML5 können Sie Attribute, die mit data- beginnen, zum Speichern von Informationen verwenden, und das ist völlig gültig. Wir möchten diese Daten später verwenden, aber der href-Wert ist nicht ganz das, was wir mit dem mailto:-Link benötigen, daher das Datenattribut.
Das Standard-Styling für die Liste wird dieses sein:
#sidebar ul li a {
color: #900;
text-decoration: none;
padding: 3px 0;
display: block;
}

Wenn der Browser etwas breiter wird, in unserem Beispiel zwischen 520 und 699 Pixel, werden wir den zusätzlichen Platz, der sich in der Seitenleiste öffnet, nutzen, um jedem Listenelement ein E-Mail-Symbol hinzuzufügen.
@media all and (max-width: 699px) and (min-width: 520px) {
#sidebar ul li a {
padding-left: 21px;
background: url(../images/email.png) left center no-repeat;
}
}

Wenn wir breiter werden, von 700 bis 1000 Pixel, werden wir den zusätzlichen Platz wieder nutzen, um die Links anstelle des einfachen Symbols mit dem Text „E-Mail: “ (unter Verwendung von CSS Content) einzuleiten.
@media all and (max-width: 1000px) and (min-width: 700px) {
#sidebar ul li a:before {
content: "Email: ";
font-style: italic;
color: #666;
}
}

Noch breiter, bei Browserfensterbreiten über 1001 Pixel, werden wir die E-Mail-Adresse buchstäblich an die Links anhängen. Hier kommt das HTML5-Datenattribut ins Spiel.
@media all and (min-width: 1001px) {
#sidebar ul li a:after {
content: " (" attr(data-email) ")";
font-size: 11px;
font-style: italic;
color: #666;
}
}

Bei sehr breiten Größen, über 1151 Pixel, fügen wir das Symbol wieder hinzu, wie wir es zuvor getan haben. Das Coole daran ist, dass wir kein zusätzliches Media-Query-Segment schreiben müssen, wir können einfach eine zusätzliche Media Query an unsere bereits vorhandene anhängen, indem wir ein Komma (verhält sich wie ein ODER-Operator) für die bereits geschriebene Abfrage mittlerer Breite verwenden.
@media all and (max-width: 699px) and (min-width: 520px), (min-width: 1151px) {
#sidebar ul li a {
padding-left: 21px;
background: url(../images/email.png) left center no-repeat;
}
}

Alles zusammen
#sidebar ul li a {
color: #900;
text-decoration: none;
padding: 3px 0;
display: block;
}
@media all and (min-width: 1001px) {
#sidebar ul li a:after {
content: " (" attr(data-email) ")";
font-size: 11px;
font-style: italic;
color: #666;
}
}
@media all and (max-width: 1000px) and (min-width: 700px) {
#sidebar ul li a:before {
content: "Email: ";
font-style: italic;
color: #666;
}
}
@media all and (max-width: 699px) and (min-width: 520px), (min-width: 1151px) {
#sidebar ul li a {
padding-left: 21px;
background: url(../images/email.png) left center no-repeat;
}
}

Video-Demo
Live-Demo / Download
Demo ansehen Dateien herunterladen
Browser-Unterstützung
Die Browserunterstützung für Media Queries ist überraschend gut. Für die Abfragen in dieser speziellen Demo (die min und max Breiten nutzen) unterstützen die aktuellen Versionen von Firefox, Safari (einschließlich Mobile), Chrome und Opera alle. Internet Explorer 9 wird sie unterstützen, aber 8 und darunter nicht. Wenn ich die bestmögliche Erfahrung in IE 8 und darunter liefern wollte, würde ich es entweder mit JavaScript vortäuschen, wie ich es in diesem Artikel getan habe, oder ein IE-spezifisches Stylesheet verwenden und es im gleichen Stil wie die gängigste Browserbreite gemäß den Analysen gestalten.
Beachten Sie, dass die Erfahrungen bei einzelnen Abfragetypen variieren können. Zum Beispiel unterstützt das iPhone die Breitenabfragen, aber nicht die Orientierungsabfragen. Das iPad unterstützt beides.
Mehr über Media Queries
Die Messung der Breite ist ein gutes praktisches Beispiel für Media Queries, aber es ist nicht das Einzige, was verfügbar ist. Unten sind einige weitere Beispiele (keine vollständige Liste). Die Spezifikation listet noch viel mehr auf.
Typen
HTML4 hatte diese Medientypen, die alle noch gültig sind:aural, braille, handheld, drucken, projection, screen, tty, undtv. HTML5 kann mehr aufnehmen, wenn es benötigt wird. Die Spezifikation enthält „3d-glasses“, was großartig ist. DerallSchlüsselwort wird alle Typen ansprechen.
@media screen, projection { ... }
Abmessungen
Sie erhaltenheightundwidth, die gegen die aktuelle Höhe und Breite des Browserfensters abfragen. Sie könnten sie direkt verwenden, aber das wäre wahrscheinlich selten. Beide akzeptieren min/max-Präfixe, daher würden Sie sie häufiger alsmin-width, max-width, min-height, max-height.
Es gibt auchdevice-widthunddevice-height, die ebenfalls bietenmin-device-width, max-device-width, min-device-height, undmax-device-height.
@media (min-device-width: 640px) { ... }
Ausrichtung / Seitenverhältnis
Sie können auch das Seitenverhältnis des Bildschirms abfragen mitdevice-aspect-ratio.
@media screen and (device-aspect-ratio: 16/9) { ... }
Oder ob der Bildschirm im Hochformat (Höhe größer als Breite) oder Querformat (Breite größer als Höhe)modus ist.
@media (orientation:portrait) { ... }
Farbe
Sie können abfragen, ob der Bildschirm farbig ist oder nicht und Details dazu.
@media (color) { /* Screen is in color */ }
@media (min-color-index: 256) { /* Screen has at least 256 colors */ }
@media (monochrome) { /* Screen is monochrome */ }
Anderswo
Dies war in letzter Zeit ein heißes Thema. Sie können einige kluge Leute darüber reden hören auf The Big Web Show. Hier sind einige andere coole Verwendungen, die kürzlich aufgetaucht sind:
- Andy Clarke zeigt, wie mit zunehmender Zeilenlänge der Text lesbarer werden kann mit höherer Zeilenhöhe.
- Jon Hicks' Website ordnet sich neu an, um doppelte Seitenleisten, eine einzelne Seitenleiste oder keine Seitenleiste je nach verfügbarem Platz zu haben. Sie skaliert sich auch gut auf mobile Größen.
- Ethan Marcottes Demo für A List Apart verwendet keine Media Queries, zeigt aber andere Möglichkeiten, wie ein Design effektiv flexibel sein kann.
- Simon Collisons Website ordnet sein Raster neu an, um sich an verschiedene Browsergrößen anzupassen.
- Panic verwendet @media in ihren HTML-E-Mails, um sie in Desktop- oder mobilen E-Mail-Clients großartig aussehen zu lassen.
Hervorragende Umsetzung, ich werde mir das für zukünftige Entwicklungen merken.
Ich habe meine Website heute buchstäblich neu gestartet und dabei @media-Abfragen verwendet. Fühlen Sie sich frei, sie zu überprüfen. Das gesamte CSS befindet sich auf der Seite, da es sich um ein Tumblr-Theme handelt.
http://stream.andycroll.com
Das ist eine sehr coole Technik. Ich muss Ihnen Chris zugestehen, die Qualität Ihrer Artikel hat sich in letzter Zeit wirklich verbessert. Machen Sie weiter so!
Gefällt mir die neue "Video Demo" (nicht sicher, ob die neu ist, aber ich habe sie gerade bemerkt).
Danke für den großartigen Tipp!
Sie sollten vielleicht darauf hinweisen, dass CSS Media Queries in IE8 und darunter nicht funktionieren und Teil der aktuellen CSS3-Empfehlung des W3C sind (http://www.w3.org/TR/css3-mediaqueries/).
Das habe ich im Abschnitt "Browser Support" getan.
…zusammen mit anderen Informationen zur Browserunterstützung. =)
Sie sollten vielleicht den gesamten Artikel lesen, bevor Sie kommentieren. ;)
Tony, vielleicht sollten Sie nicht so rüberkommen wie ein Idiot. Oh, zu spät!
Haha, Gold!
Dieses jq-Plugin kann für IE verwendet werden.
http://protofunc.com/scripts/jquery/mediaqueries/
Sehr coole Technik, vielen Dank für die Zusammenstellung.
Obwohl ich diesen raffinierten Trick schon seit geraumer Zeit kannte, muss ich zugeben, dass es mir nie wirklich in den Sinn gekommen ist, dass ich ihn verwenden könnte (sollte).
Es wäre wahrscheinlich interessant, Grid-Layouts (z.B. Blueprint) mit dieser Technik zu sehen. Stellen Sie sich vor: 950px und darüber erhalten das Ganze, alles darunter erhält eine kleinere Version.
Ich setze es definitiv auf meine To-Try-Liste!
Ich mag die Verwendung von Icons; sie sagen viel auf wenig Platz.
Tolle Zusammenfassung. Es gibt Dinge, die ich bisher nicht in Betracht gezogen habe.
Tolle Technik. Danke Chris!
Nette Technik, aber was ist mit der Nutzung in realen Projekten, wo nur sehr wenige Besucher davon profitieren können? Vielleicht in 4-5 Jahren?
http://cg.tutsplus.com/ ist die einzige Website, von der ich weiß, dass sie das verwendet (allerdings mit Skripten).
Ich würde sagen, es ist besser als ein flüssiges Layout, da es mehr Kontrolle über die Platzierung und Größenänderung von Elementen bietet.
Toller Artikel! Danke Chris:)
Toller Artikel! Ich liebe es, Chris!
Beim Panic-Beispiel
Ich habe die Arbeit von Mozilla nicht sehr genau verfolgt und weiß auch nicht viel über die Rendering-Engines in den meisten E-Mail-Clients.
Ich weiß, dass Thunderbird Gecko verwendet, aber ich weiß nicht, welche Version, oder hat jemand Analysen darüber, welche Versionen im Umlauf sind? Verwendet Apple Mail Webkit?
Dies wäre sehr nützlich, aber gibt es eine Ressource im Web, die über E-Mail-Clients spricht, die in der Lage sind, die Detailgenauigkeit zu erreichen, die wir für die wichtigsten Browseranbieter haben?
Grundsätzlich verwenden sie dieselbe Browsing-Engine wie ihre Gegenstücke (äh… Webbrowser).
IE und Outlook = Trident,
Apple Mail = Webkit,
Thunderbird = Gecko.
Weitere Informationen auf The Dot Product. ;)
Ich hasse es, nervig zu sein, aber Outlook verwendet sicherlich NICHT IE/Trident für das HTML-Rendering. Outlook verwendet (warten Sie es ab…) Microsoft Word, um HTML in E-Mails zu rendern, was genau der Grund ist, warum es HTML rendert, als wäre es noch 1996 oder so!
Prost!
Ja, ich habe vergessen zu erwähnen, dass es früher diese Engine hatte.
Wenn Sie sich die Website ansehen, die ich angegeben habe (The Dot Product), steht sogar dort, dass sie jetzt Words Rendering Engine verwenden. ;)
Es gibt ein jQuery-Plugin, das grundlegende Media-Query-Unterstützung in IE/alten Browsern ermöglicht.
http://protofunc.com/scripts/jquery/mediaqueries/
Sie müssen keine zusätzliche Zeile JavaScript-Code schreiben oder seltsame Markups hinzufügen. Das Plugin analysiert einfach das Media-Attribut Ihrer verlinkten Stylesheets und weist dynamisch die richtigen Stylesheets zu.
Das sind einige wirklich clevere Tricks, die einige Möglichkeiten für flüssige Designs eröffnen.
Ich ziehe meinen Hut vor Ihnen!
Wunderbares Tutorial!!! Sehr gute Arbeit!!
Ich möchte, dass Amanda mich auch heiratet :D
Schönes Tutorial! Weiter so!!
!Fantastischer Beitrag!
Danke fürs Teilen!!!
Chris,
Toller Artikel! Ich habe in letzter Zeit viel über Media Queries nachgedacht, daher ist es cool, alles hier klar und prägnant dargestellt zu sehen. Ich bin auch froh, dass Sie die "CSS Content"-Ideen erwähnt haben. Bezüglich der "CSS Content"-Funktion denke ich, dass eine weitere coole (möglicherweise nützlichere) Idee darin besteht, das E-Mail-Symbol in Text zu ändern, wenn Bilder ausgeschaltet sind. Nur meine zwei Cents.
Guter Artikel, meine einzige Kritik ist, dass er nicht erwähnt, dass Media Queries neu in CSS3 sind und daher nur von Browsern, die CSS3 unterstützen, korrekt interpretiert werden, es sei denn, Sie verwenden das JS-Shim, das andere bereits erwähnt haben, um die Unterstützung für ältere Browser zu erweitern.
Danke, werde es auf einer iPhone/iPad-Webansicht versuchen…
Wie üblich, ist das Tutorial genau zum richtigen Zeitpunkt für mein aktuelles Projekt! Gutes Timing!
Sehr cool und danke fürs Teilen, wie viel Arbeit haben Sie investiert? Und das für ein einzelnes Element!
Wenn Sie diese Technik in einem Projekt verwenden, das mehr als eine einzelne Seite umfasst, werden Sie höchstwahrscheinlich dasselbe für viele Elemente tun müssen.
lohnt sich das wirklich??
Die Antwort ist natürlich: **Abhängig**
Wenn Ihnen das die Arbeit erspart, eine komplett andere Version Ihrer Website für zum Beispiel mobile Geräte zu erstellen, dann definitiv **JA**, wenn nicht, wen kümmert's?
Mann, das ist großartig, ich werde das ausprobieren, danke.
Das sind super Sachen. Wirklich. Ich habe mit Überlauf-Eigenschaften experimentiert, um ähnliche Ergebnisse in Schnittstellen zu erzielen…
…aber zu sagen, dass dies gut unterstützt wird, wenn kein aktueller IE dies unterstützt, ist um… nun, es ist vielleicht richtig, wenn Ihre Website nur für Designer ist.
IE hat leider einen riesigen Marktanteil und es sieht so aus, als ob er nur langsam abnehmen wird http://netmarketshare.com/browser-market-share.aspx?qprid=2
Toller Beitrag, danke, wirklich sehr nützlich. Nochmals vielen Dank.
Nur eine Anmerkung zum letzten Teil des Artikels "Elsewhere"
Ethan Marcottes Demo **verwendet** Media-Queries: in der endgültigen Version des Layouts
http://www.alistapart.com/d/responsive-web-design/ex/ex-site-FINAL.html
Danke Chris für den tollen Beitrag! Wenn ich Ihre Beiträge lese, habe ich das Gefühl, dass ich weiterüben muss. =) Ich wünsche Ihnen alles Gute!
Hallo, danke für den Beitrag, er ist wirklich hilfreich! Aber verwendet http://www.opera.com dasselbe Konzept? Oder verwendet es Grids?
Gibt es einen Grund, warum Sie
@media all and (max-width:...)verwenden, wennallbereits impliziert ist?Ich habe vor ein paar Tagen bemerkt, dass ich
allin jeder@media-Regel verwendet habe und kann nicht herausfinden, warum ich das getan habe. Es scheint bei allen üblich zu sein, vielleicht weiß jemand warum?Sie haben mein Leben gerettet. Sie sind mein Held, Mann. Toller Artikel!!!!
Hallo, ich möchte nach css media print fragen, wozu?
He CSS-Tric, ich mag Chris sehr, Chris ist der Held von CSS. Weiter so, danke, Sir.
Hallo Chris,
Ich weiß, dass dies ein sehr alter Beitrag ist, aber ich muss fragen. Sie haben erwähnt, dass wir auch device-height ansprechen können. Kann ich also das Design an die Höhe des Geräts anpassen? Hat das irgendwelche Fehler? Ich habe device-width erfolgreich genutzt, aber ich möchte wissen, ob device-height eine gute Wahl ist. Ich möchte speziell die Handys mit kleiner Größe ansprechen, insbesondere in der Länge. In meiner Region sind solche Geräte üblich und ich bin gezwungen, mein Layout auch an die Höhe anzupassen. Ich freue mich auf Ihre Antwort.
Danke
Roy M J
Ich bin so froh, diesen Beitrag gefunden zu haben. Das hat meine Wissensbasis total revolutioniert. Du rockst.
Hallo! Ich möchte Ihnen einfach ein großes Lob aussprechen für die
ausgezeichneten Informationen, die Sie hier auf diesem Beitrag haben.
Ich werde bald wieder auf Ihre Website zurückkehren, um mehr zu erfahren.
Hallo Chris,
Ich habe CSS-Tricks unzählige Male genutzt und kürzlich die unglaublich motivierende Rede gehört, die Sie gehalten haben (das Rolling Rock-inspirierte Schreibblockade, arbeite smart, Sass usw.). Ich war mir des responsiven Designs bewusst, aber ich habe normalerweise eine max-width-Eigenschaft verwendet (ich weiß, ich weiß). Sie erklären Media Queries in diesem Artikel wie ein Boss. Wenn Sie sich jemals im Panhandle von West Virginia wiederfinden, glaube ich, dass ich Ihnen mehrere Kisten Rolling Rock schulde!
Toller Beitrag! Irgendwie gruselige Beispiel-E-Mail-Adressen.