Esta é uma tradução. Ela pode conter erros ou estar desatualizada em relação à versão original em inglês. Tradutor(a): Maurício "Maujor®" Samy Silva
Ver index para todas as dicas.
Nesta página:
A HTML5 criou um elemento destinado a inserir legenda em uma imagem. (Adiante mostraremos uma técnica que permite inserir legendas com uso da HTML4.)
<figure> <p><img src="eiffel.jpg" width="136" height="200" alt="Torre Eiffel"> <figcaption>Miniatura da torre Eiffel no Parque Mini-France</figcaption> </figure>
Para posicionar a imagem à direita em uma largura igual a 30% da largura dos parágrafos em volta usamos a seguinte regra CSS:
figure { float: right; width: 30%; text-align: center; font-style: italic; font-size: smaller; text-indent: 0; border: thin silver solid; margin: 0.5em; padding: 0.5em; }
Na realidade apenas as duas primeiras declarações (float e width) são suficientes, as demais têm efeito puramente decorativo.
Existe um problema com a imagem da torre Eiffel mostrada no item anterior. Observe que ela foi definida com largura fixa de 136 px e o elemento figure que a contém com largura igual a 30%. Se você redimensionar a largura da janela acabara atingindo uma largura na qual os 30% se tornam menor do que 136 px, fazendo com que a imagem ultrapasse o container (overflow da imagem). Redimensione a janela para uma largura pequena e observe este comportamento.
Caso você conheça a largura de todas as imagens no documento você poderá criar uma regra CSS definindo uma largura mínima para o elemento figure como mostrado a seguir:
figure { min-width: 150px; }
Outra técnica para evitar o overflow da imagem é redimensionar a própria imagem, conforme fizemos com a imagem do forte St. Tropez à direita. Você pode constatar o redimensionamento da imagem redimensionando a janela do navegador. Imagens JPEG degradam quando redimensionadas, o que não acontece se a imagem for um diagrama ou um gráfico no formato SVG que escalam muito bem e sem degradar. Observe a seguir a marcação HTML usada no exemplo deste item:
<figure> <p><img class=scaled src="st-tropez.jpg" alt="St. Tropez"> <figcaption>Forte em Saint Tropez ao por do sol</figcaption> </figure>
E, a folha de estilo:
figure { float: right; width: 30%; text-align: center; font-style: italic; font-size: smaller; text-indent: 0; border: thin silver solid; margin: 0.5em; padding: 0.5em; } img.scaled { width: 100%; }
A única diferença para a folha de estilo do exemplo anterior foi o acréscimo da segunda regra de estilo: ela define a imagem com a largura igual a largura do elemento figure (largura dentro da área da borda e do padding do elemento).
A HTML prevê que o elemento figcaption seja o primeiro ou o último elemento dentro do container e com isso, sem necessidade de qualquer declaração CSS a legenda será posionada em cima ou embaixo da imagem respectivamente.
Contudo independentemente da posição do elemento figcaption na marcação podemos posicionar a legenda com uso de CSS. Neste caso você consegue o posicionamento declarando que o elemento figure seja renderizado como tabela sendo a imagem sua única célula e a legenda como uma legenda de tabela (table caption). Tudo conforme mostrado na folha de estilo a seguir:
figure { display: table; } figcaption { display: table-caption; caption-side: top; }
Nesta página usamos uma borda cinza ao redor do elemento figure. Infelizmente quando usamos a técnica do "table layout" que acabamos de mostrar há necessidade de se definir aquela borda de forma diferente pois, neste caso, por padrão a legenda é renderizada fora da borda da tabela. Para resolver este problema declaramos parte da borda no próprio elemento figcaption como mostrado a seguir:
figure { border-top: none; padding-top: 0; } figcaption { padding: 0.5em; border: thin silver solid; border-bottom: none; }
Miniatura da torre Eiffel no Parque Mini-France
A HTML4, ao contrário da HTML5, não prevê um elemento específico para inserir legendas em imagens. Esta funcionalidade foi proposta (ver HTML3), mas não foi implementada na HTML4. Observe a seguir uma maneira de simular o elemento figure:
<div class=figure> <p><img src="eiffel.jpg" width="136" height="200" alt="Torre Eiffel"> <p>Miniatura da torre Eiffel no Parque Mini-France </div>
Nas CSS use a classe "figure" para formatar o DIV.figure da maneira que bem entender. Por exemplo: para flutuar o DIV à direita em uma largura igual a 30% da largura dos parágrafos em volta declare a folha de estilo mostrada a seguir:
div.figure { float: right; width: 30%; text-align: center; font-style: italic; font-size: smaller; text-indent: 0; border: thin silver solid; margin: 0.5em; padding: 0.5em; }
Na realidade apenas as duas primeiras declarações (float e width) são suficientes, as demais têm efeito puramente decorativo.
Se você conhece a largura de todas as imagens do documento, para evitar o overflow da imagem você poderá declarar uma largura mínima para o DIV tal como mostrado a seguir:
div.figure { min-width: 150px; }
Forte em Saint Tropez ao por do sol
Para redimensionar a imagem de acordo com a largura de DIV.figure (tal como fizemos com a imagem mostrada à direita), declare o atributo CLASS e defina mais uma regra CSS de modo semelhante ao que fizemos com o exemplo para HTML5 mostrado anteriomente. Observe a marcação para este caso:
<div class=figure> <p><img class=scaled src="st-tropez.jpg" alt="St. Tropez"> <p>Forte em Saint Tropez ao por do sol </div>
E, a folha de estilo:
div.figure { float: right; width: 30%; border: thin silver solid; margin: 0.5em; padding: 0.5em; text-align: center; font-style: italic; font-size: smaller; text-indent: 0; } img.scaled { width: 100%; }
A única diferença para a folha de estilo do exemplo anterior foi o acréscimo da segunda regra de estilo: ela define a imagem com a largura igual a largura do elemento DIV (largura dentro da área da borda e do padding do elemento).
O mar Mediterrâneo em Cap Ferrat
Para posicionar a legenda em cima acrescente as seguintes regras de estilos às regras mostradas nos itens anteriores:
div.figure { display: table; } div.figure p + p { display: table-caption; caption-side: top; }
O sinal de combinação CSS '+' casa com o elemento P que se segue a outro elemento P. Neste caso o segundo elemento P dentro do DIV, ou seja aquele que contém a legenda.
(Esta técnica pode "quebrar" em navegadores anteriores ao ano de 2003, especialmente quando usada para o redimensionamento da imagem como fizemos).
Tal como vimos anteriormente a borda cinza será renderizada ao redor da imagem somente. Para corrigir esse comportamento, colocando a borda ao redor da imagem e da legenda adicione as seguintes regras CSS:
div.figure { border-top: none; padding-top: 0; } div.figure p + p { padding: 0.5em; border: thin silver solid; border-bottom: none; }
Criado em 17 Janeiro 2001;
Atualizado dom 16 fev 2025 05:40:53