Centra l'immagine usando il centro di allineamento del testo?


Risposte:


1087

Ciò non funzionerà poiché la text-alignproprietà si applica ai contenitori di blocchi, non agli elementi inline ed imgè un elemento inline. Vedi le specifiche W3C .

Usa questo invece:

img.center {
    display: block;
    margin: 0 auto;
}
<div style="border: 1px solid black;">
<img class="center" src ="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a">

</div>


5
ho provato questo metodo e funziona! ma quando ho provato 2 immagini, non ha funzionato, si sono semplicemente sovrapposte l'una sull'altra come un totem, qualche idea su come allineare 2 immagini sulla stessa linea nel mezzo?
PatrickGamboa,

1
In che modo non è supportato dal W3C? Potete fornire collegamenti per sostenere tale richiesta?
Madara's Ghost

1
@SecondRikudo: text-alignserve per centrare il testo, come suggerisce il nome. Per gli elementi a blocchi, margin: 0 auto;è l' approccio raccomandato .
Mrchief,

4
@Mrchief Le immagini sono elementi incorporati, non blocchi. text-alignfunziona altrettanto bene su di loro.
Madara's Ghost

4
Questa spiegazione è strana, no? Dici che 'text-align' si applica ai blocchi e non alle linee, cosa che credo, quindi lo cambi letteralmente in un elemento a blocchi evitando di usare text-align. Intendo che il tuo codice funziona, ma quel paragrafo deve essere completamente riformulato, imo.
Polpo,

118

Non funziona sempre ... in caso contrario, prova:

img {
    display: block;
    margin: 0 auto;
}

87

Mi sono imbattuto in questo post e ha funzionato per me:

img {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
}
<div style="border: 1px solid black; position:relative; min-height: 200px">
  <img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a">

</div>

(Allineamento verticale e orizzontale)


48

Un altro modo per farlo sarebbe centrare un paragrafo allegato:

<p style="text-align:center; border:1px solid black"><img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a"></p>


19
Non sarei d'accordo, penso che questo risponda alla domanda. L'OP ha chiesto se la proprietà text-align: centerè un buon modo per centrare un'immagine e non ha specificato che la proprietà doveva far parte del tag img. Questa risposta utilizza la proprietà in questione nel tentativo di fornire una soluzione (che funzioni).
MandM

2
Questo ha funzionato per me quando display: block, ecc. No.
matthewsheets,

14

Tu puoi fare:

<center><img src="..." /></center>


9
sfortunatamente, <center>non è supportato in HTML5, ma accidenti, funziona.
Ayrat,

13

In realtà, l'unico problema con il tuo codice è che l' text-alignattributo si applica al testo (sì, le immagini contano come testo) all'interno del tag. Dovresti mettere un spantag attorno all'immagine e impostarne lo stile su text-align: center, in questo modo:

span.centerImage {
     text-align: center;
}
<span class="centerImage"><img src="http://placehold.it/60/60" /></span>

L'immagine sarà centrata. In risposta alla tua domanda, è il modo più semplice e più sicuro per centrare le immagini, purché ti ricordi di applicare la regola al contenuto span(o div) dell'immagine .


2
Un spanelemento è display: inline;di default, quindi questo si presenta nello stesso problema del posizionamento text-align: center;su imgse stesso. È necessario impostare spansu display: block;o sostituirlo con a divaffinché funzioni.
Web_Designer

10

Esistono tre metodi per centrare un elemento che posso suggerire:

  1. Utilizzando la text-alignproprietà

        .parent {
        text-align: center;
    }
        <div class="parent">
        <img src="https://placehold.it/60/60" />
    </div>

  2. Utilizzando la marginproprietà

    img {
        display: block;
        margin: 0 auto;
    }
    <img src="https://placehold.it/60/60" />

  3. Utilizzando la positionproprietà

    img {
        display: block;
        position: relative;
        left: -50%;
    }
    .parent {
        position: absolute;
        left: 50%;
    }
    <div class="parent">
        <img src="https://placehold.it/60/60" />
    </div>


Il primo e il secondo metodo funzionano solo se il genitore è largo almeno quanto l'immagine. Quando l'immagine è più larga del suo genitore, l'immagine non rimarrà centrata !!!

Ma: il terzo metodo è un buon modo per farlo!

Ecco un esempio:

img {
    display: block;
    position: relative;
    left: -50%;
}
.parent {
    position: absolute;
    left: 50%;
}
<div class="parent">
    <img src="http://imgsv.imaging.nikon.com/lineup/lens/zoom/normalzoom/af-s_dx_18-140mmf_35-56g_ed_vr/img/sample/img_01.jpg" />
</div>


# 3 è così preciso che sono stato in grado di centrare un imgdentro un giustificato divin un WebViewcon iniezione CSS. Grazie!
JorgeAmVF

