Centra l'immagine in orizzontale all'interno di un div


388

Questa è probabilmente una domanda stupida ma dato che i soliti modi di allineare al centro un'immagine non funzionano, ho pensato di fare una domanda. Come posso allineare al centro (orizzontalmente) un'immagine all'interno del suo div contenitore?

Ecco HTML e CSS. Ho anche incluso il CSS per gli altri elementi della miniatura. Funziona in ordine decrescente, quindi l'elemento più alto è il contenitore di tutto e il più basso è all'interno di tutto.

#thumbnailwrapper {
      color: #2A2A2A;
      margin-right: 5px;
      border-radius: 0.2em;
      margin-bottom: 5px;
      background-color: #E9F7FE;
      padding: 5px;
      border: thin solid #DADADA;
      font-size: 15px
}
    
#artiststhumbnail {
      width: 120px;
      height: 108px;
      overflow: hidden;
      border: thin solid #DADADA;
      background-color: white;
}
    
#artiststhumbnail:hover {
      left: 50px
}
<!--link here-->

<a href="NotByDesign">
  <div id="thumbnailwrapper">

    <a href="NotByDesign">

      <!--name here-->
      <b>Not By Design</b>
      <br>

      <div id="artiststhumbnail">

        <a href="NotByDesign">

          <!--image here-->
          <img src="../files/noprofile.jpg" height="100%" alt="Not By Design" border="1" />
        </a>
      </div>

      <div id="genre">Punk</div>

  </div>

Ok, ho aggiunto il markup senza il PHP, quindi dovrebbe essere più facile da vedere. Nessuna soluzione sembra funzionare in pratica. Il testo in alto e in basso non può essere centrato e l'immagine deve essere centrata all'interno del div del contenitore. Il contenitore ha un overflow nascosto, quindi voglio vedere il centro dell'immagine poiché è normalmente lì che si trova la messa a fuoco.


1
È previsto che l'immagine sia visualizzata sulla stessa riga del primo collegamento (quello artistico)?
Shoaib,

5
imgsono soggetti a text-align: centermeno che non siano displaystati modificati.
Jared Farrish,

5
jsfiddle.net/cEgRp - semplicetext-align: center
Zoltan Toth il

3
Jacob, puoi almeno pubblicare l'effettivo markup visualizzato dal browser e non il modello infuso da PHP? Inoltre, un jsfiddle.net funzionante aiuta sempre.
Jared Farrish,

2
Non importa il mio commento - non ho notato che imgera racchiuso nel a. Sono stupido
Shoaib,

Risposte:


838

Il ragazzo CSS suggerisce quanto segue:

Quindi, traducendo, forse:

#artiststhumbnail a img {
    display:block;
    margin:auto;
}

Ecco la mia soluzione in: http://jsfiddle.net/marvo/3k3CC/2/


10
Non penso che sia una buona idea, e credo anche che ci siano alcuni avvertimenti come margin: autodipende dall'elemento contenitore che ha un valore di larghezza designato.
Jared Farrish,

4
Sto ancora migliorando le mie abilità CSS, quindi grazie per l'interessante punto di studio. Ma in questo caso, sta usando una larghezza fissa sul contenitore.
Marvo,

1
Cosa significa esattamente larghezza designata in questo contesto? Sicuramente sembra avere conoscenze utili.
Shoaib,

1
Guarda questo violino che ho creato ; Non sono sicuro di cosa pensare. Quello che stai suggerendo non farà nulla, e imgcredo che avrebbe bisogno comunque di una larghezza definita per avere effetto auto.
Jared Farrish,

2
In realtà non hai implementato la soluzione che ho presentato. In secondo luogo, il div racchiuso ha una larghezza di 120px, che è circa uguale alla larghezza dell'immagine, rendendo difficile vedere se sta effettivamente centrando l'immagine. Ecco la mia soluzione: jsfiddle.net/marvo/3k3CC/2
Marvo

88

Il flexbox CSS può farlo con justify-content: centersull'elemento parent dell'immagine. Per preservare le proporzioni dell'immagine, aggiungila align-self: flex-start;.

HTML

<div class="image-container">
  <img src="http://placehold.it/100x100" />
</div>

CSS

.image-container {
  display: flex;
  justify-content: center;
}

