Seitenverhältnis Medienelemente und intrinsicsize

Avatar of Chris Coyier
Chris Coyier am

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

Wenn Sie ein Element mit Seitenverhältnis-Größe benötigen <div> (oder jedes Element, das Kinder haben kann), können Sie es tun. Der sauberste Weg ist vielleicht ein Pseudo-Element mit benutzerdefinierter Eigenschaftsgröße, das durch Padding-basiert-auf-Breite die korrekte Mindesthöhe durchsetzt.

Aber Medienelemente wie <img> haben keine Kinder. Das <video> Tag ist nicht selbstschließend, aber wenn es unterstützt wird (fast immer), wird der Inhalt durch einen Shadow DOM ersetzt, den Sie nicht kontrollieren. Außerdem sind dies die einzigen beiden Elemente, die "sich an eine externe Ressource anpassen". Wie erzwingen Sie also das Seitenverhältnis für sie, wenn Sie eine variable Breite wie 100% oder 75vw verwenden? Nun, sobald sie geladen sind, haben sie ihr natürliches Seitenverhältnis, das ist also gut. Es bedeutet aber auch, dass sie die Höhe während des Ladens nicht kennen und dies zu Leistungseinbußen durch Reflow führen kann.

Eine Lösung ist, sie in einen Container mit einem Seitenverhältnis zu setzen und sie durch absolute Positionierung in die Ecken zu zwingen. Aber für sich allein sind sie unfähig, sich korrekt an das Seitenverhältnis anzupassen, bis sie geladen sind.

Daher das intrinsicsize Attribut für "alle Bildelementtypen (einschließlich SVG-Bilder) und Videos", das jetzt in der Entwicklung ist.

<img intrinsicsize="400x300" style="width: 100%">

Das Erklärungsdokument ist hilfreich. Der Grund, warum es intrinsicsize und nicht aspectratio ist, liegt daran, dass ein Seitenverhältnis keine so nützlichen oder nutzbaren Informationen liefert. Ich würde mir wünschen, dass es auf jedem Element funktionieren und auch nach CSS gebracht würde.