css 如何使的宽度与其标记内< figcaption>的宽度匹配< img>< figure>?

7fhtutme  于 2023-03-05  发布在  其他
关注(0)|答案(6)|浏览(262)

听着,我有个密码:

<figure>
 <img src="bunnyrabbit.jpg" width="200" height="150" alt="An image of a bunny rabbit." />
 <figcaption>Bunny rabits are cuddly and fluffy creatures with big ears. They eat carrots.</figcaption>
</figure>

如果我不使用任何CSS,figcaption会将图形元素的宽度扩展到200px以上。我该如何防止这种情况?
我知道我可以通过指定figcaption元素的宽度(<figure style="width:200px;">)来强制figcaption中的文本换行,但我并不真的想对每一张图片都这样做。

iibxawm4

iibxawm41#

添加这个代码到<figure><figcaption> CSS属性帮助我解决了同样的问题。而且,它保留了你的图片和标题的响应。

figure { display: table; }

figcaption { display: table-caption; caption-side: bottom ; }

1.添加display: table;设置了阶段。
1.单独添加display: table-caption;会将标题放置在图像顶部,caption-side属性指定表格标题在bottom处的位置,top是默认值。

ndh0cuux

ndh0cuux2#

这将使figcaptionimg并排放置:

figure {
    display: table;
}
img, figcaption {
    display: table-cell;
    vertical-align: bottom;
}
figcaption {
    padding-left: 4px;
}

Here's an example。但是我不完全清楚你想要达到什么目的--你在问题中说你希望figure保持在200 px的宽度,但随后你又说你希望figcaption出现在右边,这会使figure变宽。如果你想要的只是将figcaption限制在图像的宽度,this should work

figure {
    display: table;
    width: 1px; /* This can be any width, so long as it's narrower than any image */
}
img, figcaption {
    display: table-row;
}
rbl8hiat

rbl8hiat3#

另一种解决方案:使用固有宽度

只需在figure元素上设置width: min-content;

DEMO(IE除外)

figure {
  width: -webkit-min-content;
  width: -moz-min-content;
  width: min-content;
}
<figure>
  <img src=" http://placehold.it/200x150" width="200" height="150" alt="An image of a bunny rabbit." />
  <figcaption>Bunny rabits are cuddly and fluffy creatures with big ears. They eat carrots.</figcaption>
</figure>
s71maibg

s71maibg4#

不幸的是,设置图形的宽度而不是使用max-width: 100%意味着它在窄的(移动的)设备上不会缩小。也就是说,图像不会是responsive。我求助于插入<br />来分解长的标题,但我不喜欢它。但这个晦涩的CSS特性似乎对我很有效:
figcaption { display: run-in; width: 150px }
这样可以保持图片的响应性,即使标题没有。你可以选择你自己的标题宽度。我还添加了margin: auto; text-align: center;来使标题在移动终端上居中。

wyyhbhjk

wyyhbhjk5#

这真的让我很困扰,因为我想找到一个答案来适应HTML5的升级,它将成功地取代我原来显示图像和标题的设置-一个有两行的表格(如果没有标题可用,则为一行)。
我的解决方案可能并不适用于所有人,但到目前为止,它似乎在主要浏览器(O,FF,IE,S,C)中运行良好,并在移动的设备上具有响应能力:

figure {
border: 0px solid #000;
display: table;
width: 0;
}

这里的想法是figure是由img的宽度推出来的,所以不需要任何方向。

figure img {
display: block;
}

这是用来消除img底部和figure底部之间无用的、难看的间隙。

figcaption {
text-align: left;
}

现在,该图已经被打开到足以让img进入的宽度,figcaption文本只有有限的空间可以存在。text-align不是此解决方案正常工作所必需的。
此解决方案与display: table-caption一样有效,但figcaption包含在任何可能需要设置的边框或背景值中。

zujrkrfu

zujrkrfu6#

figure {
    display: inline-grid;
    grid-template-columns: 1fr;
    grid-template-rows: auto auto;
}

figcaption {
    width: 0;
    min-width: 100%;
}

演示:https://codepen.io/kartofelek007/pen/rNZWpjp
你也可以用这个技巧来计算身高:https://codepen.io/kartofelek007/pen/LYQJJPR

相关问题