Wie kann ich die Funktionalität background-size:cover
eines HTML-Elements wie <video>
oder simulieren <img>
?
Ich möchte, dass es so funktioniert
background-size: cover;
background-position: center center;
javascript
jquery
css
Seron
quelle
quelle
cover
. Siehe Hintergrundgröße 101 unter Link .Antworten:
Dies ist etwas, über das ich mir eine Weile die Haare ausgezogen habe, aber ich bin auf eine großartige Lösung gestoßen, die kein Skript verwendet und mit 5 Zeilen CSS eine perfekte Cover-Simulation auf Video erzielen kann (9, wenn Sie Selektoren und Klammern zählen ). Dies hat 0 Randfälle, in denen es nicht perfekt funktioniert, abgesehen von CSS3-Kompatibilität .
Sie können ein Beispiel siehe hier
Das Problem mit Timothys Lösung ist, dass die Skalierung nicht richtig funktioniert. Wenn das umgebende Element kleiner als die Videodatei ist, wird es nicht verkleinert. Selbst wenn Sie dem Video-Tag eine winzige Anfangsgröße wie 16 x 9 Pixel geben,
auto
wird es auf ein Minimum seiner nativen Dateigröße gezwungen. Mit der derzeit am besten bewerteten Lösung auf dieser Seite war es mir unmöglich, die Videodatei zu verkleinern, was zu einem drastischen Zoomeffekt führte.Wenn das Seitenverhältnis Ihres Videos jedoch bekannt ist, z. B. 16: 9, können Sie Folgendes tun:
Wenn das übergeordnete Element des Videos so eingestellt ist, dass es die gesamte Seite abdeckt (z. B.
position: fixed; width: 100%; height: 100vh;
), wird auch das Video angezeigt.Wenn Sie das Video auch zentrieren möchten, können Sie den todsicheren Zentrierungsansatz verwenden:
Natürlich
vw
,vh
undtransform
sind CSS3, also , wenn Sie brauchen Kompatibilität mit vielen älteren Browsern , werden Sie zu verwenden Skript benötigen.quelle
vh
undvw
mit irgendetwas zu tun haben?jsFiddle
Die Verwendung der Hintergrundabdeckung ist für Bilder in Ordnung, ebenso wie die Breite 100%. Diese sind nicht optimal für
<video>
und diese Antworten sind zu kompliziert. Sie benötigen weder jQuery noch JavaScript, um einen Videohintergrund in voller Breite zu erstellen.Denken Sie daran, dass mein Code einen Hintergrund nicht vollständig mit einem Video wie das Cover abdeckt, sondern das Video so groß macht, wie es sein muss, um das Seitenverhältnis beizubehalten und dennoch den gesamten Hintergrund abzudecken. Überschüssiges Video wird am Seitenrand ausgeblutet. Welche Seiten davon abhängen, wo Sie das Video verankern.
Die Antwort ist ganz einfach.
Verwenden Sie einfach diesen HTML5-Videocode oder etwas in dieser Richtung: (Test auf der ganzen Seite)
Durch die minimale Höhe und minimale Breite kann das Video das Seitenverhältnis des Videos beibehalten, das normalerweise das Seitenverhältnis eines normalen Browsers bei einer normalen Auflösung ist. Überschüssiges Video wird an der Seite der Seite ausgeblutet.
quelle
min-width
odermin-height
den Trick machen.position: absolute; left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%);
.Für einige Browser können Sie verwenden
http://caniuse.com/object-fit
quelle
height: 100%; width: 100%;
.So habe ich das gemacht. Ein funktionierendes Beispiel finden Sie in dieser jsFiddle .
quelle
video { min-width: 100%; min-height: 100%; }
und es funktioniert wie ein Zauber.background-size: cover
Video haben willst .Die anderen Antworten waren gut, aber sie beinhalten Javascript oder sie zentrieren das Video nicht horizontal UND vertikal.
Mit dieser vollständigen CSS-Lösung können Sie ein Video erstellen, das die Hintergrundgröße simuliert: cover property:
quelle
Aufgrund der Antwort und der Kommentare von Daniel de Wit habe ich etwas mehr gesucht. Danke an ihn für die Lösung.
Die Lösung besteht darin,
object-fit: cover;
eine großartige Unterstützung zu verwenden (jeder moderne Browser unterstützt sie). Wenn Sie IE wirklich unterstützen möchten, können Sie eine Polyfüllung wie Objektanpassungsbilder oder Objektanpassung verwenden .Demos:
und mit einem Elternteil:
quelle
object-fit: cover
und verwendenwidth
undheight
auf 100% einstellen, erhalten Sie eine proportional skalierteimg
odervideo
vergrößerte Mitte ohne viel Aufhebens.Die Lösung von M-Pixel ist insofern großartig, als sie das Skalierungsproblem von Timothys Antwort löst (das Video wird vergrößert, aber nicht verkleinert. Wenn Ihr Video also wirklich groß ist, besteht eine gute Chance, dass Sie nur einen kleinen Teil davon vergrößert sehen). Diese Lösung basiert jedoch auf falschen Annahmen in Bezug auf die Größe des Videocontainers, nämlich dass sie notwendigerweise 100% der Breite und Höhe des Ansichtsfensters beträgt. Ich habe einige Fälle gefunden, in denen es bei mir nicht funktioniert hat, und habe mich daher entschlossen, das Problem selbst anzugehen. Ich glaube, ich habe die ultimative Lösung gefunden .
HTML
CSS
Es basiert auch auf dem Verhältnis des Videos. Wenn Ihr Video also ein anderes Verhältnis als 16/9 hat, möchten Sie das Padding-Bottom% ändern. Davon abgesehen funktioniert es sofort. Getestet in IE9 +, Safari 9.0.1, Chrome 46 und Firefox 41.
BEARBEITEN (17. März 2016)
Da ich diese Antwort gepostet habe ich ein kleines CSS - Modul geschrieben sowohl zu simulieren
background-size: cover
undbackground-size: contain
auf<video>
Elemente: http://codepen.io/benface/pen/NNdBMjEs unterstützt verschiedene Ausrichtungen für das Video (ähnlich wie
background-position
). Beachten Sie auch, dass diecontain
Implementierung nicht perfekt ist. Im Gegensatzbackground-size: contain
dazu wird das Video nicht über seine tatsächliche Größe hinaus skaliert, wenn die Breite und Höhe des Containers größer sind, aber ich denke, dass es in einigen Fällen immer noch nützlich sein kann. Ich habe auch Specialsfill-width
undfill-height
Klassen hinzugefügt , mit denen Sie zusammencontain
eine spezielle Mischung auscontain
undcover
... ausprobieren können, und Sie können sie jederzeit verbessern!quelle
object-fit: cover
für FF und Chrome und Ihre Lösung mit Modernizr für IEobject-fit: cover
ist die beste Antwort mit diesem IE, Safari Polyfill.https://github.com/constancecchen/object-fit-polyfill
Sie unterstützt
img
,video
undpicture
Elemente.quelle
CSS und kleine js können das Video den Hintergrund abdecken und horizontal zentrieren.
CSS:
JS: (Binden Sie dies mit Fenstergröße ändern und rufen Sie einmal separat auf)
quelle
Gleich nach unserem langen Kommentarbereich denke ich, dass dies das ist, wonach Sie suchen. Es basiert auf jQuery:
HTML:
JS:
CSS:
Der obige Code verwendet die Breite und Höhe des Browsers. Wenn Sie dies innerhalb eines Div tun, müssen Sie ihn in etwa Folgendes ändern:
Für Div:
HTML:
JS:
CSS:
Ich sollte auch sagen, dass ich nur getestet habe, dass dies Google Chrome ist ... hier ist eine jsfiddle: http://jsfiddle.net/ADCKk/
quelle
Die Top-Antwort verkleinert das Video nicht, wenn Sie Browserbreiten haben, die kleiner als die Breite Ihres Videos sind. Versuchen Sie es mit diesem CSS (wobei #bgvid die ID Ihres Videos ist):
quelle
z-index
notwendig?Ich bin Gunna Post diese Lösung auch, da ich dieses Problem hatte, aber die anderen Lösungen funktionierten nicht für meine Situation ...
Ich denke, um die
background-size:cover;
CSS-Eigenschaft für ein Element anstelle einer Element-Hintergrundbild-Eigenschaft richtig zu simulieren, müssten Sie das Bildseitenverhältnis mit dem aktuellen Windows-Seitenverhältnis vergleichen, also unabhängig von der Größe (und auch für den Fall, dass das Bild ist) größer als breiter) das fenster ist das element füllt das fenster (und zentriert es auch, obwohl ich nicht weiß, ob das eine anforderung war) ....Ich bin mir sicher, dass die Verwendung eines Bildes der Einfachheit halber auch ein Videoelement funktionieren würde.
Rufen Sie zuerst das Seitenverhältnis der Elemente ab (sobald es geladen ist), hängen Sie dann den Fenstergrößenänderungs-Handler an und lösen Sie ihn einmal für die anfängliche Größenänderung aus:
Anschließend sollten Sie in Ihrem Größenänderungs-Handler zunächst bestimmen, ob die Breite oder die Füllhöhe gefüllt werden soll, indem Sie das aktuelle Seitenverhältnis des Fensters mit dem ursprünglichen Seitenverhältnis des Bildes vergleichen.
}}
.gif
ist das viel größer, aber auch unschärfer. Meine Ansicht hat sich geändert, seit ich diese Antwort geschrieben habe. Es ist eine Schande, dass Sie nicht das Beste aus beiden kombinieren können.Dieser Ansatz verwendet nur CSS und HTML. Sie können tatsächlich einfach ein Divs unter dem Video stapeln. Es ist abgedeckt, aber nicht zentriert, während Sie die Größe ändern.
HTML:
CCS:
quelle
@ Versteckte Hobbes
Sie haben eine Prämie für diese Frage für eine reine CSS-Lösung eröffnet, daher werde ich es versuchen. Meine Lösung für ein solches Problem besteht darin, ein festes Verhältnis zu verwenden, um die Höhe und Breite des Videos zu bestimmen. Normalerweise verwende ich Bootstrap, aber ich habe das erforderliche CSS von dort extrahiert, damit es ohne funktioniert. Dies ist ein Code, den ich früher verwendet habe, um unter anderem ein eingebettetes Video mit dem richtigen Verhältnis zu zentrieren. Es sollte auch für
<video>
und<img>
Elemente funktionieren. Es ist das oberste, das hier relevant ist, aber ich habe Ihnen auch die anderen beiden gegeben, da ich sie bereits herumliegen hatte. Viel Glück! :) :)jsfiddle Vollbild Beispiel
quelle
Um den Kommentar von beantworten weotch dass Timothy Ryan Carpenter ‚s Antwort nicht für nicht - Konto
cover
s‘ Zentrieren des Hintergrunds, biete ich diese schnelle CSS fix:CSS:
Durch Hinzufügen dieser beiden Zeilen wird jedes Element zentriert. Noch besser ist, dass alle Browser, die HTML5-Videos verarbeiten können, auch CSS3-Transformationen unterstützen, sodass dies immer funktioniert.
Das komplette CSS sieht so aus.
Ich hätte Timothys Antwort direkt kommentiert, aber ich habe nicht genug Ruf, um dies zu tun.
quelle
Leute, ich habe eine bessere Lösung, es ist kurz und funktioniert perfekt für mich. Ich habe es für Videos verwendet. Und es emuliert perfekt die Cover-Option in CSS.
Javascript
Wenn Sie das if umdrehen, werden Sie enthalten.
Und hier ist die CSS. (Sie müssen es nicht verwenden, wenn Sie keine Mittelpositionierung wünschen. Das übergeordnete Div muss " position: relative " sein.)
CSS
quelle
Ich habe das gerade gelöst und wollte teilen. Dies funktioniert mit Bootstrap 4. Es funktioniert mit,
img
aber ich habe es nicht mit getestetvideo
. Hier ist die HAML und SCSSHAML
SCSS
quelle
Alte Frage, aber falls jemand dies sieht, ist meiner Meinung nach die beste Antwort, das Video in ein animiertes GIF umzuwandeln. Dies gibt Ihnen viel mehr Kontrolle und Sie können es einfach wie ein Bild behandeln. Dies ist auch die einzige Möglichkeit, auf Mobilgeräten zu arbeiten, da Sie Videos nicht automatisch abspielen können. Ich weiß, dass die Frage darin besteht, es in einem
<img>
Tag zu tun , aber ich sehe nicht wirklich den Nachteil, ein<div>
und zu tunbackground-size: cover
quelle
.gif
ist das viel größer, aber auch unschärfer. Meine Ansicht hat sich geändert, seit ich diese Antwort geschrieben habe. Es ist eine Schande, dass Sie nicht das Beste aus beiden kombinieren können.