J'ai une div 200 x 200 px. Je veux placer une image de 50 x 50 px en plein milieu du div.
Comment ceci peut être fait?
Je suis capable de le centrer horizontalement en utilisant text-align: center
pour le div. Mais l'alignement vertical est le problème ..
Personnellement, je le placerais comme image d’arrière-plan dans la div, le CSS pour cela:
#demo {
background: url(bg_Apple_little.gif) no-repeat center center;
height: 200px;
width: 200px;
}
(Suppose qu'un div avec id="demo"
étant donné que vous spécifiez déjà height
et width
l'ajout d'un background
ne devrait pas être un problème.)
Laissez le navigateur prendre la tension.
Travailler dans les anciens navigateurs (IE> = 8)
La position absolue en combinaison avec la marge automatique permet de centrer un élément horizontalement et verticalement. La position de l'élément peut être basée sur une position de l'élément parent en utilisant un positionnement relatif. voir le résultat
img {
position: absolute;
margin: auto;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
une autre méthode consiste à créer une table
avec valign
, bien sûr. Cela fonctionnerait indépendamment du fait que vous connaissiez ou non la hauteur de la div.
<div>
<table width="100%" height="100%" align="center" valign="center">
<tr><td>
<img src="foo.jpg" alt="foo" />
</td></tr>
</table>
</div>
mais vous devriez toujours vous en tenir à css
autant que possible.
Je définirais votre plus grande div avec position:relative;
puis pour votre image, procédez comme suit:
img.classname{
position:absolute;
top:50%;
left:50%;
margin-top:-25px;
margin-left:-25px;
}
Cela ne fonctionne que parce que vous connaissez les dimensions de l'image et du div qui le contient. Cela vous permettra également d'avoir d'autres éléments dans le div contenant ... où les solutions telles que l'utilisation de line-height ne le seront pas.
EDIT: Notez ... vos marges sont négatives de moitié par rapport à la taille de l'image.
Cela fonctionne correctement:
display: block;
margin-left: auto;
margin-right: auto
sinon essayez ceci si ce qui précède ne vous donne que le centrage horizontal:
.outerContainer {
position: relative;
}
.innerContainer {
width: 50px; //your image/element width here
height: 50px; //your image/element height here
overflow: auto;
margin: auto;
position: absolute;
top: 0; left: 0; bottom: 0; right: 0;
}
voici une autre méthode pour tout centrer dans n'importe quoi.
HTML: (simple comme toujours)
<div class="Container">
<div class="Content"> /*this can be an img, span, or everything else*/
I'm the Content
</div>
</div>
CSS:
.Container
{
text-align: center;
}
.Container:before
{
content: '';
height: 100%;
display: inline-block;
vertical-align: middle;
}
.Content
{
display: inline-block;
vertical-align: middle;
}
La hauteur du conteneur et du contenu est inconnue.
Centrer sans marge négative spécifique, sans régler la hauteur de ligne (pour que cela fonctionne bien avec plusieurs lignes de texte) et sans script, fonctionne également très bien avec les transitions CSS.
Cela arrive un peu tard, mais voici une solution que j'utilise pour aligner verticalement des éléments dans une div parent.
Ceci est utile lorsque vous connaissez la taille du conteneur div, mais pas celle de l'image contenue. (C'est souvent le cas lorsque vous travaillez avec des lightboxes ou des carrousels d'images).
Voici le style que vous devriez essayer:
container div
{
display:table-cell;
vertical-align:middle;
height:200px;
width:200px;
}
img
{
/*Apply any styling here*/
}
Utilisez Flexbox :
.outerDiv {
display: flex;
flex-direction: column;
justify-content: center; /* Centering y-axis */
align-items :center; /* Centering x-axis */
}
J'ai trouvé que les réponses de Valamas et de Lepu ci-dessus sont les réponses les plus simples qui traitent d'images de taille inconnue ou de taille connue que vous préférez ne pas coder en dur dans votre code CSS. Je n'ai que quelques petites modifications à apporter: supprimez les styles non pertinents, redimensionnez-le à 200px pour l'adapter à la question, et ajoutez hauteur maximale/largeur maximale pour gérer des images trop volumineuses.
div.image-thumbnail
{
width: 200px;
height: 200px;
line-height: 200px;
text-align: center;
}
div.image-thumbnail img
{
vertical-align: middle;
max-height: 200px;
max-width: 200px;
}
dans le div
style="text-align:center; line-height:200px"
Alignement vertical est l’un des styles CSS les plus mal utilisés. Cela ne fonctionne pas comme on peut s'y attendre sur des éléments autres que td ou css "display: table-cell".
C'est un très bon post sur le sujet. http://phrogz.net/CSS/vertical-align/index.html
Les méthodes les plus courantes pour obtenir ce que vous cherchez sont les suivantes:
En CSS le faire comme:
img
{
display:table-cell;
vertical-align:middle;
margin:auto;
}
@sleepy Vous pouvez facilement le faire en utilisant les attributs suivants:
#content {
display: flex;
align-items: center;
width: 200px;
height: 200px;
border: 1px solid red;
}
#myImage {
display: block;
width: 50px;
height: 50px;
margin: auto;
border: 1px solid yellow;
}
<div id="content">
<img id="myImage" src="http://blog.w3c.br/wp-content/uploads/2013/03/css31-213x300.png">
</div>
Références: W
En règle générale, je vais définir le line-height
sur 200px. Fait habituellement le tour.
J'ai une galerie d'images pour lesquelles je ne connais pas les hauteurs ou largeurs exactes des images, je sais juste qu'elles sont plus petites que la div dans laquelle elles vont être contenues.
En combinant les paramètres line-height sur le conteneur et en utilisant vertical-align: middle sur l'élément image, j'ai enfin réussi à faire fonctionner FF 3.5, Safari 4.0. et IE7.0 en utilisant le balisage HTML et le CSS suivants.
Le balisage HTML
<div id="gallery">
<div class="painting">
<a href="Painting/Details/2">
<img src="/Content/Images/Paintings/Thumbnail/painting_00002.jpg" />
</a>
</div>
<div class="painting">
...
</div>
...
</div>
Le CSS
div.painting
{
float:left;
height:138px; /* fixed dimensions */
width: 138px;
border: solid 1px white;
background-color:#F5F5F5;
line-height:138px;
text-align:center;
}
div.painting a img
{
border:none;
vertical-align:middle;
}
Cela fonctionne pour moi:
<body>
<table id="table-foo">
<tr><td>
<img src="foo.png" />
</td></tr>
</table>
</body>
<style type="text/css">
html, body {
height: 100%;
}
#table-foo {
width: 100%;
height: 100%;
text-align: center;
vertical-align: middle;
}
#table-foo img {
display: block;
margin: 0 auto;
}
</style>
Une autre façon (pas encore mentionnée ici) est d'utiliser Flexbox .
Il suffit de définir les règles suivantes sur le conteneur div
:
display: flex;
justify-content: center; /* align horizontal */
align-items: center; /* align vertical */
div {
width: 200px;
height: 200px;
border: 1px solid green;
display: flex;
justify-content: center;
/* align horizontal */
align-items: center;
/* align vertical */
}
<div>
<img src="http://lorempixel.com/50/50/food" alt="" />
</div>
Un bon point de départ pour Flexbox pour visualiser certaines de ses fonctionnalités et obtenir la syntaxe permettant une prise en charge optimale du navigateur est flexyboxes
De plus, le support du navigateur est de nos jours assez bon: caniuse
Pour la compatibilité entre navigateurs pour display: flex
et align-items
, vous pouvez utiliser les éléments suivants:
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -ms-flexbox;
display: flex;
-webkit-flex-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
Ceci est une ancienne solution mais les parts de marché des navigateurs ont suffisamment progressé pour vous permettre de vous en sortir sans la partie IE si vous ne craignez pas de dégrader IE7. Cela fonctionne lorsque vous connaissez les dimensions du conteneur externe mais que vous connaissez ou non les dimensions de l'image interne.
.parent {
display: table;
height: 200px; /* can be percentages, too, like 100% */
width: 200px; /* can be percentages, too, like 100% */
}
.child {
display: table-cell;
vertical-align: middle;
margin: 0 auto;
}
<div class="parent">
<div class="child">
<img src="foo.png" alt="bar" />
</div>
</div>
Nous pouvons facilement y parvenir en utilisant flex
. pas besoin de background-image
.
<!DOCTYPE html>
<html>
<head>
<style>
#image-wrapper{
width:500px;
height:500px;
border:1px solid #333;
display:flex;
justify-content:center;
align-items:center;
}
</style>
</head>
<body>
<div id="image-wrapper">
<img id="myImage" src="http://blog.w3c.br/wp-content/uploads/2013/03/css31-213x300.png">
</div>
</body>
</html>
facile
img {
transform: translate(50%,50%);
}
Vous pouvez centrer une image horizontalement et verticalement avec le code ci-dessous (fonctionne dans IE/FF). Cela mettra le bord supérieur de l'image à exactement 50% de la hauteur du navigateur, et le haut de la marge (en tirant la moitié de la hauteur de l'image vers le haut) le centrera parfaitement.
<style type="text/css">
#middle {position: absolute; top: 50%;} /* for Explorer only*/
#middle[id] {vertical-align: middle; width: 100%;}
#inner {position: relative; top: -50%} /* for Explorer only */
</style>
<body style="background-color:#eeeeee">
<div id="middle">
<div id="inner" align="center" style="margin-top:...px"> /* the number will be half the height of your image, so for example if the height is 500px then you will put 250px for the margin-top */
<img src="..." height="..." width="..." />
</div>
</div>
</body>
J'ai essayé d'obtenir une image centrée verticalement et horizontalement dans une forme de cercle en utilisant hmtl et css.
Après avoir combiné plusieurs points de ce fil, voici ce que j’ai trouvé: jsFiddle
Voici un autre exemple de ceci dans une mise en page à trois colonnes: jsFiddle
CSS:
#circle {
width: 100px;
height: 100px;
background: #A7A9AB;
-moz-border-radius: 50px;
-webkit-border-radius: 50px;
border-radius: 50px;
margin: 0 auto;
position: relative;
}
.images {
position: absolute;
margin: auto;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
HTML:
<div id="circle">
<img class="images" src="https://png.icons8.com/facebook-like-filled/ios7/50" />
</div>
J'adore sauter sur de vieux vélos!
Voici une mise à jour 2015 de cette réponse . J'ai commencé à utiliser CSS3 transform
pour effectuer mon sale travail de positionnement. Cela vous permet de ne pas avoir besoin de faire du HTML supplémentaire, vous n'avez pas à faire de maths (trouver des demi-largeurs de choses), vous pouvez les utiliser sur n'importe quel élément!
Voici un exemple (avec le violon à la fin). Votre HTML:
<div class="bigDiv">
<div class="smallDiv">
</div>
</div>
Avec CSS d'accompagnement:
.bigDiv {
width:200px;
height:200px;
background-color:#efefef;
position:relative;
}
.smallDiv {
width:50px;
height:50px;
background-color:#cc0000;
position:absolute;
top:50%;
left:50%;
transform:translate(-50%, -50%);
}
Ce que je fais souvent ces jours-ci, c’est de donner un cours aux choses que je veux centrer et de les réutiliser à chaque fois. Par exemple:
<div class="bigDiv">
<div class="smallDiv centerThis">
</div>
</div>
css
.bigDiv {
width:200px;
height:200px;
background-color:#efefef;
position:relative;
}
.smallDiv {
width:50px;
height:50px;
background-color:#cc0000;
}
.centerThis {
position:absolute;
top:50%;
left:50%;
transform:translate(-50%, -50%);
}
De cette façon, je pourrai toujours centrer quelque chose dans son conteneur. Vous devez simplement vous assurer que la chose que vous voulez centrer se trouve dans un conteneur qui a un position
défini.
BTW: Cela fonctionne aussi pour le centrage des divisions BIGGER dans les divisions SMALLER.
Vous pouvez définir la position de l'image est aligner le centre horizontal par cette
#imageId {
display: block;
margin-left: auto;
margin-right:auto;
}
div {
position: absolute;
border: 3px solid green;
width: 200px;
height: 200px;
}
img {
position: relative;
border: 3px solid red;
width: 50px;
height: 50px;
}
.center {
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%); /* IE 9 */
-webkit-transform: translate(-50%, -50%); /* Chrome, Safari, Opera */
}
<div class="center">
<img class="center" src="http://placeholders.org/250/000/fff" />
</div>
Connexes: Centrer une image
Utilisez le positionnement. Ce qui suit a fonctionné pour moi:
div{
display:block;
overflow:hidden;
width: 200px;
height: 200px;
position: relative;
}
div img{
width: 50px;
height: 50px;
top: 50%;
left: 50%;
bottom: 50%;
right: 50%;
position: absolute;
}
merci à tous pour les indices.
J'ai utilisé cette méthode
div.image-thumbnail
{
width: 85px;
height: 85px;
line-height: 85px;
display: inline-block;
text-align: center;
}
div.image-thumbnail img
{
vertical-align: middle;
}
Définissez simplement la marge d'image auto comme indiqué ci-dessous.
img{
margin:auto;
width:50%;
height:auto;
}
Vérifiez ces exemple
.container {
height: 200px;
width: 200px;
float:left;
position:relative;
}
.children-with-img {
position: absolute;
width:50px;
height:50px;
left:50%;
top:50%;
transform:translate(-50%);
}
Ici, essayez ceci.
.parentdiv {
height: 400px;
border: 2px solid #cccccc;
background: #efefef;
position: relative;
}
.childcontainer {
position: absolute;
left: 50%;
top: 50%;
}
.childdiv {
width: 150px;
height:150px;
background: lightgreen;
border-radius: 50%;
border: 2px solid green;
margin-top: -50%;
margin-left: -50%;
}
<div class="parentdiv">
<div class="childcontainer">
<div class="childdiv">
</div>
</div>
</div>
J'avais ce problème en HTML5 en utilisant CSS3 et mon image était centrée comme telle dans la DIV ... oh oui, je ne peux pas oublier comment j'ai dû ajouter de la hauteur pour afficher l'image ... pendant un moment, je me suis demandé où elle se trouvait. était jusqu'à ce que je l'ai fait. Je ne pense pas que la position et l'affichage sont nécessaires.
background-image: url('../Images/01.png');
background-repeat:no-repeat;
background-position:center;
position:relative;
display:block;
height:60px;
https://www.w3.org/Style/Examples/007/center.en.html
IMG.displayed {
display: block;
margin-left: auto;
margin-right: auto
}
<IMG class="displayed" src="..." alt="...">
La meilleure façon de centrer une image verticalement et horizontalement consiste à utiliser deux conteneurs et à appliquer les propriétés suivantes:
display: table;
display: table-cell;
vertical-align: middle;
text-align: center;
.outer-container {
display: table;
width: 80%; /* can be any width */
height: 120px; /* can be any height */
background: #ccc;
}
.inner-container {
display: table-cell;
vertical-align: middle;
text-align: center;
}
.inner-container img {
background: #fff;
padding : 10px;
border : 1px solid #000;
}
<div class="outer-container">
<div class="inner-container">
<img src="http://s.gravatar.com/avatar/bf4cc94221382810233575862875e687?r=x&s=50" />
</div>
</div>
Cela a fonctionné pour moi. Ajoutez ceci à l'image css:
img
{
display: block;
margin: auto;
}