J'ai le code suivant qui configure un conteneur dont la hauteur change avec la largeur lorsque le navigateur est redimensionné (pour maintenir un rapport hauteur / largeur carré).
HTML
<div class="responsive-container">
<div class="dummy"></div>
<div class="img-container">
<IMG HERE>
</div>
</div>
CSS
.responsive-container {
position: relative;
width: 100%;
border: 1px solid black;
}
.dummy {
padding-top: 100%; /* forces 1:1 aspect ratio */
}
.img-container {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
Comment puis-je aligner verticalement l'IMG à l'intérieur du conteneur? Toutes mes images ont des hauteurs variables et le conteneur ne peut pas avoir une hauteur / hauteur de ligne fixe car il est réactif ... S'il vous plaît aider!
html
css
responsive-design
vertical-alignment
user1794295
la source
la source
Réponses:
Voici une technique pour aligner des éléments en ligne à l'intérieur d'un parent , horizontalement et verticalement en même temps:
Alignement vertical
1) Dans cette approche, nous créons un
inline-block
(pseudo-) élément comme premier (ou dernier) enfant du parent , et définissons saheight
propriété sur100%
pour prendre toute la hauteur de son parent .2) De plus, l'ajout
vertical-align: middle
garde les éléments en ligne (-block) au milieu de l'interligne. Donc, nous ajoutons cette déclaration CSS au premier enfant et à notre élément (l' image ) à la fois.3) Enfin, afin de supprimer le caractère d'espace blanc entre les éléments en ligne (-bloc) , nous pourrions définir la taille de la police du parent à zéro par
font-size: 0;
.Remarque: j'ai utilisé la technique de remplacement d'image de Nicolas Gallagher dans ce qui suit.
Quels sont les bénéfices?
Il n'est pas nécessaire de spécifier explicitement les dimensions de l'élément d'image.
Nous pouvons facilement utiliser cette approche pour aligner un
<div>
élément verticalement également; qui peut avoir un contenu dynamique (hauteur et / ou largeur). Mais notez que vous devez redéfinir lafont-size
propriété dediv
pour afficher le texte intérieur. Démo en ligne .Le résultat
Conteneur réactif
Cette section ne répondra pas à la question car l'OP sait déjà comment créer un conteneur réactif. Cependant, je vais vous expliquer comment cela fonctionne.
Afin de faire changer la hauteur d'un élément de conteneur avec sa largeur (en respectant les proportions), nous pourrions utiliser une valeur de pourcentage pour la
padding
propriété haut / bas .Une valeur de pourcentage sur le remplissage ou les marges haut / bas est relative à la largeur du bloc conteneur.
Par exemple:
Voici la démo en ligne . Commentez les lignes du bas et redimensionnez le panneau pour voir l'effet.
De plus, nous pourrions appliquer la
padding
propriété à un mannequin enfant ou:before
/:after
pseudo-élément pour obtenir le même résultat. Mais notez que dans ce cas, la valeur en pourcentage surpadding
est relative à la largeur de.responsive-container
lui - même.Démo n ° 1 .
Démo # 2 (Utilisation d'un
:after
pseudo-élément)Ajout du contenu
L'utilisation de la
padding-top
propriété crée un espace énorme en haut ou en bas du contenu, à l'intérieur du conteneur .Pour résoudre ce problème, nous avons envelopper le contenu par un élément d'emballage, retirer cet élément du document flux normal en utilisant le positionnement absolu , et enfin développer l'emballage (bu en utilisant
top
,right
,bottom
etleft
propriétés) pour remplir tout l'espace de son parent, le conteneur .Et c'est parti:
Voici la démo en ligne .
Se rassembler tous
Voici la DEMO DE TRAVAIL .
Évidemment, vous pouvez éviter d'utiliser un
::before
pseudo-élément pour la compatibilité du navigateur et créer un élément en tant que premier enfant de.img-container
:DÉMO MISE À JOUR .
Utilisation des
max-*
propriétésAfin de garder l'image à l'intérieur de la boîte dans une largeur inférieure, vous pouvez définir
max-height
etmax-width
propriété sur l'image:Voici la DÉMO MISE À JOUR .
la source
font-size: 0;
!Avec flexbox, c'est facile:
VIOLON
Ajoutez simplement ce qui suit au conteneur d'image:
la source
-webkit-
préfixe, ou essayez une bibliothèque comme prefixfree.js :)Utilisez ce css, car vous en avez déjà le balisage:
Voici un JsBin fonctionnel: http://jsbin.com/ihilUnI/1/edit
Cette solution ne fonctionne que pour les images carrées (car une valeur en pourcentage de la marge supérieure dépend de la largeur du conteneur, pas de la hauteur). Pour les images de taille aléatoire, vous pouvez effectuer les opérations suivantes:
Solution de travail JsBin: http://jsbin.com/ihilUnI/2/edit
la source
Vous pouvez centrer une image, à la fois horizontalement et verticalement, en utilisant
margin: auto
un positionnement absolu. Aussi:la source
Essaye celui-là
la source
.img-container
est absolument positionné - cela est nécessaire pour garder le rapport hauteur / largeur carré / hauteur dynamique.Voici une technique qui vous permet de centrer TOUT contenu à la fois verticalement et horizontalement!
Fondamentalement, vous avez juste besoin de deux conteneurs et assurez-vous que vos éléments répondent aux critères suivants.
Le conteneur extérieur:
display: table;
Le conteneur intérieur:
display: table-cell;
vertical-align: middle;
text-align: center;
La boîte de contenu:
display: inline-block;
Si vous utilisez cette technique, ajoutez simplement votre image (avec tout autre contenu que vous souhaitez accompagner) dans la zone de contenu.
Démo:
Voir aussi ce violon !
la source
Je suis tombé sur ce fil à la recherche d'une solution qui:
En testant certaines des solutions publiées ci-dessus, je n'en ai pas trouvé une répondant à tous ces critères, j'ai donc rassemblé cette solution simple qui pourrait être utile pour d'autres personnes qui doivent faire de même:
Exemple de travail sur JSFiddle
la source
Essayer
HTML
CSS
la source
Code HTML
<div class="image-container"> <img src=""/> </div>
code css
la source
Créez un autre div et ajoutez à la fois 'dummy' et 'img-container' à l'intérieur du div
Faites du HTML et du CSS comme suit
Au lieu de 100% pour le `` conteneur réactif '', vous pouvez donner la hauteur que vous voulez.,
la source