8

Solo se è necessario supportare versioni precedenti di Internet Explorer.

L'approccio moderno è quello di fare margin: 0 autonel tuo CSS.

Esempio qui: http://jsfiddle.net/bKRMY/

HTML:

<p>Hello the following image is centered</p>
<p class="pic"><img src="https://twimg0-a.akamaihd.net/profile_images/440228301/StackoverflowLogo_reasonably_small.png"/></p>
<p>Did it work?</p>

CSS:

p.pic {
    width: 48px;
    margin: 0 auto;
}

L'unico problema qui è che la larghezza del paragrafo deve essere uguale alla larghezza dell'immagine . Se non si inserisce una larghezza nel paragrafo, non funzionerà, poiché assumerà il 100% e l'immagine verrà allineata a sinistra, a meno che ovviamente non si usi text-align:center.

Prova il violino e sperimentalo se vuoi.


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

1
cacciatore di sogni, se stai proponendo un modo alternativo di centrare un'immagine usando CSS, allora devi espandere un po 'la tua domanda. Potresti spiegare come e perché questa proposta alternativa sarebbe un modo migliore per raggiungere l'obiettivo dell'interrogante, magari includendo un collegamento alla documentazione pertinente. Ciò lo renderebbe più utile per loro e anche più utile per altri lettori del sito che sono alla ricerca di soluzioni a problemi simili.
Vince Bowdren,

6

Se stai usando una classe con un'immagine, allora farà quanto segue

class {
    display: block;
    margin: 0 auto;
}

Se è solo un'immagine in una classe specifica che si desidera allineare al centro, attenersi alla seguente procedura:

class img {
    display: block;
    margin: 0 auto;
}

Vorrei cambiare quello in basso per essere img.classo aggiungerei anche una img.classversione. Grazie per questo.
Chuck Savage,

6

Sull'immagine contenente il contenitore è possibile utilizzare un Flexbox CSS 3 per centrare perfettamente l'immagine all'interno, sia in verticale che in orizzontale.

Supponiamo che tu abbia <div class = "container"> come titolare dell'immagine:

Quindi come CSS devi usare:

.container {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
}

E questo renderà tutti i tuoi contenuti all'interno di questo div perfettamente centrati.


quale può essere il contenuto giustificato può usare per impostare l'allineamento in <p> ??
Manjitha teshara,

Questo è quello che volevo. Grazie.
Dionne Kim,

5

La soluzione più semplice che ho trovato è stata aggiungere questo al mio img-element:

style="display:block;margin:auto;"

Sembra che non sia necessario aggiungere "0" prima di "auto" come suggerito da altri. Forse è il modo corretto, ma funziona abbastanza bene per i miei scopi anche senza lo "0". Almeno sugli ultimi Firefox, Chrome e Edge .


solo auto significa auto auto auto autoe 0 autosignifica 0 auto 0 auto... e per impostazione predefinita auto per il margine inferiore e superiore è 0quindi aggiungere 0 o meno è esattamente lo stesso in questo caso che ti fa rispondere a un ennesimo duplicato di quelli già forniti
Temani Afif

Il tuo commento spiega perché funziona. Grande. Ma quale delle risposte precedenti diceva che anche "auto" senza "0" funziona? Non vale la pena menzionare questo fatto?
Panu Logic,

in questo caso dovrebbe essere un commento, perché in questo caso particolare sono entrambi uguali. Non credo che dovremmo avere una risposta per tutti i valori equivalenti, in questo caso possiamo scrivere: auto, auto auto, auto auto auto, auto auto auto auto, 0 auto 0, 0 auto, 0 auto 0 auto, e così via ... tu pensi che ognuno merita una risposta diversa? Io non la penso così.
Temani dopo il

Non direi che se due diversi segmenti di CSS producono lo stesso risultato finale, quei due segmenti di CSS "sono gli stessi". Il loro output è lo stesso ma il loro codice sorgente non è lo stesso. Proprio come in generale è possibile scrivere un numero qualsiasi di programmi diversi che producono lo stesso output. Quindi è utile sapere (e dire alle persone che chiedono) quale di questi programmi "equivalenti" sembra essere il più semplice e il più breve da scrivere.
Panu Logic,

e tutto ciò dovrebbe essere scritto in un'unica risposta. Ecco perché questa risposta è più adatta come commento di una risposta completamente nuova. Dovremmo presentare tutte le cose equivalenti insieme e non renderle separate, il che può sembrare che siano completamente diverse perché non è il caso [la mia opinione tra l'altro, non c'è bisogno di essere d'accordo o discutere il contrario]. E non sto parlando di programmi diversi che producono lo stesso output, è una cosa completamente diversa in quanto la logica potrebbe non essere la stessa. Qui stiamo parlando della stessa proprietà e dello stesso valore (come i++sono gli stessi i+=1)
Temani Afif

