À l'échelle une image de maximiser l'ajustement de l'espace disponible et le centre
Je suis la construction d'une seule page de l'application. Dans l'un des points de vue, je veux montrer une image qui doit prendre autant d'espace disponible que possible:
- le plus important: il doit garder le ratio d'aspect
- il ne doit pas être coupée de
- il doit être étiré horizontalement et/ou verticalement (sans changer l'aspect ratio) pour couvrir le maximum d'espace possible
- la taille de l'image et de la fenêtre d'affichage ne sont pas connus
- il doit être centré
- pas de js doit être utilisé
- l'élément doit être un
img
élément et pas de fond doit être utilisé - j'ai déjà un arrière-plan (dans le conteneur)
Par exemple, disons que l'image est 100px x 100px, et que nous avons un conteneur de 500px x 300px. L'image est ensuite étiré à 300px x 300px, et centrée horizontalement de sorte que 100px sont de gauche comme de rembourrage sur les deux côtés.
Est-ce possible?
Voici ma non-fini code de ce que je suis en train d'accomplir.
CSS:
.container1 {
width: 500px;
height: 300px;
border: 2px;
border-color: red;
border-style: solid;
}
.container2 {
width: 300px;
height: 500px;
border: 2px;
border-color: blue;
border-style: solid
}
.fill-vertical {
border: 2px;
border-style: solid;
border-color: green;
display: block;
max-width: 100%;
}
.fill-horizontal {
width: 100%;
border: 2px;
border-style: solid;
border-color: green;
}
HTML:
<h1>Container 1, 500px x 300px, not filled</h1>
<div class="container1">
<img src="http://files.giercownia.pl/upload/avatars/r/ravax.png?v=0">
</div>
<h1>Container 1, filled vertically (should be horizontally centered)</h1>
<div class="container1">
<img class="fill-vertical" src="http://files.giercownia.pl/upload/avatars/r/ravax.png?v=0">
</div>
<h1>Container 300px x 500px, not filled</h1>
<div class="container2">
<img class="fillIt" src="http://files.giercownia.pl/upload/avatars/r/ravax.png?v=0">
</div>
<h1>Container 300px x 500px, filled horizontally, should be vertically centered</h1>
<div class="container2">
<img class="fill-horizontal" src="http://files.giercownia.pl/upload/avatars/r/ravax.png?v=0">
</div>
Dans ce code, je suis obligé d'utiliser une autre classe pour l'image en fonction de si je veux étirer verticalement ou horizontalement, mais en fait, je veux CSS pour faire cela automatiquement: juste un étirement de la classe doit être définie.
En bref ce que je veux CSS à faire est de: extensible en largeur et/ou hauteur pour s'adapter à l'espace disponible, en gardant l'aspect ratio
Vous devez vous connecter pour publier un commentaire.
Ceci peut être réalisé en CSS avec quelques changements
Les changements requis sont:
.centerImage
règle css.overflow: hidden;
assure que l'image ne se renverse le conteneur.position: relative;
est nécessaire que l'enfantimg
aurez besoin pour être en position absolue par rapport au conteneur..centerImage img
règle css.max-height: 100%;
etmax-width: 100%
assure le ratio d'aspect est conservé intact. Réglagebottom
,left
,right
ettop
à0
etmargin: auto;
centres de l'image.centerImage
classe à l'contenantdiv
s..fill-vertical
àheight: 100%;
qui fera leimg
remplir l'espace vertical..fill-horizontal
àwidth: 100%;
qui fera leimg
remplir l'espace horizontal.CSS:
HTML:
http://jsbin.com/bupuwohica/2/
Plus des changements ci-dessus, il est possible de réaliser cela avec la propriété CSS
object-fit
Pour ce faire, vous devez:
object-fit: contain;
à l'imageheight
etwidth
à100%
Le seul inconvénient de cette est un navigateur soutien tandis que Firefox, Chrome, Safari et Opera ont pris en charge pendant un certain temps IE et Edge ne le font pas et nécessite un polyfill ou de secours.
CSS:
HTML:
https://jsfiddle.net/efyey801/
object-fit
est grand et beaucoup plus facile, plus compatibilité du navigateur arrive à un point où il devient utilisable.Voici une façon de le faire, en s'appuyant sur
background-size
. Ce n'utilisezimg
balises, comme nécessaire, mais le visible graphique est chargé comme arrière-plan pour profiter des règles css.CSS:
HTML:
Voici quelques informations sur le background-size: https://developer.mozilla.org/en-US/docs/Web/CSS/background-size
img
balises.Oui c'est tout à fait possible. Il vous suffit de vous assurer que vous avez des "Limites" ou de limites à votre taille max pour X ou horizontal et Y ou des limites verticales. Une fois que vous savez le max dimensions alors vous pouvez faire ces constantes de comparer. La méthode la plus simple que je connaisse est de comparer X et Y en tant que Vecteurs de sorte que vous pouvez voir leur changement. Pour qu'il soit centré est aussi facile en ce moment: