Remarque: Même s'il s'agit de la réponse acceptée, la réponse ci - dessous est plus précise et est actuellement prise en charge dans tous les navigateurs si vous avez la possibilité d'utiliser une image d'arrière-plan.
Non, il n'y a pas de moyen CSS uniquement pour le faire dans les deux sens. Vous pourriez ajouter
.fillwidth {
min-width: 100%;
height: auto;
}
Pour que l'élément an ait toujours une largeur de 100% et ajuste automatiquement la hauteur au rapport hauteur / largeur, ou à l'inverse:
.fillheight {
min-height: 100%;
width: auto;
}
pour toujours mettre à l'échelle la hauteur maximale et la largeur relative. Pour faire les deux, vous devrez déterminer si le rapport hauteur / largeur est supérieur ou inférieur à celui de son conteneur, et CSS ne peut pas le faire.
La raison en est que CSS ne sait pas à quoi ressemble la page. Il définit les règles à l'avance, mais ce n'est qu'après que les éléments sont rendus et que vous savez exactement à quelles tailles et à quels rapports vous avez affaire. Le seul moyen de détecter cela est d'utiliser JavaScript.
Bien que vous ne cherchiez pas de solution JS, j'en ajouterai quand même une si quelqu'un en a besoin. Le moyen le plus simple de gérer cela avec JavaScript est d'ajouter une classe basée sur la différence de ratio. Si le rapport largeur / hauteur de la boîte est supérieur à celui de l'image, ajoutez la classe "fillwidth", sinon ajoutez la classe "fillheight".
$('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>