Comment pouvez-vous aligner une image à l'intérieur d'un contenant div
?
Exemple
Dans mon exemple, je dois centrer verticalement le <img>
dans le <div>
avec class ="frame
":
<div class="frame" style="height: 25px;">
<img src="http://jsfiddle.net/img/logo.png" />
</div>
.frame
La hauteur de l'image est fixe et la hauteur de l'image est inconnue. Je peux ajouter de nouveaux éléments .frame
si c'est la seule solution. J'essaye de faire ceci sur Internet Explorer 7 et plus tard, WebKit, Gecko.
Voir le jsfiddle ici .
.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;
}
<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>
css
image
vertical-alignment
Arnaud Le Blanc
la source
la source
Réponses:
Le seul moyen (et le meilleur cross-browser) que je connaisse est d'utiliser un
inline-block
assistant avecheight: 100%
etvertical-align: middle
sur les deux éléments.Il existe donc une solution: http://jsfiddle.net/kizu/4RPFa/4570/
Afficher l'extrait de code
Ou, si vous ne voulez pas avoir d'élément supplémentaire dans les navigateurs modernes et que cela ne vous dérange pas d'utiliser des expressions Internet Explorer, vous pouvez utiliser un pseudo-élément et l'ajouter à Internet Explorer à l'aide d'une expression pratique, qui ne s'exécute qu'une seule fois par élément , il n'y aura donc aucun problème de performances:
La solution avec
:before
etexpression()
pour Internet Explorer: http://jsfiddle.net/kizu/4RPFa/4571/Afficher l'extrait de code
Comment ça fonctionne:
Lorsque vous avez deux
inline-block
éléments l'un à côté de l'autre, vous pouvez les aligner l'un de l'autre,vertical-align: middle
vous obtiendrez donc quelque chose comme ceci:Quand on a un bloc à hauteur fixe (en
px
,em
ou une autre unité absolue), on peut régler la hauteur des blocs intérieurs à%
.inline-block
avecheight: 100%
dans un bloc à hauteur fixe alignerait un autreinline-block
élément à l'intérieur (<img/>
dans votre cas) verticalement près de lui.la source
.frame
et.frame:before
. Une solution proposée ici est d'ajoutermargin-left: -4px
à.frame
. J'espère que cela t'aides.<img src=""/>
n'est PAS à l'intérieur de l'<span></span>
assistant qui a été ajouté. C'est dehors. J'ai presque tiré toutes les mèches de mes cheveux en ne le réalisant pas.Cela pourrait être utile:
la source
position:fixed;
La solution de matejkramny est un bon début, mais les images surdimensionnées ont un mauvais rapport.
Voici ma fourchette:
Démo: https://jsbin.com/lidebapomi/edit?html,css,output
HTML:
CSS:
la source
top: 0;
. Cela se traduit uniquement parbottom: 0;
une application verticale.Une solution à trois lignes:
Cela s'applique à tout.
D' ici .
la source
position: absolute;
parce que vous avez besoin d'une largeur fluide.Une solution CSS pure :
Trucs clés
la source
Pour une solution plus moderne, et s'il n'est pas nécessaire de prendre en charge les navigateurs hérités, vous pouvez le faire:
Voici un stylo: http://codepen.io/ricardozea/pen/aa0ee8e6021087b6e2460664a0fa3f3e
la source
align-self
pour des articles individuelsalign-self
est que les éléments flexibles étireront la hauteur du conteneur parent.De cette façon, vous pouvez centrer une image verticalement ( démo ):
la source
font-size: 0
pourdiv
. Pour les conteneurs assez gros, vous pouvez le manquer, mais si votrediv
est de 100 pixels et que votre img est de 80 pixels, il sera inférieur de quelques pixels.Vous pouvez également utiliser Flexbox pour obtenir le résultat correct:
la source
Il y a une solution super simple avec flexbox!
la source
Vous pouvez essayer de définir le CSS de PI sur
display: table-cell; vertical-align: middle;
la source
PI
"?Vous pouvez essayer le code ci-dessous:
la source
Solution d'image d'arrière-plan
J'ai supprimé complètement l'élément image et je l'ai défini comme arrière-plan du div avec une classe de
.frame
http://jsfiddle.net/URVKa/2/
Cela fonctionne au moins correctement 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 définit la taille de l'élément, mais c'est CSS 3 qui entrerait en conflit avec les exigences d'Internet Explorer 7.Je vous conseillerais de refaire les priorités et la conception de votre navigateur pour les meilleurs navigateurs disponibles, ou d'obtenir du code côté serveur pour redimensionner les images si vous souhaitez utiliser cette solution.
la source
Imaginez que vous avez
Et css:
la source
Vous pouvez faire ceci:
Démo
http://jsfiddle.net/DZ8vW/1
CSS
Javascript
la source
http://jsfiddle.net/MBs64/
La propriété clé est
display: table-cell;
pour.frame
.Div.frame
est affiché en ligne avec cela, vous devez donc l'envelopper dans un élément de bloc.Cela fonctionne dans Firefox, Opera, Chrome, Safari et Internet Explorer 8 (et versions ultérieures).
MISE À JOUR
Pour Internet Explorer 7, nous devons ajouter une expression CSS:
la source
Ma solution: http://jsfiddle.net/XNAj6/2/
la source
Cela fonctionne pour les navigateurs modernes (2016 au moment de l'édition) comme indiqué dans cette démo sur codepen
Il est très important de donner aux images une classe ou d'utiliser l'héritage pour cibler les images dont vous avez besoin centrées. Dans cet exemple, nous avons utilisé de
.frame img {}
sorte que seules les images enveloppées par un div avec une classe de.frame
soient ciblées.la source
Essayez cette solution avec du CSS pur http://jsfiddle.net/sandeep/4RPFa/72/
C'est peut-être le principal problème avec votre code HTML. Vous n'utilisez pas de guillemets lorsque vous définissez c
lass
&image height
dans votre code HTML.CSS:
Lorsque je travaille avec la
img
balise, cela laisse 3 pixels à 2 pixels d'espacetop
. Maintenant je diminueline-height
et ça marche.CSS:
La
line-height
propriété est rendue différemment dans différents navigateurs. Nous devons donc définir différentsline-height
navigateurs de propriétés.Vérifiez cet exemple: http://jsfiddle.net/sandeep/4be8t/11/
Vérifiez cet exemple sur
line-height
les différents navigateurs: différences de hauteur d'entrée dans Firefox et Chromela source
Je ne suis pas sûr d'Internet Explorer, mais sous Firefox et Chrome, si vous en avez un
img
dans undiv
conteneur, le contenu CSS suivant devrait fonctionner. Du moins pour moi ça marche bien:la source
display:table-cell;
n'accepte pas le% comme largeursSolution utilisant un tableau et des cellules de tableau
Parfois, il devrait être résolu en affichant sous forme de tableau / cellule de tableau. Par exemple, un écran de titre rapide. C'est également une méthode recommandée par W3. Je vous recommande de vérifier ce lien appelé Centrage d'un bloc ou d'une image de W3C.org.
Les conseils utilisés ici sont:
Personnellement, je ne suis pas d'accord sur l'utilisation des aides à cette fin.
la source
Une manière simple qui fonctionne pour moi:
Cela fonctionne très bien pour Google Chrome. Essayez celui-ci dans un autre navigateur.
la source
Pour centrer une image à l'intérieur d'un conteneur (il peut s'agir d'un logo) en plus d'un texte comme celui-ci:
Fondamentalement, vous enveloppez l'image
la source
Si vous pouvez vivre avec des marges de la taille d'un pixel, ajoutez simplement
font-size: 1px;
à la.frame
. Mais souvenez-vous que maintenant.frame
1em = 1px, ce qui signifie que vous devez également définir la marge en pixels.http://jsfiddle.net/feeela/4RPFa/96/
Maintenant ce n'est plus centré sur Opera…
la source
J'ai eu le même problème. Cela fonctionne pour moi:
la source
Vous pouvez utiliser ceci:
la source
L'utilisation
table
et latable-cell
méthode font le travail, spécialement parce que vous ciblez également d'anciens navigateurs, je crée un extrait pour vous que vous pouvez exécuter et vérifier le résultat:la source
J'ai joué avec l'utilisation du rembourrage pour l'alignement central. Vous devrez définir la taille du conteneur externe de niveau supérieur, mais le conteneur interne doit être redimensionné et vous pouvez définir le remplissage à différentes valeurs de pourcentage.
jsfiddle
la source
La meilleure solution est que
la source
Utilisez celui-ci:
Et vous pouvez varier
font-size
.la source
Vous voulez aligner une image qui a après un texte / titre et les deux sont à l'intérieur d'une div?
Voir sur JSfiddle ou Run Code Snippet.
Assurez-vous simplement d'avoir un ID ou une classe sur tous vos éléments (div, img, title, etc.).
Pour moi, cette solution fonctionne sur tous les navigateurs (pour les appareils mobiles, vous devez adapter votre code avec: @media).
la source