Como escrever uma legenda sob uma imagem?

126

Eu tenho duas imagens que precisam ser mantidas em linha; Quero escrever uma legenda sob cada imagem.

<center>
   <a href="http://example.com/hello">
       <img src="hello.png" width="100px" height="100px">
   </a>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
   <a href="http://example.com/hi">
       <img src="hi.png" width="100px" height="100px">
   </a>
</center>

Como posso implementar?

Samrat Mazumdar
fonte
8
@ceejayoz para não mencionar tudo, &nbspem vez de definir uma margem ou usar outras ferramentas de layout css.
jzworkman
Embora isso tenha sido respondido essencialmente, a única maneira de encontrar uma legenda para caber na largura de uma imagem embutida é codificar a propriedade width em um wrapper ou na própria legenda.
MyNameIsKo
2
@McGarnagle não edita o significado do código nas postagens de outras pessoas. A formatação é boa (a menos que seja python), mas todo o conteúdo do código é importante! Graças à sua edição, a postagem do jxworkmans parecia sem sentido. E, na verdade, consertar código errado em questão é um absurdo completo. Qual seria o ponto de respostas então?
Tomáš Zato - Restabelece Monica

Respostas:

275

Forma e figcaption tags:

<figure>
    <img src='image.jpg' alt='missing' />
    <figcaption>Caption goes here</figcaption>
</figure>

Tem que amar HTML5.


Veja amostra

McGarnagle
fonte
1
Você precisará de um calço HTML5 para a maior parte do IE.
ceejayoz
10
Essas tags não ajudam em nada. Eles são apenas marcações fictícias e você precisa fazer todo o trabalho em CSS (e / ou com outras tags HTML). E você precisa de uma operação extra para criar versões antigas do IE para reconhecê-las mesmo como tags falsas. Portanto, é mais simples usar divou span.
Jukka K. Korpela
15
@ JukkaK.Korpela Essas tags são muito importantes. stackoverflow.com/a/17272444/756329 e html5doctor.com/lets-talk-about-semantics
Joseph Hansen
3
O problema é este: [figures] can be moved to another page or to an appendix without affecting the main flow. <figure>e <figcaption>não são substituições de uso geral para imagens com legendas. Eles se aplicam apenas a figuras. Se você (por exemplo) tiver um tutorial passo a passo composto por parágrafos misturados com fotos com legendas, pode ser importante que as imagens sejam apresentadas nas mesmas quebras de parágrafo definidas no html. Portanto <figure>, não seria aplicável aqui (como eu entendo).
Ponkadoodle
Eu acrescentaria que essas linhas não colocam necessariamente uma legenda sob uma imagem. O HTML fornecido aqui descreve o conteúdo, mas a aparência é afetada / determinada pelo CSS.
Jvriesem # 03:
21

CSS

#images{
    text-align:center;
    margin:50px auto; 
}
#images a{
    margin:0px 20px;
    display:inline-block;
    text-decoration:none;
    color:black;
 }

HTML

<div id="images">
    <a href="http://xyz.com/hello">
        <img src="hello.png" width="100px" height="100px">
        <div class="caption">Caption 1</div>
    </a>
    <a href="http://xyz.com/hi">
        <img src="hi.png" width="100px" height="100px"> 
        <div class="caption">Caption 2</div>
    </a>
</div>

Um violino está aqui.

The Alpha
fonte
7
<div style="margin: 0 auto; text-align: center; overflow: hidden;">
  <div style="float: left;">
    <a href="http://xyz.com/hello"><img src="hello.png" width="100px" height="100px"></a>
    caption 1
  </div>
 <div style="float: left;">
   <a href="http://xyz.com/hi"><img src="hi.png" width="100px" height="100px"></a>
   caption 2                      
 </div>
</div>
Greg B
fonte
7

Coloque a imagem - digamos que sua largura seja 140 px - dentro de um link:

<a><img src='image link' style='width: 140px'></a>

Em seguida, coloque a legenda em a e ofereça uma largura menor que a sua imagem, centralizando-a:

