Note : Même si c'est la réponse acceptée, la réponse ci-dessous est plus précis et est actuellement pris en charge par tous les navigateurs si vous avez la possibilité d'utiliser une image de fond.
Edit 2 : Dans l'ère moderne, utiliser object-fit
pourrait être une solution encore meilleure : https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit
Non, il n'existe pas de méthode CSS permettant de faire cela dans les deux sens. Vous pourriez ajouter
.fillwidth {
min-width: 100%;
height: auto;
}
Pour qu'un élément ait toujours une largeur de 100 % et que sa hauteur soit automatiquement adaptée au rapport d'aspect, ou l'inverse :
.fillheight {
min-height: 100%;
width: auto;
}
pour que la hauteur maximale et la largeur relative soient toujours respectées. Pour faire les deux, vous devez déterminer si le rapport hauteur/largeur est supérieur ou inférieur à celui de son conteneur, ce que les CSS ne peuvent pas faire.
La raison en est que CSS ne sait pas à quoi ressemble la page. Il définit des règles au préalable, mais ce n'est qu'ensuite 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 le JavaScript.
Bien que vous ne recherchiez pas une solution JS, je vais quand même en ajouter une si quelqu'un en a besoin. La façon la 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 du cadre 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>
0 votes
Vous voulez dire par exemple height : 100% et width : 100% ? Avez-vous une dimension souhaitée que vous voulez atteindre ? Sinon, vous pouvez aussi étirer l'image et la forcer à atteindre ces dimensions.
0 votes
@mikevoermans Regardez mes deux premiers exemples : Je veux étirer l'image jusqu'à ce que l'une des dimensions soit de 100% et l'autre de <=100%.
0 votes
@jacktheripper En conservant l'aspect-ratio bien sûr...
0 votes
@gryzzly Les exemples parlent d'eux-mêmes ! S'ils avaient regardé les exemples, c'était évident.
0 votes
@Artimuz Je ne suis pas du tout d'accord. Trois des réponses à vos questions (y compris la mienne) suggèrent que ce n'était PAS évident.