Gibt es eine reine CSS-Lösung, um ein Bild in einen Begrenzungsrahmen zu skalieren (wobei das Seitenverhältnis beibehalten wird)? Dies funktioniert, wenn das Bild größer als der Container ist:
img {
max-width: 100%;
max-height: 100%;
}
Beispiel:
- Anwendungsfall 1 (funktioniert): http://jsfiddle.net/Jp5AQ/2/
- Anwendungsfall 2 (funktioniert): http://jsfiddle.net/Jp5AQ/3/
Aber ich möchte das Bild vergrößern, bis eine Dimension 100% des Containers beträgt.
- Anwendungsfall 3 (funktioniert nicht): http://jsfiddle.net/Jp5AQ/4/
Antworten:
Hinweis: Obwohl dies die akzeptierte Antwort ist, ist die folgende Antwort genauer und wird derzeit in allen Browsern unterstützt, wenn Sie die Möglichkeit haben, ein Hintergrundbild zu verwenden.
Nein, es gibt keine CSS-Möglichkeit, dies in beide Richtungen zu tun. Sie könnten hinzufügen
Damit das Element immer 100% breit ist und die Höhe automatisch auf das Seitenverhältnis oder umgekehrt skaliert :
immer auf maximale Höhe und relative Breite skalieren. Um beides zu tun, müssen Sie feststellen, ob das Seitenverhältnis höher oder niedriger als der Container ist, und CSS kann dies nicht.
Der Grund ist, dass CSS nicht weiß, wie die Seite aussieht. Es legt vorher Regeln fest, aber erst danach werden die Elemente gerendert und Sie wissen genau, mit welchen Größen und Verhältnissen Sie es zu tun haben. Dies lässt sich nur mit JavaScript erkennen.
Obwohl Sie nicht nach einer JS-Lösung suchen, werde ich trotzdem eine hinzufügen, wenn jemand sie benötigt. Der einfachste Weg, dies mit JavaScript zu handhaben, besteht darin, eine Klasse hinzuzufügen, die auf dem Unterschied im Verhältnis basiert. Wenn das Verhältnis von Breite zu Höhe des Felds größer als das des Bildes ist, fügen Sie die Klasse "Füllbreite" hinzu, andernfalls die Klasse "Füllhöhe".
Code-Snippet anzeigen
quelle
Dank CSS3 gibt es eine Lösung!
Die Lösung besteht darin, das Bild als zu setzen
background-image
und dann aufbackground-size
zu setzencontain
.HTML
CSS
Testen Sie es hier: http://www.w3schools.com/cssref/playit.asp?filename=playcss_background-size&preval=contain
Volle Kompatibilität mit den neuesten Browsern: http://caniuse.com/background-img-opts
Um das Div in der Mitte auszurichten, können Sie diese Variante verwenden:
quelle
<div class=image style="background-image: url('/images/foo.jpg');"></div>
. Alle anderen Stile sollten mit CSS angewendet werden.Hier ist eine hackige Lösung, die ich entdeckt habe:
Dadurch wird das Bild verzehnfacht, aber auf 10% seiner endgültigen Größe beschränkt, wodurch es an den Container gebunden wird.
Im Gegensatz zur
background-image
Lösung funktioniert dies auch mit<video>
Elementen.Interaktives Beispiel:
Code-Snippet anzeigen
quelle
transform-origin: top left
, um das Zuschneiden zu stoppen. / ZombieSagen Sie heute einfach Objektanpassung: enthalten. Support ist alles andere als IE: http://caniuse.com/#feat=object-fit
quelle
object-fit
ist dafür noch in der Entwicklung.object-fit
: stackoverflow.com/a/46456673/474031html:
CSS:
quelle
Sie können dies mit reinem CSS und vollständiger Browserunterstützung erreichen, sowohl für vertikal lange als auch für horizontal lange Bilder gleichzeitig.
Hier ist ein Ausschnitt, der in Chrome, Firefox und Safari funktioniert (sowohl mit
object-fit: scale-down
als auch ohne Verwendung):quelle
Eine andere Lösung ohne Hintergrundbild und ohne Container (obwohl die maximale Größe des Begrenzungsrahmens bekannt sein muss):
Wenn die Verwendung eines Containers erforderlich ist, können die maximale Breite und Höhe auf 100% eingestellt werden:
Dafür hätten Sie so etwas wie:
quelle
In diesem Beispiel wird das Bild proportional gedehnt, um es an das gesamte Fenster anzupassen. Eine Improvisation zum obigen korrekten Code ist hinzuzufügen
$( window ).resize(function(){});
Es gibt zwei if-Bedingungen. Der erste prüft ständig, ob die Bildhöhe kleiner als der div ist, und wendet die
.fillheight
Klasse an, während der nächste die Breite prüft und die.fillwidth
Klasse anwendet . In beiden Fällen wird die andere Klasse mit entfernt.removeClass()
Hier ist das CSS
Sie können ersetzen
100vh
durch ,100%
wenn Sie mit in einem div um das Bild zu strecken. In diesem Beispiel wird das Bild proportional gedehnt, um es an das gesamte Fenster anzupassen.quelle
Möchten Sie nach oben, aber nicht nach unten skalieren?
Dies sperrt jedoch nicht das Seitenverhältnis.
quelle
Ich habe Tabelle verwendet, um Bild in der Box zu zentrieren. Es behält das Seitenverhältnis bei und skaliert das Bild so, dass es sich vollständig in der Box befindet. Wenn das Bild kleiner als das Feld ist, wird es so angezeigt, wie es sich in der Mitte befindet. Der folgende Code verwendet ein Feld mit einer Breite von 40 Pixel und einer Höhe von 40 Pixel. (Ich bin mir nicht ganz sicher, wie gut es funktioniert, da ich es aus einem anderen komplexeren Code entfernt und ein wenig vereinfacht habe.)
CSS:
HTML:
quelle
Der sauberste und einfachste Weg, dies zu tun:
Zuerst etwas CSS:
Der HTML:
Dies sollte den Trick machen!
quelle
Das hat mir geholfen:
Dann auf dem Element (Sie können Javascript oder Medienabfragen verwenden, um die Reaktionsfähigkeit zu erhöhen):
Hoffe das hilft!
quelle
Ich bearbeite meine Antwort, um meine Lösung weiter zu erläutern, da ich eine Abwertung habe.
Mit den oben in CSS gezeigten Stilen zeigt das folgende HTML-Div nun, dass das Bild immer in der Breite passt, und passt das Seitenverhältnis der Höhe zur Breite an. Somit wird das Bild so skaliert, dass es zu einem Begrenzungsrahmen passt, wie in der Frage gestellt.
quelle