Centralizar imagem usando o centro de alinhamento de texto?

511

A propriedade é text-align: center;uma boa maneira de centralizar uma imagem usando CSS?

img {
    text-align: center;
}
Web designer
fonte
jsfiddle.net/j6q4d810/1 Isso funciona bem com qualquer largura e altura
gmarsi

Respostas:

1087

Isso não funcionará, pois a text-alignpropriedade se aplica ao bloco de contêineres, não aos elementos embutidos e imgé um elemento embutido. Veja a especificação W3C .

Use isto:

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>

Mrchief
fonte
5
Eu tentei esse método e funciona! mas quando tentei 2 imagens, não funcionou, apenas se empilhamento como um totem, alguma idéia de como alinhar 2 imagens na mesma linha no meio?
PatrickGamboa 28/02
1
Como isso não é suportado pelo W3C? Você pode fornecer links para apoiar essa reivindicação?
Madara's Ghost
1
@SecondRikudo: text-aligné para centralizar o texto, como o nome indica. Para elementos de bloco, margin: 0 auto;é a abordagem recomendada .
precisa saber é o seguinte
4
@Mchchief As imagens são elementos embutidos, não blocos. text-alignfunciona tão bem neles.
Ghost de Madara
4
Essa explicação é meio estranha, não é? Você diz que 'alinhamento de texto' se aplica a blocos e não linhas, o que acredito, então você literalmente o altera para um elemento de bloco, mas evita o uso de alinhamento de texto. Quero dizer, seu código funciona, mas esse parágrafo precisa ser completamente reformulado.
Octopus
118

Isso nem sempre funciona ... se não, tente:

img {
    display: block;
    margin: 0 auto;
}
codecraftnap
fonte
87

Me deparei com este post , e funcionou para mim:

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>

(Alinhamento vertical e horizontal)

Shai Reznik - HiRez.io
fonte
48

Outra maneira de fazer isso seria centralizar um parágrafo anexo:

<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>

EssamSoft
fonte
19
Eu discordo, acho que isso responde à pergunta. O OP perguntou se a propriedade text-align: centeré ou não uma boa maneira de centralizar uma imagem e não especificou que a propriedade deveria fazer parte da tag img. Esta resposta usa a propriedade em questão em um esforço para fornecer uma solução (que funciona).
21313 MandM
2
Isso funcionou para mim quando exibir: bloco, etc. não.
matthewsheets
14

Você pode fazer:

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

Dimitris Maniatis
fonte
9
infelizmente, <center>não é suportado no html5, mas, droga, funciona.
Ayrat
13

Na verdade, o único problema com o seu código é que o text-alignatributo se aplica ao texto (sim, as imagens contam como texto) dentro da tag. Você gostaria de colocar uma spanmarca em torno da imagem e definir seu estilo para text-align: center:

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

A imagem será centralizada. Em resposta à sua pergunta, é a maneira mais fácil e infalível de centralizar imagens, desde que você lembre de aplicar a regra ao conteúdo span(ou div) da imagem.

Code Monkey
fonte
2
Um spanelemento é display: inline;, por padrão, de modo que isto corre para o mesmo problema como a colocação text-align: center;sobre o imgmesmo. Você deve configurá span- display: block;lo ou substituí-lo por um divpara que isso funcione.
Web_Designer 22/05
10

Existem três métodos para centralizar um elemento que posso sugerir:

  1. Usando a text-alignpropriedade

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

  2. Usando a marginpropriedade

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

  3. Usando a positionpropriedade

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


O primeiro e o segundo métodos funcionam apenas se o pai for pelo menos tão largo quanto a imagem. Quando a imagem é mais larga que o pai, a imagem não fica centralizada !!!

Mas: o terceiro método é um bom caminho para isso!

Aqui está um exemplo:

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>

Amin Fazlali
fonte
O nº 3 é tão preciso que eu consegui centralizar um imgdentro de um justificado divem um WebViewcom injeção de CSS. Obrigado!
JorgeAmVF 16/11
8

