Layout & Medienabfragen
AMP unterstützt sowohl Medienabfragen als auch Elementabfragen und verfügt über eine leistungsstarke, integrierte Methode zur Steuerung des Layouts einzelner Elemente. Im Vergleich zur ausschließlichen Verwendung von CSS macht das Attribut layout
es erheblich einfacher, ein responsives Design zu erstellen und damit zu arbeiten.
Responsive Bilder leicht gemacht
Erstelle wie folgt responsive Bilder: Gib width
und height
an, setze das Layout auf responsive
und lege durch srcset
fest, welches Bildobjekt auf unterschiedlichen Bildschirmgrößen verwendet werden soll:
<amp-img src="/img/narrow.jpg" srcset="/img/wide.jpg 640w, /img/narrow.jpg 320w" width="1698" height="2911" layout="responsive" alt="an image"> </amp-img>
Dieses amp-img
Element passt sich automatisch der Breite seines Containerelements an und seine Höhe wird automatisch auf das Seitenverhältnis eingestellt, das durch die vorgegebene Breite und Höhe bestimmt ist. Probiere es aus, indem du die Größe dieses Browserfensters änderst:
amp-img
an: Live Demos bei AMP By Example. Das Attribut "layout"
Mit dem Attribut layout
kannst du ganz einfach steuern, wie ein bestimmtes Element auf dem Bildschirm gerendert werden soll. Viele dieser Dinge sind auch mit reinem CSS machbar – aber sie sind viel schwieriger und erfordern eine Vielzahl von Hacks. Verwende stattdessen das Attribut layout
.
Unterstützte Werte für das Attribut layout
Die folgenden Werte können im Attribut layout
verwendet werden:
Typ des Layouts | Breite/ Höhe erforderlich | Verhalten |
---|---|---|
nodisplay | Nein | Das Element wird nicht angezeigt. Dieses Layout kann auf jedes AMP Element angewendet werden. Die Komponente nimmt auf dem Bildschirm keinen Platz ein, als hätte sie keinen Display Style. Es wird angenommen, dass sich das Element bei einer Benutzeraktion selbst anzeigen kann (z. B. amp-lightbox ). |
fixed | Ja | Das Element hat eine feste Breite und Höhe. Responsivität wird nicht unterstützt. Die einzigen Ausnahmen sind die Elemente amp-pixel und amp-audio . |
responsive | Ja | Das Element wird an die Breite seines Containerelements angepasst und seine Höhe automatisch an das Seitenverhältnis, das durch die Attribute width und height angegeben ist. Dieses Layout funktioniert für die meisten AMP Elemente sehr gut, einschließlich amp-img und amp-video . Der verfügbare Platz ist vom übergeordneten Element abhängig und kann auch mithilfe der CSS Eigenschaft max-width angepasst werden.Hinweis: Elemente mit |
fixed-height | Nur Höhe | Das Element nimmt den verfügbaren Platz ein, behält jedoch eine unveränderte Höhe bei. Dieses Layout eignet sich gut für Elemente wie amp-carousel , bei denen der Inhalt horizontal positioniert ist. Das Attribut width darf nicht vorhanden sein oder muss den Wert auto haben. |
fill | Nein | Das Element nimmt den verfügbaren Platz ein, sowohl Breite als auch Höhe. Mit anderen Worten: Das Layout eines Füllelements entspricht dem übergeordneten Element. Damit ein Element seinen übergeordneten Container füllen kann, musst du sicherstellen, dass der übergeordnete Container "position:relative" oder "position:absolute" angibt. |
container | Nein | Untergeordnete Elemente können die Größe des Elements definieren, ähnlich wie ein normales HTML div . Es wird angenommen, dass die Komponente selbst kein bestimmtes Layout hat, sondern nur als Container agiert. Seine untergeordneten Elemente werden sofort gerendert. |
flex-item | Nein | Das Element und andere Elemente in seinem übergeordneten Element nehmen den verbleibenden Platz des übergeordneten Containers ein, wenn das übergeordnete Element ein flexibler Container ist (d. h. display:flex ). Die Elementgröße wird durch das übergeordnete Element und die Anzahl der anderen Elemente im übergeordneten Element bestimmt (gemäß dem CSS Layout display:flex ). |
intrinsic | Ja | Das Element nimmt den verfübaren Platz ein und passt seine Höhe automatisch an das Seitenverhältnis an, das durch die Attribute width und height vorgegeben ist, bis es die natürliche Größe des Elements oder eine CSS Einschränkung (z. B. max-width) erreicht. Die Attribute width und height müssen vorhanden sein. Dieses Layout funktioniert für die meisten AMP Elemente sehr gut, einschließlich amp-img , amp-carousel usw. Der verfügbare Platz hängt vom übergeordneten Element ab und kann auch mithilfe der CSS Eigenschaft max-width angepasst werden. Dieses Layout unterscheidet sich von responsive durch eine intrinsische Höhe und Breite. Am deutlichsten ist dies an einem schwebenden Element zu erkennen, bei dem das Layout responsive die Größe als 0x0 rendert und das Layout intrinsic eine Vergrößerung auf die kleinste natürliche Größe oder auf die CSS Einschränkung bewirkt. |
Was, wenn Breite und Höhe nicht definiert sind?
amp-pixel
: Breite und Höhe werden standardmäßig auf 0 gesetzt.amp-audio
: Die standardmäßige Breite und Höhe werden vom Browser abgeleitet.
Was, wenn das Attribut layout
nicht angegeben ist?
Wenn das Attribut layout
nicht angegeben ist, versucht AMP, den entsprechenden Wert abzuleiten oder zu schätzen:
Regel | Abgeleitetes Layout |
---|---|
height ist vorhanden und width fehlt oder entspricht auto
| fixed-height |
Die Attribute width oder height und das Attribut sizes sind vorhanden | responsive |
Die Attribute width und height sind vorhanden | fixed |
width und height fehlen | container |
Verwendung von Medienabfragen
CSS Medienabfragen
Verwende @media
, um zu steuern, wie das Seitenlayout aussieht und sich verhält – genau wie du es auf jeder anderen Website tun würdest. Wenn sich die Größe oder Ausrichtung des Browserfensters ändert, werden die Medienabfragen neu ausgewertet und Elemente werden basierend auf den neuen Ergebnissen ausgeblendet oder angezeigt.
Medienabfragen für Elemente
Ein zusätzliches Merkmal des responsiven Designs in AMP ist das Attribut media
. Dieses Attribut kann für jedes AMP Element verwendet werden. Es funktioniert ähnlich wie Medienabfragen in deinem globalen Stylesheet, wirkt sich jedoch nur auf das jeweilige Element auf einer einzelnen Seite aus.
Hier haben wir zum Beispiel zwei Bilder mit sich gegenseitig ausschließenden Medienabfragen.
<amp-img media="(min-width: 650px)" src="wide.jpg" width="527" height="355" layout="responsive"> </amp-img>
Abhängig von der Bildschirmbreite wird das jeweils eine oder andere abgerufen und gerendert.
<amp-img media="(max-width: 649px)" src="narrow.jpg" width="466" height="193" layout="responsive"> </amp-img>