Produzione:


4
Ottima soluzione quando il browser supporta questo, che il mio fa. Può anche usare align-itemsper centrare verticalmente. Le varie soluzioni di margine non funzionano per me perché l'elemento da centrare non ha attributi di larghezza e altezza.
Marc Rochkind,

1
Nel mio caso, il div ha una determinata dimensione (ad es. 50px) e questo allungherà l'immagine a 50px.
Max

1
@Max In tal caso, puoi applicare align-selfl'elemento immagine come questo jsfiddle.net/3fgvkurd
Manoj Kumar

69

Ho appena trovato questa soluzione di seguito nella pagina CSS di W3 e ha risposto al mio problema.

img {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

Fonte: http://www.w3.org/Style/Examples/007/center.en.html


Sto usando max-width: 100%; max-height: 100%;per ridimensionare l'immagine se lo schermo è più piccolo dell'immagine, ma in questo caso non è centrato. Eventuali suggerimenti su come centrare l'applicazione di questi due attributi
Alexey Strakh,

18

Anche questo lo farebbe

#imagewrapper {
    text-align:center
}

#imagewrapper img {
    display:inline-block;
    margin:0 5px
}

Intendevi text-align:center;e margin:0 5px;? Ho aggiunto un;
jagb il

I punti e virgola @jagb non sono richiesti per l'ultima proprietà in un blocco selettore.
TylerH,

4
@TylerH Questo è vero, i punti e virgola non sono richiesti per l'ultima proprietà in un blocco selettore, ma è sempre consigliabile utilizzare i punti e virgola. Cosa succede se scrivo un file CSS, un altro sviluppatore modifica il mio file in seguito, aggiungono del codice (dopo la riga con il punto e virgola mancante, la riga che ho scritto prima in quel file CSS) e la loro altezza, larghezza o altra dichiarazione non funziona (o peggio ancora, non si accorgono che non funziona). Direi che è più sicuro lasciare i punti e virgola. Ecco perché uso i punti e non li escludo mai.
Jagb

@jagb Se un altro sviluppatore modifica il tuo file in un secondo momento, aggiungerà i punti e virgola ove necessario, o sarà il loro problema per la scrittura del codice che presenta errori. La risposta al tuo commento iniziale è ancora: "i punti e virgola sull'ultima riga nei CSS sono una scelta di stile".
TylerH,

Sono d'accordo con Jagb. Questo sito dovrebbe promuovere buone scelte di stile. Un buon stile non lascia codice che si rompa facilmente. Mettere il punto e virgola su ogni riga ti costa forse 1/10 di secondo, il debug per trovare un punto e virgola mancante può costarti ore. Ecco perché le grandi aziende tecnologiche insistono su questo: Guida di stile HTML / CSS di Google - Arresto della dichiarazione
Georg Patscheider

14

La cosa migliore che ho trovato (che sembra funzionare in tutti i browser) per centrare un'immagine, o qualsiasi elemento, in orizzontale è creare una classe CSS e includere i seguenti parametri:

CSS

.center {
    position: relative;          /* where the next element will be automatically positioned */
    display: inline-block;       /* causes element width to shrink to fit content */
    left: 50%;                   /* moves left side of image/element to center of parent element */
    transform: translate(-50%);  /* centers image/element on "left: 50%" position */
}

È quindi possibile applicare la classe CSS creata al tag come segue:

HTML

<img class="center" src="image.jpg" />

Puoi anche incorporare il CSS nei tuoi elementi facendo quanto segue:

<img style="position: relative; display: inline-block; left: 50%; transform: translate(-50%);" src ="image.jpg" />

... ma non consiglierei di scrivere CSS in linea perché allora devi apportare più modifiche in tutti i tuoi tag usando il tuo codice CSS di centraggio se vuoi mai cambiare lo stile.


fatto il lavoro, ma per la compatibilità del browser, sarà necessario utilizzare le altre forme di trasformazione.
Jay Smoke,

11

Questo è quello che ho finito per fare:

<div style="height: 600px">
   <img src="assets/zzzzz.png" alt="Error" style="max-width: 100%; 
        max-height: 100%; display:block; margin:auto;" />
</div>