Somente se você precisar oferecer suporte a versões antigas do Internet Explorer.

A abordagem moderna é fazer margin: 0 autono seu CSS.

Exemplo aqui: 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;
}

O único problema aqui é que a largura do parágrafo deve ser igual à largura da imagem . Se você não colocar uma largura no parágrafo, ele não funcionará, porque assumirá 100% e sua imagem será alinhada à esquerda, a menos que você use text-align:center.

Experimente o violino e experimente, se quiser.

Ray Toal
fonte
6
img{
    display: block;
    margin-right: auto;
    margin-left: auto;      
 }
Caçador de Sonhos - hashADH
fonte
1
caçador de sonhos, se você está propondo uma maneira alternativa de centralizar uma imagem usando o css, precisará expandir um pouco a sua pergunta. Você pode explicar como e por que essa alternativa proposta seria uma maneira melhor de atingir o objetivo do questionador, talvez incluindo um link para a documentação relevante. Isso tornaria mais útil para eles e também para outros leitores de sites que estão procurando soluções para problemas semelhantes.
precisa saber é o seguinte
6

Se você estiver usando uma classe com uma imagem, o seguinte fará

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

Se for apenas uma imagem em uma classe específica que você deseja centralizar o alinhamento, o seguinte será feito:

class img {
    display: block;
    margin: 0 auto;
}
Baig
fonte
Eu mudaria o de baixo para ser img.classou adicionaria uma img.classversão também. Thx por isso.
Chuck Savage
6

Na imagem que contém o contêiner, você pode usar um Flexbox CSS 3 para centralizar perfeitamente a imagem dentro, vertical e horizontalmente.

Vamos supor que você tenha <div class = "container"> como detentor da imagem:

Então, como CSS, você deve usar:

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

E isso tornará todo o seu conteúdo dentro desta div perfeitamente centralizado.

Santoni
fonte
O que no conteúdo justificado pode usar para definir o alinhamento em <p> ??
Manjitha teshara
Era isso que eu queria. Obrigado.
Dionne Kim
5

A solução mais simples que encontrei foi adicionar isso ao meu elemento img:

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

Parece que não preciso adicionar "0" antes do "auto", conforme sugerido por outras pessoas. Talvez essa seja a maneira correta, mas funciona bem o suficiente para meus propósitos sem o "0" também. Pelo menos no Firefox, Chrome e Edge mais recentes .

Panu Logic
fonte
única auto média auto auto auto autoe 0 automeio 0 auto 0 auto... e por auto padrão para margem inferior e superior é 0assim que adicionar 0 ou não é exatamente a mesma, neste caso, que fazem você responder a um enésimo duplicado das já forneceu
temanitas Afif
Seu comentário explica por que funciona. Ótimo. Mas qual das respostas anteriores disse que 'auto' sem '0' funciona também? Não vale a pena mencionar esse fato?
Panu Logic
nesse caso, deve ser um comentário, porque nesse caso em particular os dois são iguais. Eu não acho que devemos ter uma resposta para todos os valores equivalentes, neste caso, podemos escrever: auto, auto auto, auto auto auto, auto auto auto auto, 0 auto 0, 0 auto, 0 auto 0 auto, e assim por diante ... você acha que cada um merece uma resposta diferente? Acho que não.
Temani Afif 13/11/19
Eu não diria que se dois segmentos diferentes de CSS produzem o mesmo resultado final, esses dois segmentos de CSS "são iguais". Sua saída é a mesma, mas seu código-fonte não é o mesmo. Assim como em geral, você pode escrever qualquer número de programas diferentes que produzam a mesma saída. É importante saber (e dizer às pessoas que perguntam) quais desses programas "equivalentes" parecem os mais simples e os mais curtos de escrever.
Panu Logic
e tudo isso deve ser escrito em uma resposta. É por isso que essa resposta é mais adequada como comentário do que uma resposta totalmente nova. Deveríamos apresentar todas as coisas equivalentes e não torná-las uma característica separada, que pode parecer completamente diferente porque não é o caso [minha opinião, não há necessidade de concordar com isso ou argumentar o contrário]. E não estou falando de programas diferentes que produzem a mesma saída, é uma coisa completamente diferente, pois a lógica pode não ser a mesma. Aqui nós estamos falando sobre a mesma propriedade e o mesmo valor (como i++são as mesmas i+=1)
temanitas Afif
4

