Ich habe ein 48x48 Div und darin befindet sich ein IMG-Element. Ich möchte es in das Div einpassen, ohne einen Teil zu verlieren. In der Zwischenzeit wird das Verhältnis beibehalten. Ist es mit HTML und CSS erreichbar?
136
Sie benötigen JavaScript, um das Zuschneiden zu verhindern, wenn Sie die Dimension des Bildes zum Zeitpunkt des Schreibens des CSS nicht kennen.
<div id="container">
<img src="something.jpg" alt="" />
</div>
<script type="text/javascript">
(function() {
var img = document.getElementById('container').firstChild;
img.onload = function() {
if(img.height > img.width) {
img.height = '100%';
img.width = 'auto';
}
};
}());
</script>
#container {
width: 48px;
height: 48px;
}
#container img {
width: 100%;
}
Wenn Sie eine JavaScript-Bibliothek verwenden, möchten Sie diese möglicherweise nutzen.
Verwenden Sie
max-height:100%; max-width:100%;
für das Bild innerhalb der div.quelle
overflow:scroll
Div mit einem großen Bild befindet. Neugierig. Noch seltsamer: Max 'Lösung behebt das Problem tatsächlich. Ich habe CSS wirklich satt. Früher war es kraftvoll und cool. Jetzt erzeugen Implementierungen nur fehlerhafte Inkonsistenzen nach fehlerhaften Inkonsistenzen.Leider decken max-width + max-height meine Aufgabe nicht vollständig ab ... Also habe ich eine andere Lösung gefunden:
Um das Bildverhältnis während der Skalierung zu speichern, können Sie auch die
object-fit
CSS3-Eigenschaft verwenden.Nützlicher Artikel: Steuern Sie die Bildseitenverhältnisse mit CSS3
Schlechte Nachrichten: IE wird nicht unterstützt ( kann ich verwenden )
quelle
object-fit: cover;
arbeitete für mich. Hier: stackoverflow.com/questions/9071830/…Nur CSS verwenden:
quelle
HTML
CSS
Dadurch wird das Bild erweitert, um das übergeordnete Bild zu füllen, dessen Größe im
div
CSS festgelegt ist.quelle
height: 100%
, da dies das Bildverhältnis verzerrt - das OP möchte das Verhältnis beibehalten.Ich hatte viele Probleme, dies zum Laufen zu bringen. Jede einzelne Lösung, die ich fand, schien nicht zu funktionieren.
Mir wurde klar, dass ich die Div-Anzeige auf Flex einstellen musste, also ist dies im Grunde mein CSS:
quelle
Versuchen Sie CSS:
quelle
Für mich hat das folgende CSS funktioniert (getestet in Chrome, Firefox und Safari).
Es gibt mehrere Dinge, die zusammenarbeiten:
max-height: 100%;
,max-width: 100%;
Undheight: auto;
,width: auto;
machen den img Skala ersten 100% erreicht zu welcher Dimension , während das Seitenverhältnis bleibt dabei erhaltenposition: relative;
im behälter undposition: absolute;
im kind zusammen mittop: 50%;
undleft: 50%;
zentrieren der oberen linken ecke des img im behältertransform: translate(-50%, -50%);
Bewegt das Bild um die Hälfte seiner Größe nach links und oben zurück und zentriert so das Bild im BehälterCSS:
quelle
Wenn Sie das Foto als Hintergrundbild festlegen, haben wir mehr Kontrolle über Größe und Platzierung, sodass das img-Tag einem anderen Zweck dient ...
Wenn wir möchten, dass das div das gleiche Seitenverhältnis wie das Foto hat, ist placeholder.png ein kleines transparentes Bild mit dem gleichen Seitenverhältnis wie photo.jpg. Wenn es sich bei dem Foto um ein Quadrat handelt, handelt es sich um einen Platzhalter im Format 1 x 1 Pixel. Wenn es sich bei dem Foto um ein Miniaturbild des Videos handelt, handelt es sich um einen Platzhalter im Format 16 x 9 usw.
Verwenden Sie für die Frage einen 1x1-Platzhalter, um das quadratische Verhältnis des Div beizubehalten, und ein Hintergrundbild
background-size
, um das Seitenverhältnis des Fotos beizubehalten.Ich habe verwendet,
background-position: center center;
damit das Foto in der Div zentriert wird. (Wenn Sie das Foto in der vertikalen Mitte oder unten ausrichten, wird das Foto im img-Tag hässlich.)Um eine zusätzliche http-Anforderung zu vermeiden, konvertieren Sie das Platzhalterbild in eine Daten-URL .
quelle
Sie können die Klasse "img-fluid" für eine neuere Version verwenden, dh Bootstrap v4 .
und kann die Klasse "img-responsive" für ältere Versionen wie Bootstrap v3 verwenden .
Verwendung : -
img tag mit: -
class = "img-fluid"
src = "..."
quelle
Hier ist ein All-JavaScript-Ansatz. Es skaliert ein Bild schrittweise nach unten, bis es richtig passt. Sie legen fest, um wie viel es bei jedem Ausfall verkleinert werden soll. In diesem Beispiel wird es jedes Mal um 10% verkleinert, wenn es fehlschlägt:
Fühlen Sie sich frei, direkt zu kopieren und einzufügen.
quelle
Was für mich funktioniert hat war:
Inline-Flex war erforderlich, um zu verhindern, dass die Bilder außerhalb des Divs angezeigt werden.
quelle