CSS
Media QueriesCSS
-Selektoren oder -Dokumente einzuschränken<link>
-Referenzall
screen
für alle Arten von Bildschirmenprint
für Druckausgabespeech
für Sprachassistenzsystemetty
, tv
, projection
, handheld
, braille
, embossed
, aural
width
und height
stehen für die Dimensionen des Viewportsaspect-ratio
für das Seitenverhältnis des Viewportsorientation
für die Ausrichtung des Geräts (portrait
oder landscape
)min
und max
Variantenwidth
stehen auch die Eigenschaften min-width
und max-width
zur Verfügung>
und <
Klammern von HTML
und CSS
vorpointer
Ist das primäre Eingabegerät ein “Zeigegerät” und wie akkurat ist es (none
, coarse
, fine
)?hover
Ist das primäre Eingabegerät in der Lage “über” Elementen zu “schweben”?scripting
Steht eine Skriptsprache (faktisch: JavaScript) zur Verfügung?and
-Operatornot
-Operatorall
angenommenmin-width
und max-width
nutzen stets die ≥
bzw ≤
Operatoren(width: 1024px) and (height: 768px)
screen and (min-width: 1024px) and (min-height: 768px)
screen or ((max-width: 1024px) and (max-height: 768px))
<link>
-Verweisenmedia
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet"
media="(max-width: 300px)"
href="media-query-link-s.css" />
<link rel="stylesheet"
media="(min-width: 301px) and (max-width: 1024px)"
href="media-query-link-m.css" />
<link rel="stylesheet"
media="(min-width: 1025px)"
href="media-query-link-l.css" />
<link rel="stylesheet"
media="print"
href="media-query-link-print.css" />
</head>
<body>
Responsive!
</body>
</html>
body { background-color: red; }
body { background-color: green; }
body { background-color: blue; }
body { color: yellow; }
@media
-Schlüsselwort<h1 class="portrait">Hochformat!</h1>
<h1 class="landscape">Querformat!</h1>
@media screen and (max-width: 300px) {
body { background-color: red; }
}
@media screen and (min-width: 301px) and (max-width: 1024px) {
body { background-color: green; }
}
@media screen and (min-width: 1025px) {
body { background-color: blue; }
}
@media (orientation: portrait) {
.landscape { visibility: hidden; }
}
@media (orientation: landscape) {
.portrait { visibility: hidden; }
}
width: 300px
auf solchen Geräten im Allgemeinen nicht sinnvoll“The reference pixel is the visual angle of one pixel on a device with a pixel density of 96dpi and a distance from the reader of an arm’s length. For a nominal arm’s length of 28 inches, the visual angle is therefore about 0.0213 degrees.”
meta
-Eigenschaft viewport
<meta name="viewport" content="width=device-width, initial-scale=1.0">
width
und height
legen die Größe des Viewports festwidth=device-width
initial-scale
setzt den initialen Zoom-Faktoruser-scalable
(mögliche Werte: on
und off
) kann dem Benutzer die Anpassung des Zooms verweigert werdenminimum-scale
und maximum-scale
lassen sich die Skalierungsmöglichkeiten beschränkenHTML
-Code für alle Anzeigegeräte<header>
Drei Spalten mit Flex
</header>
<div id="flex">
<nav>nav</nav>
<article>article</article>
<aside>aside</aside>
</div>
<footer>footer</footer>
#flex {
display: flex;
}
nav, aside {
width: 200px;
}
article {
flex-grow: 1;
}
body {
background-color: yellow;
}
header, nav, article, aside, footer {
background: lightgray;
border: 1px solid black;
padding: 10px;
}
nav, article, aside {
min-height: 100px;
}
#flex {
display: flex;
}
@media (min-width: 601px) {
nav, aside {
width: 200px;
}
article {
flex-grow: 1;
}
}
@media (max-width: 600px) {
#flex {
flex-direction: column;
}
}
<header>
Drei Spalten mit Flex
</header>
<div id="flex">
<nav>nav</nav>
<article>article</article>
<aside>aside</aside>
</div>
<footer>footer</footer>
CSS
-Klassen für Zeilen und SpaltenCSS
-Klassen bietet größtmögliche FlexibilitätCSS
-Gridsmin-width
und max-width
eingesetzt werden?CSS
-Variablen, deren Unterstützung ist im Moment allerdings noch nicht ausreichend fortgeschritten.
phone
(< 576px), tablet
(> 576px) und desktop
(> 992px)flex-wrap
<div class="row">
Zeile 1
</div>
<div class="row">
Zeile 2
</div>
.row {
display: flex;
flex-wrap: wrap;
}
flex-grow
-Eigenschaft, aber:CSS
-Regeln können nicht parametrisiert werden, daher müssen für alle verfügbaren Breiten eigene Regeln geschrieben werden.row {
display: flex;
flex-wrap: wrap;
}
.col-1 { width: calc(1 * (100% / 6)); }
.col-2 { width: calc(2 * (100% / 6)); }
.col-3 { width: calc(3 * (100% / 6)); }
.col-4 { width: calc(4 * (100% / 6)); }
.col-5 { width: calc(5 * (100% / 6)); }
.col-6 { width: calc(6 * (100% / 6)); }
/* Optische Hervorhebung */
[class^="col-"] {
background-color: yellow;
box-sizing: border-box;
border: 1px solid red;
}
<div class="row">
<div class="col-6">.col-6</div>
<div class="col-5">.col-5</div>
<div class="col-1">.col-1</div>
<div class="col-4">.col-4</div>
<div class="col-2">.col-2</div>
<div class="col-2">.col-2</div>
<div class="col-2">.col-2</div>
<div class="col-2">.col-2</div>
<div class="col-2">.col-2</div>
<div class="col-1">.col-1</div>
<div class="col-5">.col-5</div>
<div class="col-4">.col-4</div>
<div class="col-3">.col-3</div>
<div class="col-4">.col-4</div>
</div>
CSS
-Regeln wurden für Desktop- oder Tablet-Geräte dupliziert.row {
display: flex;
flex-wrap: wrap;
}
@media (min-width: 992px) {
.col-desktop-1 { width: calc(1 * (100% / 6)); }
.col-desktop-2 { width: calc(2 * (100% / 6)); }
.col-desktop-3 { width: calc(3 * (100% / 6)); }
.col-desktop-4 { width: calc(4 * (100% / 6)); }
.col-desktop-5 { width: calc(5 * (100% / 6)); }
.col-desktop-6 { width: calc(6 * (100% / 6)); }
}
@media (min-width: 576px) and (max-width: 991px) {
.col-tablet-1 { width: calc(1 * (100% / 6)); }
.col-tablet-2 { width: calc(2 * (100% / 6)); }
.col-tablet-3 { width: calc(3 * (100% / 6)); }
.col-tablet-4 { width: calc(4 * (100% / 6)); }
.col-tablet-5 { width: calc(5 * (100% / 6)); }
.col-tablet-6 { width: calc(6 * (100% / 6)); }
}
@media (max-width: 575px) {
.col-tablet-1, .col-tablet-2, .col-tablet-3,
.col-tablet-4, .col-tablet-5, .col-tablet-6,
.col-desktop-1, .col-desktop-2, .col-desktop-3,
.col-desktop-4, .col-desktop-5, .col-desktop-6 {
width: 100%;
}
}
display
auf den Wert none
setzenURL
wird von einigen Browsern nicht mit vermerkt<picture>
-Element in Kombination mit Media-Queries<picture>
<source srcset="/assets/screenshot/game-high.png"
media="(min-width: 1000px)">
<source srcset="/assets/screenshot/game-low.png"
media="(max-width: 400px)">
<img src="/assets/screenshot/game-mid.png">
</picture>