Comment aligner verticalement une image dans une div
Comment pouvez-vous vous aligner une image à l'intérieur d'un contenant div
?
Exemple
Dans mon exemple, j'ai besoin de la verticale du centre de la <img>
dans le <div>
avec class ="frame
":
<div class="frame" style="height: 25px;">
<img src="http://jsfiddle.net/img/logo.png" />
</div>
.frame
hauteur est fixe et l'image en hauteur est inconnue. Je peux ajouter de nouveaux éléments dans .frame
si c'est la seule solution. Je suis en train de le faire sur Internet Explorer 7 et plus tard, WebKit, Gecko.
Voir le jsfiddle ici.
CSS:
.frame {
height: 25px; /* Equals maximum image height */
line-height: 25px;
width: 160px;
border: 1px solid red;
text-align: center;
margin: 1em 0;
}
img {
background: #3A6F9A;
vertical-align: middle;
max-height: 25px;
max-width: 160px;
}
HTML:
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=250 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=25 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=23 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=21 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=19 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=17 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=15 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=13 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=11 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=9 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=7 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=5 />
</div>
<div class=frame>
<img src="http://jsfiddle.net/img/logo.png" height=3 />
</div>
- Bonjour, désolé mais je suis en désaccord au sujet de l'utilisation d'un helper ici étant le plus valorisé solution. Mais Ce n'est pas la seule façon. D'autres sont même pris en charge par les navigateurs. Je vous propose une solution ici stackoverflow.com/a/43308414/7733724 et W3C.org sur info. Vous pouvez le vérifier. Cheers
- La lecture de Centrage des Choses de l'article sur le W3C va être utile: w3.org/Style/Examples/007/center.en.html
- Guide parfait pour aligner css-tricks.com/centering-css-complete-guide
Vous devez vous connecter pour publier un commentaire.
Le seul (et le meilleur de la croix-navigateur) façon que je sais, c'est d'utiliser un
inline-block
helper avecheight: 100%
etvertical-align: middle
sur les deux éléments.Alors il existe une solution: http://jsfiddle.net/kizu/4RPFa/4570/
CSS:
HTML:
Ou, si vous ne voulez pas avoir un élément supplémentaire dans les navigateurs modernes et n'ont pas l'esprit à l'aide d'Internet Explorer les expressions, vous pouvez utiliser un pseudo-élément et l'ajouter à Internet Explorer à l'aide d'une expression pratique, qui s'exécute qu'une seule fois par élément, donc il n'y aura pas des problèmes de performances:
La solution avec
:before
etexpression()
pour Internet Explorer: http://jsfiddle.net/kizu/4RPFa/4571/CSS:
HTML:
Comment cela fonctionne:
Lorsque vous avez deux
inline-block
éléments à proximité les uns des autres, vous pouvez les aligner les uns à l'autre côté, donc, avecvertical-align: middle
, vous obtiendrez quelque chose comme ceci:Lorsque vous avez un bloc avec une hauteur fixe (en
px
,em
ou d'autres absolue de l'unité), vous pouvez régler la hauteur des blocs intérieurs dans%
.inline-block
avecheight: 100%
dans un bloc avec hauteur fixe permettrait d'aligner un autreinline-block
élément (<img/>
dans votre cas) à la verticale près d'elle.:before
+expression()
, dans le passé, j'ai toujours collé à avoir un élément supplémentaire. Je ne m'inquiète pas sur IE6/7 avec le JavaScript désactivé, donc je vais probablement utiliser cette technique à l'avenir..frame
et.frame:before
. Une solution proposée ici c'est pour ajoutermargin-left: -4px
à.frame
. Espérons que cette aide.<img src=""/>
n'est PAS à l'intérieur de la<span></span>
helper qui a été ajouté. Il est à l'extérieur. J'ai juste tiré sur chaque mèche de mes cheveux, de notre en ne se rendant pas compte de cela.display: inline-block;
à mon image CSS comme décrit dans le texte ci-dessus l'extrait de code - mais pas réellement dans l'extrait de code.Ce qui peut être utile:
Référence: http://www.student.oulu.fi/~laurirai/www/css/moyen/
position:fixed;
matejkramny de la solution est un bon début, mais surdimensionné images ont un mauvais rapport.
Voici ma fourchette:
Démo: https://jsbin.com/lidebapomi/edit?html,css,sortie
HTML:
CSS:
top: 0;
. Il en résulte que dansbottom: 0;
être appliquée verticalement.Un trois-solution en ligne:
Cela s'applique à n'importe quoi.
De ici.
position: absolute;
parce que vous avez besoin d'un écoulement de largeur.Un pur CSS solution:
http://jsfiddle.net/3MVPM/
Le CSS:
Clé trucs
Pour une solution plus moderne, et si il n'est pas nécessaire pour soutenir les anciens navigateurs, vous pouvez le faire:
CSS:
HTML:
Voici un Stylo: http://codepen.io/ricardozea/pen/aa0ee8e6021087b6e2460664a0fa3f3e
align-self
pour les éléments individuelsalign-self
est que le flex éléments tronçon de la hauteur du conteneur parent.De cette façon, vous pouvez centrer une image à la verticale (démo):
font-size: 0
pourdiv
. Pour les très grands conteneurs, vous pouvez le manquer, mais si votrediv
est 100px et img est 80px il faudra quelques pixels plus bas.line-height
a fait le tour pour moiimg { position: absolute; }
, mes images de sortir de table/div. Et oui comme @Savage dit,line-height
a fait le tour. et aussivertical-align: middle;
de l'élément img. Donc, pour lediv { height, line-height }
et pour leimg { max-height, max-width, vertical-align }
sont mes attributs requis.Aussi, vous pouvez utiliser Flexbox pour obtenir le résultat correct:
CSS:
HTML:
Vous pouvez essayer le réglage de la CSS de PI à
display: table-cell; vertical-align: middle;
PI
"?Il y a un super facile solution avec flexbox!
Vous pouvez essayer le code ci-dessous:
CSS:
HTML:
Image d'arrière-plan solution
J'ai enlevé l'image de l'élément purement et simplement et de le définir comme arrière-plan de la div avec une classe de
.frame
http://jsfiddle.net/URVKa/2/
Au moins fonctionne très bien sur Internet Explorer 8, Firefox 6 et Chrome 13.
J'ai vérifié, et cette solution ne fonctionnera pas pour réduire les images de plus de 25 pixels de hauteur. Il y a une propriété appelée
background-size
qui ne définissez la taille de l'élément, mais c'est le CSS 3 qui serait en conflit avec Internet Explorer 7 exigences.Je vous conseille soit de refaire votre navigateur priorités et de la conception des meilleurs navigateurs, ou obtenir de code côté serveur pour redimensionner les images si vous voulez utiliser cette solution.
Vous pourriez faire ceci:
Démo
http://jsfiddle.net/DZ8vW/1
CSS
JavaScript
http://jsfiddle.net/MBs64/
La propriété est
display: table-cell;
pour.frame
.Div.frame
est affiché en ligne, alors vous avez besoin d'envelopper dans un élément de type block.Cela fonctionne dans Firefox, Opéra, Chrome, Safari et Internet Explorer 8 (et plus tard).
Mise à JOUR
Pour Internet Explorer 7 nous avons besoin d'ajouter un CSS expression:
D'essayer cette solution avec de la pure CSS http://jsfiddle.net/sandeep/4RPFa/72/
C'est peut-être le principal problème avec votre code HTML. Vous n'êtes pas à l'aide de guillemets lorsque vous définissez c
lass
&image height
dans votre code HTML.CSS:
Quand je travaille avec les
img
tag, il en laissant 3 pixels à 2 pixels espace detop
. Maintenant, je baisseline-height
, et ça fonctionne.CSS:
La
line-height
propriété est rendue différemment dans les différents navigateurs. Donc, nous avons à définir les différentsline-height
propriété navigateurs.Vérifier cet exemple: http://jsfiddle.net/sandeep/4be8t/11/
Vérifier cet exemple sur
line-height
différentes dans les différents navigateurs: entrée différences de hauteur dans Firefox et ChromeJe ne suis pas sûr au sujet de l'Internet Explorer, mais sous Firefox et Chrome, si vous avez un
img
dans undiv
conteneur, le code CSS suivant le contenu devrait fonctionner. Au moins pour moi ça fonctionne bien:display:table-cell;
n'accepte pas l' % comme largeursMa solution: http://jsfiddle.net/XNAj6/2/
Cela fonctionne pour les navigateurs modernes (2016 au moment de la modifier), comme indiqué dans démo sur codepen
Il est très important que vous donner les images d'une classe ou d'utiliser l'héritage pour cible les images que vous avez besoin centré. Dans cet exemple nous avons utilisé
.frame img {}
de sorte que seules les images enveloppé par un div avec une classe de.frame
serait ciblé.Un moyen facile qui fonctionnent pour moi:
Il travaille pour Google Chrome très bien. Essayez celui-ci dans un autre navigateur.
Solution à l'aide d'un tableau et des cellules de tableau
Parfois, il doit être résolu par l'affichage de table/table-cell. Par exemple, une recherche rapide sur l'écran titre. C'est une méthode recommandée par W3 aussi. Je vous recommande de vérifier ce lien appelé Centrer un bloc ou d'une image de W3C.org.
Les astuces utilisées ici sont:
CSS:
HTML:
Personnellement je l'ai fait en désaccord à propos de l'utilisation des aides pour ce but.
Pour centrer une image à l'intérieur d'un conteneur (cela peut être un logo) en plus du texte comme ceci:
Fondamentalement, vous envelopper l'image
CSS:
HTML:
Si vous pouvez vivre avec des pixels de la taille des marges, il suffit d'ajouter
font-size: 1px;
à la.frame
. Mais rappelez-vous, maintenant sur le.frame
cadratin (1 em = 1px, ce qui signifie, vous devez définir la marge de pixels.http://jsfiddle.net/feeela/4RPFa/96/
Maintenant, il n'est pas centré dans l'Opéra...
À l'aide de
table
ettable-cell
méthode de faire le travail, spécialement parce que vous le ciblage de certains vieux navigateurs ainsi, j'ai créer un extrait de code pour vous que vous pouvez l'exécuter et vérifier le résultat:CSS:
HTML:
J'ai eu le même problème. Cela fonctionne pour moi:
Vous pouvez utiliser ceci:
J'ai été jouer avec l'aide de rembourrage pour alignement au centre. Vous aurez besoin de définir le niveau supérieur externe de la taille du conteneur, mais le récipient intérieur doit redimensionner, et vous pouvez définir le rembourrage à différentes valeurs de pourcentage.
jsfiddle
La meilleure solution est que
Utiliser celui-ci:
Et vous pouvez varier
font-size
.Voulez aligner une image qui après un texte /titre et les deux sont à l'intérieur d'un div?
Voir sur JSfiddle ou Exécuter du Code Extrait.
Juste être sûr d'avoir un ID ou une classe à l'ensemble de vos éléments (div, img, titre, etc.).
Pour moi fonctionne de cette solution sur tous les navigateurs (pour les appareils mobiles, vous devez adapter votre code: @media).
CSS:
HTML:
Ce code fonctionne bien pour moi.
Juste pour le plaisir de ce être une réponse valable, je veux encore de post jQuery solution à nouveau. Cela fonctionne pour tout élément a de la
v_align
classe qui lui est appliqué. Il sera vertical centré dans le parent et sur le redimensionnement de la fenêtre, il sera recalculé.Lien vers le JSFiddle
Vous pouvez utiliser le tableau de la structure à l'intérieur d'un div
div
Vous pouvez utiliser un
grid
la mise en page à la verticale du centre de l'image.Cela va créer une 3 ligne 1 colonne de la grille de mise en page avec sans nom 1 fraction de large entretoises en haut et en bas, et une zone nommée
img
deauto
hauteur (la taille du contenu).La
img
va utiliser l'espace qu'il préfère, et les bagues en haut et en bas va exploiter le reste de la hauteur de la séparation en deux fractions égales, résultant dans laimg
élément à être centrée verticalement.http://jsfiddle.net/Kissaki0/4RPFa/20713/
Je cherchais une réponse similaire et certaines des suggestions cassé l'image vers la gauche ou la verticale ratio écrasé l'image, alors je suis venu avec cette solution... Il centre le contenu verticalement et horizontalement.
Je l'utilise sur plusieurs projets et il fonctionne comme un charme.