4

Cambia semplicemente allineamento genitore :)

Prova questo sulle proprietà principali:

text-align:center

3

Puoi usare text-align: centeril genitore e cambiare imgin display: inline-block→, quindi si comporta come un elemento di testo ed è centrato se il genitore ha una larghezza!

img {
    display: inline-block
}

2

Vorrei usare un div per allineare al centro un'immagine. Come in:

<div align="center"><img src="your_image_source"/></div>

2

Se vuoi impostare l'immagine come sfondo, ho una soluzione:

.image {
    background-image: url(yourimage.jpg);
    background-position: center;
}

2

Centrare un'immagine non di sfondo dipende dal fatto che si desideri visualizzare l'immagine come in linea (comportamento predefinito) o come elemento a blocchi.

Caso di in linea

Se si desidera mantenere il comportamento predefinito della proprietà CSS di visualizzazione dell'immagine, sarà necessario avvolgere l'immagine all'interno di un altro elemento a blocchi su cui è necessario impostare text-align: center;

Caso di blocco

Se vuoi considerare l'immagine come un elemento a blocchi a sé stante, allora la text-alignproprietà non ha senso, e dovresti invece farlo:

IMG.display {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

La risposta alla tua domanda:

La proprietà text-align: center; un buon modo per centrare un'immagine usando i CSS?

Sì e no.

  • Sì, se l'immagine è l'unico elemento all'interno del suo involucro.
  • No, nel caso in cui tu abbia altri elementi all'interno dell'involucro dell'immagine perché tutti gli elementi figli che sono fratelli dell'immagine erediteranno la text-alignproprietà: e potrebbe essere che non ti piacerebbe questo effetto collaterale.

Riferimenti

  1. Elenco di elementi incorporati
  2. Centrare le cose

1

Un altro modo per ridimensionare: visualizzalo:

img {
  width: 60%; /* Or required size of image. */
  margin-left: 20% /* Or scale it to move image. */
  margin-right: 20% /* It doesn't matters much if using left and width */
}

1

Usa questo per il tuo imgCSS:

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

0

display: blockcon margin: 0non ha funzionato per me, né avvolgersi con un text-align: centerelemento.

Questa è la mia soluzione:

img.center {
    position: absolute;
    transform: translateX(-50%);
    left: 50%;
}

translateX è supportato dalla maggior parte dei browser


1
intendevi margin: 0 auto;? La chiave sta impostando margin-lefte margin-rightsu auto. margin: 0 auto;è solo una scorciatoia per quello.
Web_Designer

1
@Web_Designer Ho provato margin: 0 auto, margin: 0e margin: autonessuno ha funzionato. Si noti che nell'ispettore di Chrome, quando si utilizza margin: 0 auto, colpisce la proprietà con un punto esclamativo che dice invalid property value(o qualunque cosa significhi)
OverCoder

Penso che volevi dire "posizione: assoluto;" anziché "display: absolute;"
WebDevDaniel,

Grazie @WebDevDaniel per aver segnalato l'errore di battitura. Oh comunque, potresti voler usare il relativeposizionamento piuttosto che absoluteentrambi funzionano abbastanza bene.
OverCoder,

0

Ho scoperto che se ho un'immagine e del testo all'interno di una div, allora posso usare text-align:centerper allineare il testo e l'immagine in un colpo solo.

HTML:

    <div class="picture-group">
        <h2 class="picture-title">Picture #1</h2>
        <img src="http://lorempixel.com/99/100/" alt="" class="picture-img" />
        <p class="picture-caption">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Temporibus sapiente fuga, quia?</p>
    </div>

CSS:

.picture-group {
  border: 1px solid black;
  width: 25%;
  float: left;
  height: 300px;
  #overflow:scroll;
  padding: 5px;
  text-align:center;
}

CodePen: https://codepen.io/artforlife/pen/MoBzrL?editors=1100


0

A volte aggiungiamo direttamente il contenuto e le immagini sull'amministratore di WordPress all'interno delle pagine. Quando inseriamo le immagini all'interno del contenuto e vogliamo allineare quel centro. Il codice viene visualizzato come:

 **<p><img src="https://abcxyz.com/demo/wp-content/uploads/2018/04/1.jpg" alt=""></p>**

In tal caso è possibile aggiungere contenuti CSS in questo modo:

article p img{
    margin: 0 auto;
    display: block;
    text-align: center;
    float: none;
}

0

Uso:

<dev class="col-sm-8" style="text-align: center;"><img src="{{URL('image/car-trouble-with-clipping-path.jpg')}}" ></dev>

Penso che questo sia il modo di centrare un'immagine nel framework Laravel.


0
.img-container {
  display: flex;
}

img {
  margin: auto;
}

questo renderà l'immagine centrale sia in verticale che in orizzontale

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.