J'ai un div 48x48 et à l'intérieur il y a un élément img, je veux l'insérer dans le div sans perdre aucune partie, en attendant le rapport est conservé, est-ce réalisable en utilisant html et css?
136
Vous aurez besoin de JavaScript pour empêcher le recadrage si vous ne connaissez pas la dimension de l'image au moment où vous écrivez le css.
<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%;
}
Si vous utilisez une bibliothèque JavaScript, vous souhaiterez peut-être en profiter.
Utilisez
max-height:100%; max-width:100%;
pour l'image à l'intérieur du div.la source
overflow:scroll
div avec une grande image. Curieuse. Encore plus étrange: la solution de Max le corrige. J'en ai assez du CSS, vraiment. Utilisé pour être puissant et cool. Maintenant, les implémentations produisent simplement une incohérence boguée après une incohérence boguée.Malheureusement max-width + max-height ne couvrent pas entièrement ma tâche ... J'ai donc trouvé une autre solution:
Pour enregistrer le rapport d'image lors de la mise à l'échelle, vous pouvez également utiliser la
object-fit
propriété CSS3.Article utile: contrôler les proportions d'image avec CSS3
Mauvaise nouvelle: IE non pris en charge ( puis-je utiliser )
la source
object-fit: cover;
travaillé pour moi. Ici: stackoverflow.com/questions/9071830/…Utilisation de CSS uniquement:
la source
HTML
CSS
Cela fera agrandir l'image pour remplir son parent, dont sa taille est définie dans le
div
CSS.la source
height: 100%
, cela faussera le rapport d'image - l'OP veut maintenir le rapport.J'avais beaucoup de problèmes pour que cela fonctionne, chaque solution que j'ai trouvée ne semblait pas fonctionner.
J'ai réalisé que je devais régler l'affichage div sur flex, donc en gros, voici mon CSS:
la source
Essayez CSS:
la source
Pour moi, le CSS suivant a fonctionné (testé dans Chrome, Firefox et Safari).
Il y a plusieurs choses qui fonctionnent ensemble:
max-height: 100%;
,max-width: 100%;
etheight: auto;
,width: auto;
mettez l'image à l'échelle selon la dimension qui atteint en premier 100% tout en conservant le rapport hauteur / largeurposition: relative;
dans le conteneur etposition: absolute;
dans l'enfant avectop: 50%;
etleft: 50%;
centrer le coin supérieur gauche de l'image dans le conteneurtransform: translate(-50%, -50%);
déplace l'image vers la gauche et le haut de la moitié de sa taille, centrant ainsi l'image dans le conteneurCSS:
la source
Définir la photo comme image d'arrière-plan nous donnera plus de contrôle sur la taille et le placement, laissant la balise img servir un objectif différent ...
Ci-dessous, si nous voulons que le div ait le même rapport hauteur / largeur que la photo, alors placeholder.png est une petite image transparente avec le même rapport hauteur / largeur que photo.jpg. Si la photo est un carré, c'est un espace réservé 1px x 1px, si la photo est une vignette vidéo, c'est un espace réservé 16x9, etc.
Spécifique à la question, utilisez un espace réservé 1x1 pour maintenir le rapport carré de la div, avec une image d'arrière-plan en utilisant
background-size
pour maintenir le rapport hauteur / largeur de la photo.Je l'ai utilisé
background-position: center center;
pour que la photo soit centrée dans le div. (Aligner la photo au centre ou en bas vertical deviendrait moche avec la photo dans la balise img.)Pour éviter une demande supplémentaire http, convertir l'image de l' espace réservé à une donnée: URL .
la source
vous pouvez utiliser la classe "img-fluid" pour une version plus récente, à savoir Bootstrap v4 .
et peut utiliser la classe "img-responsive" pour les anciennes versions comme Bootstrap v3 .
Utilisation : -
balise img avec: -
class = "img-fluide"
src = "..."
la source
Voici une approche entièrement JavaScript. Il redimensionne progressivement une image jusqu'à ce qu'elle s'adapte correctement. Vous choisissez combien de réduire à chaque fois qu'il échoue. Cet exemple le réduit de 10% à chaque fois qu'il échoue:
N'hésitez pas à copier et coller directement.
la source
Ce qui a fonctionné pour moi était:
inline-flex était nécessaire pour empêcher les images de sortir de la division.
la source