Simplesmente mude o alinhamento dos pais :)

Experimente este nas propriedades pai:

text-align:center
Mo.
fonte
3

Você pode usar text-align: centero pai e alterar imgpara display: inline-block→, portanto, ele se comporta como um elemento de texto e será centralizado se o pai tiver uma largura!

img {
    display: inline-block
}
Pão Doml
fonte
2

Eu usaria uma div para alinhar uma imagem no centro. Como em:

<div align="center"><img src="your_image_source"/></div>
Rotimi
fonte
2

Se você deseja definir a imagem como plano de fundo, eu tenho uma solução:

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

Para centralizar uma imagem não em segundo plano depende se você deseja exibir a imagem como um elemento embutido (comportamento padrão) ou um bloco.

Caso em linha

Se você deseja manter o comportamento padrão da propriedade CSS de exibição da imagem, será necessário agrupar sua imagem dentro de outro elemento de bloco no qual você deve definir text-align: center;

Caso de bloqueio

Se você deseja considerar a imagem como um elemento de bloco próprio, a text-alignpropriedade não faz sentido, e você deve fazer isso:

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

A resposta para sua pergunta:

A propriedade alinhar texto: center; uma boa maneira de centralizar uma imagem usando CSS?

Sim e não.

  • Sim, se a imagem for o único elemento dentro de seu invólucro.
  • Não, caso você tenha outros elementos dentro do invólucro da imagem, porque todos os elementos filhos que são irmãos da imagem herdarão a text-alignpropriedade: e pode ser que você não goste desse efeito colateral.

Referências

  1. Lista de elementos embutidos
  2. Centrando coisas
Billal Begueradj
fonte
1

Mais uma maneira de escalar - exiba:

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 */
}
Kishore Banala
fonte
1

Use isso para o seu imgCSS:

img {
  margin-right: auto;
  margin-left: auto;
}
treb
fonte
0

display: blockcom margin: 0não funcionou para mim, nem quebra com um text-align: centerelemento.

Esta é a minha solução:

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

translateX é suportado pela maioria dos navegadores

OverCoder
fonte
1
você quis dizer margin: 0 auto;? A tecla está configurando margin-lefte margin-rightpara auto. margin: 0 auto;é apenas um atalho para isso.
Web_Designer
1
@Web_Designer Tentei margin: 0 auto, margin: 0e margin: auto, nenhum funcionou. Note que no inspector do Chrome, quando se usa margin: 0 auto, é ataca a propriedade com um ponto de exclamação dizendo invalid property value(ou seja lá o que significa que)
OverCoder
Eu acho que você quis dizer "posição: absoluta"; em vez de "display: absolute;"
WebDevDaniel 26/09/16
Obrigado @WebDevDaniel por apontar o erro de digitação. Ah, a propósito, você pode querer usar o relativeposicionamento em vez de absolute, ambos funcionam muito bem.
precisa saber é o seguinte
0

Descobri que, se eu tenho uma imagem e algum texto dentro de a div, posso usá-lo text-align:centerpara alinhar o texto e a imagem de uma só vez.

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

MadPhysicist
fonte
0

Às vezes, adicionamos diretamente o conteúdo e as imagens no administrador do WordPress dentro das páginas. Quando inserimos as imagens dentro do conteúdo e queremos alinhar esse centro. O código é exibido como:

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

Nesse caso, você pode adicionar conteúdo CSS como este:

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

Usar:

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

Eu acho que esse é o caminho para centralizar uma imagem no framework Laravel.

Manjitha teshara
fonte
0
.img-container {
  display: flex;
}

img {
  margin: auto;
}

isso fará com que o centro da imagem seja vertical e horizontalmente

Anupama
fonte