Ciò limiterà l'altezza dell'immagine a 600 px e centrerà orizzontalmente (o ridimensionerà se la larghezza padre è più piccola) rispetto al contenitore padre, mantenendo le proporzioni.


8

Ho intenzione di uscire su un arto e dire che quello che stai cercando è il seguente.

Nota, credo che quanto segue sia stato accidentalmente omesso nella domanda (vedi commento):

<div id="thumbnailwrapper"> <!-- <<< This opening element -->
    <div id="artiststhumbnail">
...

Quindi quello di cui hai bisogno è:

#artiststhumbnail {
    width:120px;
    height:108px;
    margin: 0 auto; /* <<< This line here. */
    ...
}

http://jsfiddle.net/userdude/XStjX/3/


Hmm ... Scommetto che funziona. Ho centrato l'IMMAGINE nella mia soluzione, ma posso vedere come la domanda potrebbe essere interpretata come centrare il div-racchiudendo l'immagine all'interno di un altro div. Ad ogni modo, stessa soluzione.
Marvo,

Nessuna soluzione funziona in pratica. Avevo provato entrambe le soluzioni prima che non funzionasse. Si prega di fare riferimento alla modifica della domanda
Jacob Windsor,

3

Per centrare un'immagine in orizzontale, funziona:

<p style="text-align:center"><img src=""></p>

Sì, ma se hai intenzione di visualizzare l'immagine come blocco per evitare quel noioso spazio bianco sotto di esso, questo non funzionerà più ...
Dr Fred

3

Aggiungi questo al tuo CSS:

#artiststhumbnail a img {
   display: block;
   margin-left: auto;
   margin-right: auto;
}

Basta fare riferimento a un elemento figlio che in quel caso è l'immagine.


2
questo è utile per quando vuoi ancora accedere al margine superiore, .. meglio del margine 0 auto
tallgirltaadaa

2

Inserisci un'imbottitura pixel uguale per sinistra e destra:

<div id="artiststhumbnail" style="padding-left:ypx;padding-right:ypx">

1

Metti la foto dentro a newDiv. Rendi la larghezza del contenitore divuguale all'immagine. Applica margin: 0 auto;al newDiv. Ciò dovrebbe centrare l' divinterno del contenitore.


1

Usa il posizionamento. Quanto segue ha funzionato per me ... (centrato orizzontalmente e verticalmente)

Con lo zoom al centro dell'immagine (l'immagine riempie il div):

div{
    display:block;
    overflow:hidden;
    width: 70px; 
    height: 70px;  
    position: relative;
}
div img{
    min-width: 70px; 
    min-height: 70px;
    max-width: 250%; 
    max-height: 250%;    
    top: -50%;
    left: -50%;
    bottom: -50%;
    right: -50%;
    position: absolute;
}

Senza zoom al centro dell'immagine (l'immagine non riempie il div):

   div{
        display:block;
        overflow:hidden;
        width: 100px; 
        height: 100px;  
        position: relative;
    }
    div img{
        width: 70px; 
        height: 70px; 
        top: 50%;
        left: 50%;
        bottom: 50%;
        right: 50%;
        position: absolute;
    }

1

puoi allineare i tuoi contenuti utilizzando la scatola flessibile con il codice minimo

HTML

<div class="image-container">
<img src="https://image.freepik.com/free-vector/modern-abstract-background_1048-1003.jpg" width="100px"> 
</div>

CSS

.image-container{
  width:100%;
  background:green;
  display:flex;

.image-container{
  width:100%;
  background:green;
  display:flex;
  justify-content: center;
  align-items:center;
}
<div class="image-container">
<img src="https://image.freepik.com/free-vector/modern-abstract-background_1048-1003.jpg" width="100px"> 
</div>

js fiddle link https://jsfiddle.net/7un6ku2m/


1

Centra un'immagine in un div

/* standar */
div, .flexbox-div {
  position: relative;
  width: 100%;
  height: 100px;
  margin: 10px;
  background-color: grey;  
}

img {
  border: 3px solid red;
  width: 75px;
  height: 75px;
}
/* || standar */


/* transform */
.transform {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%); /* IE 9 */
  -webkit-transform: translate(-50%, -50%); /* Chrome, Safari, Opera */ 
}
/* || transform */


