Ich habe diesen Thread gefunden — Wie dehnt man ein Bild, um ein
Ich habe ein div
mit einer bestimmten Größe und einem Bild darin. Ich möchte stets ausfüllen di
v mit dem Bild, unabhängig davon, ob es sich um ein Quer- oder Hochformat handelt. Und es spielt keine Rolle, ob das Bild abgeschnitten ist (das div selbst hat einen versteckten Überlauf).
Wenn das Bild also ein Hochformat ist, möchte ich das width
sein 100%
und die height:auto
damit es im Verhältnis bleibt. Wenn das Bild im Querformat ist, möchte ich das height
sein 100%
und die width to be
auto`. Klingt kompliziert, oder?
<div class="container">
<img src="some-image.jpg" alt="Could be portrait or landscape"/>
</div>
Da ich nicht weiß, wie das geht, habe ich einfach schnell ein Bild davon erstellt, was ich meine. Ich kann es gar nicht richtig beschreiben.
Also bin ich wohl nicht der Erste, der das fragt. Allerdings konnte ich dazu keine wirkliche Lösung finden. Vielleicht gibt es dafür einen neuen CSS3-Weg – ich denke an Flex-Box. Irgendeine Idee? Vielleicht ist es sogar einfacher als ich erwarte?
Isius
Wenn ich richtig verstehe, was Sie wollen, können Sie die Breiten- und Höhenattribute aus dem Bild lassen, um das Seitenverhältnis und die Verwendung beizubehalten flexbox
um die Zentrierung für Sie zu übernehmen.
.fill {
display: flex;
justify-content: center;
align-items: center;
overflow: hidden
}
.fill img {
flex-shrink: 0;
min-width: 100%;
min-height: 100%
}
<div class="fill">
<img src="https://picsum.photos/id/237/320/240" alt="" />
</div>
Ich habe dies erfolgreich in IE9, Chrome 31 und Opera 18 getestet. Es wurden jedoch keine anderen Browser getestet. Wie immer müssen Sie Ihre speziellen Supportanforderungen berücksichtigen.
-
Im IE9 wird das Bild bei dieser Methode weder vertikal noch horizontal zentriert, sondern oben und links ausgerichtet. i59.tinypic.com/ouo77s.png
– Mike Kormendy
26. Oktober 2014 um 20:05 Uhr
-
Dies hat ein Problem auf dem iPad, es scheint, dass Safari das Bild auf 100 % seiner Höhe dehnt, aber die Eigenschaft „min-width“ nicht beibehält.
– Sean
16. März 2015 um 17:18 Uhr
-
Dies scheint kleine Bilder zu skalieren, um sie zu füllen, aber nicht, um sie anzupassen. Zumindest wenn ich ein großes Bild verwende, zeigt es nur einen winzigen Teil davon.
– Johanneskl
4. Dezember 2015 um 7:59 Uhr
-
Um ein großes Bild passend zu verkleinern, habe ich Folgendes für das Bild verwendet:
.fill img { min-height:100%; min-width: 100%; object-fit: cover; }
– Peter g
16. September 2016 um 18:12 Uhr
-
Superheld! 😀
– Garis M Suero
6. März 2020 um 4:42 Uhr
Hermilton
Es ist ein bisschen spät, aber ich hatte gerade das gleiche Problem und habe es endlich gelöst object-fit: cover
mit Hilfe eines anderen Stackoverflow-Beitrags (https://stackoverflow.com/a/29103071).
img {
object-fit: cover;
width: 50px;
height: 100px;
}
Hoffe, das hilft noch jemandem.
Ps: Funktioniert auch zusammen mit max-height
, max-width
, min-width
und min-height
CSS-Eigenschaften. Es ist besonders praktisch bei der Verwendung von Längeneinheiten wie 100%
oder 100vh
oder 100vw
um den Container oder das ganze Browserfenster zu füllen.
-
ist das eine Crossbrowser-Lösung?
– Kerzenhalter
5. April 2017 um 3:47 Uhr
-
objekttauglich: Abdeckung; funktioniert super! Browserinfo (funktioniert nicht im IE): css-tricks.com/almanac/properties/o/object-fit Fallback-Lösung für IE: medium.com/@primozcigler/… MS arbeitet an der Umsetzung: developer.microsoft.com/en-us/microsoft-edge/platform/status/…
– Kaah
26. Mai 2017 um 21:14 Uhr
-
Ich schätze, ich füge ein hinzu
object-position
Regel zu dieser Klasse wird hier hilfreich sein. Nur eine Randnotiz.– Taha Paksu
5. Februar 2019 um 15:09 Uhr
-
Einfach hinzufügen
width:100%; height :100%;
– Suyash Vashishtha
9. September 2021 um 14:36 Uhr
Arthur Klassen
Alle Antworten unten sind behoben width
und height
wodurch die Lösung “nicht reagiert”.
Um das Ergebnis zu erzielen, aber das Bild reaktionsfähig zu halten, habe ich Folgendes verwendet:
- Platzieren Sie im Behälter ein transparentes GIF-Bild mit dem gewünschten Anteil
- Geben Sie einem Bild-Tag einen Inline-CSS-Hintergrund mit einem Bild, das Sie in der Größe ändern und zuschneiden möchten
.container img{
width: 100%;
height: auto;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
}
<div class="container">
<img style="background-image: url("https://i.imgur.com/XOmNCwY.jpg");" src="img/blank.gif">
</div>
-
Ich habe das Hintergrundbild für die Website meiner gesamten Designportfolio-Firma verwendet, damit ich eine Hintergrundgröße haben konnte: Cover. Jetzt ist meine Bild-SEO völlig durcheinander, weil Hintergrundbilder von Google nicht erkannt werden. Ich wünschte, ich hätte es anders codiert.
– Alex Banmann
21. November 2019 um 2:10 Uhr
-
beste aller Antworten für meinen Fall von Setzen Sie es in eine Zelle in einem Rasterlayout. Es wird durch die horizontale, aber nicht vertikale Dehnung verzerrt, da es einen leeren Raum zur Vermeidung der vertikalen Dehnung schafft (eine Änderung für die Höhe wurde vorgenommen
max-height: 100%;
), einschließlichmax-width:100%
behielt die Proportionen, wie sie ursprünglich im Bild waren, aber wenn sich das Fenster ändert, füllt es sich nicht– Wass
3. Juli 2021 um 2:56 Uhr
maksim1
Das sollte es tun:
img {
min-width: 100%;
min-height: 100%;
width: auto;
height: auto;
}
Eine alte Frage, die aber ein Update verdient, da es jetzt einen Weg gibt.
Die richtige CSS-basierte Antwort ist zu verwenden object-fit: cover
was wie funktioniert background-size: cover
. Die Positionierung würde von übernommen object-position
-Attribut, das standardmäßig zentriert ist.
Aber Es gibt keine Unterstützung dafür in IE / Edge-Browsern oder Android < 4.4.4. Ebenfalls, object-position
wird von Safari, iOS oder OSX nicht unterstützt. Polyfills existieren, Objekt-Fit-Bilder scheint die beste Unterstützung zu geben.
Weitere Einzelheiten zur Funktionsweise der Eigenschaft finden Sie unter Artikel zu CSS-Tricks auf object-fit
zur Erklärung und Demo.
yousoumar
Sie können dies mit CSS-Flex-Eigenschaften erreichen. Bitte beachten Sie den folgenden Code:
.img-container {
border: 2px solid red;
justify-content: center;
display: flex;
flex-direction: row;
overflow: hidden;
}
.img-container .img-to-fit {
flex: 1;
height: 100%;
}
<div class="img-container">
<img class="img-to-fit" src="https://images.pexels.com/photos/8633/nature-tree-green-pine.jpg" />
</div>
Yassine Nacif
Ein einfacher Weg, den ich herausgefunden habe, ist die Verwendung von object-fit: cover
auf dem Bild im Container
<div class="container">
<img class="image" src="https://mymodernmet.com/wp/wp-content/uploads/2020/11/International-Landscape-Photographer-Year-PhotographER-1st-KelvinYuen-2.jpg">
</div>
.image {
height: 100%;
width: 100%;
object-fit: cover
}
.container {
height: 100px; /*Set any dimensions you like*/
width: 50px;
}
Soweit ich getestet habe, funktioniert dies unabhängig von den Abmessungen des zu verwendenden Bildes, und dies erfüllt den “besten Fall”, wie Sie in der Frage angeben, da das Ergebnis vertikal und horizontal zentriert ist.