【问题标题】:Image captions and wrapping图片说明和包装
【发布时间】:2011-09-25 07:09:24
【问题描述】:

在图片下方添加标题的最佳方式是什么?图片及其标题将向右浮动,标题上的文本需要换行 - 200x200 像素的图片不应有宽度为 800 像素的标题。

我强烈希望有一种解决方案,它允许我更新图像(具有不同宽度)而不更改 CSS 或标记。

由于我无法控制的原因,图像本身也会向右浮动,但这应该不会太成问题。


图片代码为

<div class="floatright">
  <img alt="foo" src="bar.png" height="490" border="0" width="800">
</div>

我可以根据需要用 HTML/CSS 包装它。此页面上没有 JS。

【问题讨论】:

  • 你能显示示例标记吗?你能改变标记吗?你能用css,或者javascript吗?
  • @David Thomas:添加到问题中。没有 Javascript,但我可以在上面的 &lt;div&gt; 周围添加 HTML 和内联 CSS。
  • 您是否总是要像那样明确指定图像的宽度和高度,还是打算简单地放入图像并根据图像大小设置标题格式?
  • @Town:放入图片。将添加带有图像大小的整个 &lt;div&gt;,我的代码不会“看到”它。

标签: html


【解决方案1】:

figure {
  display: table;
}

figcaption {
  display: table-caption;
  caption-side: bottom;
}
<figure>
  <img src="https://picsum.photos/200/50" />
  <figcaption>This is a caption of slightly longer length. It should wrap, regardless of the size of the image.</figcaption>
</figure>

您可以将figurefigcaption 替换为divp,或者任何其他容器漂浮在您的语义船上。

无耻插件:我在博客上讨论了这个问题,如果你感兴趣的话,my solution here

【讨论】:

    【解决方案2】:

    纯 HTML/CSS 内联样式。

    <div style="width:40%;
                margin-right:6%;
                float: left;">
    
      <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/26/Papilio_machaon_Mitterbach_01.jpg/500px-Papilio_machaon_Mitterbach_01.jpg" width="100%">
      <p style="color:gray; 
                background-color:#eee;
                margin-top:-4px;
                width:100%;
                height:auto;
                padding-top:10px;
                padding-bottom:10px;
                text-align:center;">
    
        <span style="padding-right:10px;
                     padding-left:10px;"> Butterfly </span></p>
    
    </div>
    
    <!-- NEXT ONE -->
    
    <div style="width:40%;
                float: left;">
    
      <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/26/Papilio_machaon_Mitterbach_01.jpg/500px-Papilio_machaon_Mitterbach_01.jpg" width="100%">
      <p style="color:gray; 
                background-color:#eee;
                margin-top:-4px;
                width:100%;
                height:auto;
                padding-top:10px;
                padding-bottom:10px;
                text-align:center;">
    
        <span style="padding-right:10px;
                     padding-left:10px;"> Butterfly </span></p>
    
    </div>
    
    <div style="clear:all;"></div>
    
    <!-- NEXT ROW -->
    
    
    <div style="width:40%;
                margin-right:6%;
                float: left;">
    
      <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/26/Papilio_machaon_Mitterbach_01.jpg/500px-Papilio_machaon_Mitterbach_01.jpg" width="100%">
      <p style="color:gray; 
                background-color:#eee;
                margin-top:-4px;
                width:100%;
                height:auto;
                padding-top:10px;
                padding-bottom:10px;
                text-align:center;">
    
        <span style="margin-top:0px;
                     padding-right:10px;
                     padding-left:10px;"> Butterfly </span></p>
    
    </div>
    
    <!-- NEXT ONE -->
    
    <div style="width:40%;
                float: left;">
    
      <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/26/Papilio_machaon_Mitterbach_01.jpg/500px-Papilio_machaon_Mitterbach_01.jpg" width="100%">
      <p style="color:gray; 
                background-color:#eee;
                margin-top:-4px;
                width:100%;
                height:auto;
                padding-top:10px;
                padding-bottom:10px;
                text-align:center;">
    
        <span style="padding-right:10px;
                     padding-left:10px;"> Butterfly </span></p>
    
    </div>
    
    <div style="clear:all; height:100px;">&nbsp;</div>

    【讨论】:

      【解决方案3】:

      这是当前浏览器的一个已知问题。 atlavis 解决方案是最简单的。直到所有浏览器都实现了图形标签,Feeela 的方式才会奏效。但即便如此,它也不会向后兼容。我连续搜索了 3 天这个问题,我真的很讨厌那些让 CSS 决定剥离向后兼容的表格的人。

      您可以在类上使用display: table-cell 属性。但 IE 6 或 7 不支持。

      【讨论】:

        【解决方案4】:

        基本思想是用&lt;img&gt;标签和&lt;p&gt;标签制作一个&lt;div&gt;

        <div class="photo">
          <img src="someimage.jpg">
          <p>my caption
        </div>
        

        现在您只需设置两种样式。一个用于 img 标签,另一个用于 photo 类的 p 标签。

        创建一个类命名它的照片:

        .photo {float: right;width: 210px;margin: 0 10px 10px 10px;}
        img.photo {float: right;margin-left: 10px;margin-bottom: 10px;border: 1px solid #666;
        

        内边距:10px;}

        结论: 1.一个带有&lt;img&gt;标签和&lt;p&gt;标签的div。 2. div 应该有一个类,&lt;p&gt;&lt;img&gt; 标签的样式不同。

        【讨论】:

        • 我不知道给定图像的宽度。 (一方面,我会在几张不同宽度的图像上使用它。)
        【解决方案5】:

        您也可以使用HTML5 figure and figcaption elements 并按照@Wasim 的建议设置样式。

        <figure>
            <img src="/test.jpg" alt="a test-image">
            <figcaption>Description</figcaption>
        </figure>
        

        另一种(不是跨浏览器的)方法是使用 img 标题属性并通过 CSS 将其作为伪元素插入:

        #content img[title]:after {
            content: "[" counter(image) "] " attr(title);
            counter-increment: image;
            display: block;
            text-align: center; }
        

        【讨论】:

          【解决方案6】:

          类似这样的:http://jsfiddle.net/QLcRC/ ?

          【讨论】:

          • 嗯...很好。但标题与周围的文字重叠。
          • 好的,我可以通过用另一个&lt;div&gt; 包装您提供的所有内容来完成这项工作,然后将&lt;p&gt;clear:right 添加为它的最后一个子项。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多