/* flexbox margin */
.flexbox-div {
  display: -webkit-flex;
  display: flex;
  background-color: lightgrey; 
}

.margin-img {
  margin: auto;
}
/* || flexbox margin */


/* flexbox justify align */
.flexbox-justify {
  justify-content: center;
}

.align-item {
  align-self: center;
}
/* || flexbox justify align */
<h4>Using transform </h4>  
<div>
  <img class="transform" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>

<h4>Using flexbox margin</h4>  
<div class="flexbox-div">
  <img class="margin-img" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>

<h4>Using flexbox justify align</h4>  
<div class="flexbox-div flexbox-justify">
  <img class="align-item" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>


1

Ho provato alcuni modi. Ma in questo modo funziona perfettamente per me

<img src="~/images/btn.png" class="img-responsive" id="hide" style="display: block; margin-left: auto; margin-right: auto;" />

1

Un modo reattivo per centrare un'immagine può essere così:

.center {
    display: block;
    margin: auto;
    max-width: 100%;
    max-height: 100%;
}

0

Se devi fare questo in linea (come quando usi una casella di input),
ecco un trucco rapido che ha funzionato per me: circonda il tuo (link immagine in questo caso)
in un divconstyle="text-align:center"

<div style="text-align:center">

<a title="Example Image: Google Logo" href="https://www.google.com/" 
target="_blank" rel="noopener"><img src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png" alt="Google Logo. Click to visit Google.com" border="0" data-recalc-dims="1" /></a>

<h6><strong>This text will also be centered </strong></h6>

</div> /* ends centering style */

0
##Both Vertically and Horizontally center of the Page
.box{
    width: 300px;
    height: 300px;
    background-color: #232532;
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;
}

5
Benvenuto in StackOverflow! Aggiungi una spiegazione alla tua risposta.
Maximilian Peters,

Se vogliamo correggere un centro particolare <div> o <section>verticale e orizzontale della pagina per tutti i dispositivi, puoi semplicemente usare questo codice di stile !!!!
Siva Kaliyamoorthy,

Sembra che questa risposta appartenga a una domanda diversa :)
Manoj Kumar,

0

sì, il codice come questo funziona benissimo

<div>
 <img>
</div>

ma solo per ricordarti lo stile dell'immagine

object-fit : *depend on u*

quindi il codice finale sarà come Esempio

<div style="border: 1px solid red;">
    <img
      src="./assets/images/truck-toy.jpg"
      alt=""
      srcset=""
      style="
       border-radius: 50%;
       height: 7.5rem;
       width: 7.5rem;
       object-fit: contain;"
    />
</div>

Risultato finale


0

L'uso della proprietà flex sul contenitore è la risposta giusta per poter centrare sia verticalmente che orizzontalmente.

La risposta principale qui NON funziona per centrare un oggetto in verticale, solo in orizzontale.


L'OP ha chiaramente richiesto l'allineamento orizzontale.
Alvin Moyo,

-1
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">


      <style>
      body{
  /*-------------------important for fluid images---\/--*/
  overflow-x: hidden; /* some browsers shows it for mysterious reasons to me*/
  overflow-y: scroll;
  margin-left:0px;
  margin-top:0px;
  /*-------------------important for fluid images---/\--*/
      }
      .thirddiv{
      float:left;
      width:100vw;
      height:100vh;
      margin:0px;
      background:olive;
      }
      .thirdclassclassone{
      float:left;   /*important*/
      background:grey;
      width:80vw;
      height:80vh; /*match with img height bellow*/
      margin-left:10vw; /* 100vw minus "width"/2    */
      margin-right:10vw; /* 100vw minus "width"/2   */
      margin-top:10vh;
      }
      .thirdclassclassone img{
      position:relative; /*important*/
     display: block;  /*important*/
    margin-left: auto;  /*very important*/
    margin-right: auto;  /*very important*/
    height:80vh; /*match with parent div above*/

    /*--------------------------------
    margin-top:5vh;
    margin-bottom:5vh;
    ---------------------------------*/
    /*---------------------set margins to match total  height of parent di----------------------------------------*/
      }
    </style>           
</head>  
<body>
    <div class="thirddiv">
       <div class="thirdclassclassone">
       <img src="ireland.png">
    </div>      
</body>
</html>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.