Responsive Iframes

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Nehmen wir an, Sie möchten die CSS-Tricks-Website in einem <iframe> einbetten. Das würden Sie so machen:

<iframe src="https://css-tricks.de"></iframe>

Ohne weitere Formatierung erhalten Sie ein Rechteck von 300×150 Pixeln. Das ist nicht einmal im User-Agent-Stylesheet enthalten, es ist nur eine magische Sache bei iframes (und Objekten). Das ist mit ziemlicher Sicherheit nicht das, was Sie wollen, daher sehen Sie oft width und height Attribute direkt am iframe selbst (YouTube macht das).

<iframe 
  width="560"
  height="315"
  src="https://css-tricks.de"></iframe>

Diese Attribute sind gut zu haben. Es ist ein erster Schritt, um Platz für den iframe zu reservieren, der dem Endergebnis viel näher kommt. Denken Sie daran, dass Layout-Jank schlecht ist. Aber wir haben noch mehr zu tun, da dies feste Zahlen sind und keine responsivefreundliche Einrichtung.

Der beste Trick für responsive iframes ist derzeit die Erstellung einer "Aspect Ratio Box". Zuerst benötigen Sie ein übergeordnetes Element mit relativer Positionierung. Der iframe ist das untergeordnete Element darin, dem Sie eine absolute Positionierung geben, um den Bereich zu füllen. Der knifflige Teil ist, dass das übergeordnete Element die perfekte Höhe erhält, indem ein Pseudo-Element erstellt wird, das es basierend auf dem Seitenverhältnis auf diese Höhe drückt. Der Sinn der Sache ist, dass das Drücken des Elements auf die richtige Größe ein besseres System ist als das Erzwingen einer bestimmten Höhe. In dem Szenario, in dem der Inhalt darin höher ist als das Seitenverhältnis vorsieht, kann er immer noch wachsen, anstatt überzulaufen.

Ich füge hier eine vollständige Demo ein (die auch für Bilder funktioniert)

Siehe den Pen
Responsive Iframe
von Chris Coyier (@chriscoyier)
auf CodePen.

Jedes Mal, wenn wir mit Seitenverhältnissen zu tun haben, denke ich an eine Zukunft mit besserer Handhabung dafür. Es gibt das experimentelle Attribut intrinsicsize, das ich mir für iframes zusätzlich zu Bildern gut vorstellen kann. Außerdem gibt es das hoffentlich bald existierende aspect-ratio in CSS und die Idee, dass es standardmäßig die Attribute width und height auf dem Element verwendet, was sich hoffentlich auch auf iframes erstrecken würde.