Comment écrire une légende sous une image?

126

J'ai deux images qui doivent rester en ligne; Je veux écrire une légende sous chaque image.

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

Comment puis-je mettre en œuvre?

Samrat Mazumdar
la source
8
@ceejayoz pour ne pas mentionner tout le &nbspcontraire, par opposition à la définition d'une marge ou à l'utilisation d'autres outils de mise en page css.
jzworkman
Bien que cela ait essentiellement été répondu, le seul moyen que j'ai trouvé pour obtenir une légende adaptée à la largeur d'une image en ligne est de coder en dur la propriété width sur un wrapper ou la légende elle-même.
MyNameIsKo
2
@McGarnagle ne modifie pas la signification du code dans les messages d'autres personnes. Le formatage est OK (enfin sauf si c'est python), mais tout le contenu du code est important! Grâce à votre modification, le message de jxworkmans n'avait pas de sens. Et vraiment, réparer le mauvais code en question est un non-sens complet. Quel serait le point de réponses alors?
Tomáš Zato - Réintégrer Monica

Réponses:

275

Balises Figure et Figcaption :

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

Je dois aimer HTML5.


Voir un échantillon

McGarnagle
la source
1
Cependant, vous aurez besoin d'un shim HTML5 pour la plupart des IE.
ceejayoz
10
Ces balises n'aident en aucune façon. Ce ne sont que des balises factices et vous devez faire tout le travail en CSS (et / ou avec d'autres balises HTML). Et vous avez besoin d'une opération supplémentaire pour créer d'anciennes versions d'IE afin de les reconnaître même en tant que balises factices. Il est donc plus simple d'utiliser divou span.
Jukka K. Korpela
15
@ JukkaK.Korpela Ces balises sont très importantes. stackoverflow.com/a/17272444/756329 et html5doctor.com/lets-talk-about-semantics
Joseph Hansen
3
Le problème est le suivant: [figures] can be moved to another page or to an appendix without affecting the main flow. <figure>et <figcaption>ne sont pas des remplacements généraux pour les images avec des légendes. Ils ne s'appliquent qu'aux chiffres. Si vous (par exemple) avez une procédure pas à pas composée de paragraphes mélangés à des photos légendées, il peut être important que les images soient présentées aux mêmes sauts de paragraphe que ceux définis dans le html. Par conséquent <figure>, ne serait pas applicable ici (si je comprends bien).
Ponkadoodle
J'ajouterais que ces lignes ne placent pas nécessairement une légende de figure sous une image. Le HTML donné ici décrit le contenu, mais l'apparence est affectée / déterminée par CSS.
jvriesem
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>

Un violon est là.

L'Alpha
la source
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
la source
7

Mettez l'image - disons que sa largeur est de 140px - à l'intérieur d'un lien:

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

Ensuite, mettez la légende dans a et donnez-lui une largeur inférieure à votre image, tout en la centrant:

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

Ensuite, dans la balise de lien, stylisez le lien de sorte qu'il ne ressemble plus à un lien. Vous pouvez lui donner la couleur de votre choix, mais supprimez simplement toute décoration de texte que vos liens peuvent porter.

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

J'ai enveloppé l'image avec sa légende dans un lien afin qu'aucun texte ne puisse écarter la légende: la légende est liée à l'image par le lien. Voici un exemple: http://www.alphaeducational.com/p/okay.html

Susie
la source
1
Les balises de bloc comme <div>ne sont pas autorisées à l'intérieur des balises en ligne comme <a>- vous devez les utiliser <span>pour les légendes.
mindplay.dk
Le remplacement de <div> par <span> échoue totalement dans l'exemple de @ TheAlpha. Il semble que vous ayez besoin de <div>.
Pierre du
@ mindplay.dk Je pense que parce que le amodèle de contenu de la balise est transparent, il peut accepter tous les enfants que la balise parent peut (sauf pour le contenu interactif). Corrige moi si je me trompe? Je veux apprendre. w3.org/TR/html5/text-level-semantics.html#the-a-element
Chris Bier
2

CSS est votre ami; il n'y a pas besoin de la balise centrale (sans oublier qu'elle est assez dépréciée) ni des espaces insécables excessifs. Voici un exemple simple:

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
la source
2

Pour des images réactives. Vous pouvez ajouter les balises image et source dans la balise figure.

<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
la source
0

Pour être plus sémantiquement correct et répondre à la question originale des OP sur leur alignement côte à côte, j'utiliserais ceci:

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
la source
0

La <figcaption>balise en HTML5 vous permet de saisir du texte dans votre image par exemple:

<figcaption>
Your text here
</figcaption>.

Vous pouvez ensuite utiliser CSS pour positionner le texte là où il devrait être sur l'image.

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

Style comme vous le souhaitez.

Jukka K. Korpela
la source
6
Je ne ferais jamais ça. La personne demande des conseils de présentation et non comment afficher le contenu sous forme de tableau.
Mike Kormendy