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
.fillwidth {
min-width: 100%;
height: auto;
}
Damit das Element immer 100% breit ist und die Höhe automatisch auf das Seitenverhältnis oder umgekehrt skaliert :
.fillheight {
min-height: 100%;
width: auto;
}
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".
$('div').each(function() {
var fillClass = ($(this).height() > $(this).width())
? 'fillheight'
: 'fillwidth';
$(this).find('img').addClass(fillClass);
});
.fillwidth {
width: 100%;
height: auto;
}
.fillheight {
height: 100%;
width: auto;
}
div {
border: 1px solid black;
overflow: hidden;
}
.tower {
width: 100px;
height: 200px;
}
.trailer {
width: 200px;
height: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="tower">
<img src="http://placekitten.com/150/150" />
</div>
<div class="trailer">
<img src="http://placekitten.com/150/150" />
</div>