<a>
  <img src='image link' style='width: 140px'>
  <div style='width: 130px; text-align: center;'>I just love to visit this most beautiful place in all the world.</div>
</a>

Em seguida, na tag do link, estilize o link para que ele não pareça mais um link. Você pode dar a cor que desejar, mas remova qualquer decoração de texto que seus links possam conter.

<a style='text-decoration: none; color: orange;'>
  <img src='image link' style='width: 140px'>
  <div style='width: 130px; text-align: center;'>I just love to visit this most beautiful place in all the world.</div>
</a>

Embrulhei a imagem com a legenda em um link para que nenhum texto pudesse empurrar a legenda para fora do caminho: a legenda está vinculada à imagem pelo link. Aqui está um exemplo: http://www.alphaeducational.com/p/okay.html

Susie
fonte
1
Tags de bloco como <div>não são permitidas dentro de tags embutidas como <a>- você deve usar <span>para as legendas.
mindplay.dk
Substituir <div> por <span> falha totalmente no exemplo de @ TheAlpha. Parece que você precisa de <div>.
1111 Pierre
@ mindplay.dk Acho que, como o amodelo de conteúdo da tag é transparente, ele pode aceitar todos os filhos que a tag pai puder (exceto o conteúdo interativo). Corrija-me se eu estiver errado? Eu quero aprender. w3.org/TR/html5/text-level-semantics.html#the-a-element
Chris Bier
2

CSS é seu amigo; não é necessário o tag central (para não mencionar que é bastante depreciado) nem os espaços sem quebra excessivos. Aqui está um exemplo simples:

CSS

.images {
    text-align:center;
}
.images img {
    width:100px;
    height:100px;
}
.images div {
    width:100px;
    text-align:center;
}
.images div span {
    display:block;
}
.margin_right {
    margin-right:50px;
}
.float {
    float:left;
}
.clear {
    clear:both;
    height:0;
    width:0;
}

HTML

<div class="images">
    <div class="float margin_right">
        <a href="http://xyz.com/hello"><img src="hello.png" width="100px" height="100px" /></a>
        <span>This is some text</span>
    </div>
    <div class="float">
        <a href="http://xyz.com/hi"><img src="hi.png" width="100px" height="100px" /></a>
        <span>And some more text</span>
    </div>
    <span class="clear"></span>
</div>
faino
fonte
2

Para imagens responsivas. Você pode adicionar as tags de imagem e de origem na tag de figura.

<figure>
  <picture>
    <source media="(min-width: 750px)" srcset="images/image_2x.jpg"/>
    <source media="(min-width: 500px)" srcset="images/image.jpg" />
    <img src="images.jpg" alt="An image">
  </picture>
  <figcaption>Caption goes here</figcaption>
</figure>
Pat M
fonte
0

Para ser mais semanticamente correto e responder à pergunta original dos OPs sobre o alinhamento lado a lado, eu usaria isso:

HTML

<div class="items">
<figure>
    <img src="hello.png" width="100px" height="100px">
    <figcaption>Caption 1</figcaption>
</figure>
<figure>
    <img src="hi.png" width="100px" height="100px"> 
    <figcaption>Caption 2</figcaption>
</figure></div>

CSS

.items{
text-align:center;
margin:50px auto;}


.items figure{
margin:0px 20px;
display:inline-block;
text-decoration:none;
color:black;}

https://jsfiddle.net/c7borg/jLzc6h72/3/

c7borg
fonte
0

A <figcaption>tag em HTML5 permite inserir texto na sua imagem, por exemplo:

<figcaption>
Your text here
</figcaption>.

Você pode usar CSS para posicionar o texto onde deveria estar na imagem.

Vee5
fonte
-3
<table>
<tr><td><img ...><td><img ...>
<tr><td>caption1<td>caption2
</table>

Modele conforme desejado.

Jukka K. Korpela
fonte
6
Eu nunca faria isso. A pessoa está solicitando conselhos de apresentação e não como exibir o conteúdo em formato de tabela.
Mike Kormendy