html - 如何根据文本量缩小某些文本上方的图像?

标签 html css

我想在某些文本上方显示图像。文本可以很长也可以很短。在每种情况下,我都希望文本贴在容器的底部,并在必要时缩小其上方的图像,以便两个元素始终适合容器高度的 100%。如有必要,图像可以缩小到非常小,但我不希望它超出其自然的 100% 宽度或高度。

使用 position: absolute; 我已经接近我想要的行为了; bottom: 0; 但这只能确保文本从所需位置开始,并且不会调整其上方图像的大小。我怎样才能做到这一点?

#container {
  height: 100vh;
  width: 100vw;
  position: relative;
}
div.image-content img {
  /* how to force vertical resize? */
  max-height: 100%;
  max-width: 100%;
}
div.copy-content {
  /*this fixes the text but the image does not resize */
  position: absolute;
  bottom: 0;
}
<div id="container">

  <!--image-->
  <div class="image-content">
    <img src="http://i.imgur.com/cFypFxX.jpg" alt="Cat">
  </div>

  <!--text-->
  <div class="copy-content">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper
      porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh.
      Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, suscipit quis, luctus non, massa. Fusce ac turpis quis ligula lacinia aliquet. Mauris
      ipsum. Nulla metus metus, ullamcorper vel, tincidunt sed, euismod in, nibh.</p>
  </div>
</div>

更新:在这里,我已经通过使用背景图像策略接近了,但问题是我不希望我的图像超出其自然的 100% 宽度或高度(如果容器超出的话)。 background-size: contain; 是当图像必须缩小时我想要的,而 background-size: auto 是当容器大于图像时我想要的:

html,
body {
  width: 100%;
  height: 100%;
}
#container {
  height: 100%;
  width: 100%;
}
div.image-content {
  background: url(https://placeholdit.imgix.net/~text?txtsize=33&txt=300%C3%97150&w=300&h=150);
  
  /* desired behavior when div is LESS THAN image height */
  background-size: contain; 
  
  /* desired behavior when div is GREATER THAN image height */
  /*background-size: auto; */
  
  background-position: center;
  background-repeat: no-repeat;
  height: 100%;
  width: 100%;
}
div.copy-content {}
<div id="container">

  <!--image-->
  <div class="image-content">
    <!-- <img src="http://i.imgur.com/cFypFxX.jpg" alt="Cat"> -->
  </div>

  <!--text-->
  <div class="copy-content">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper
      porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh.
      Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, suscipit quis, luctus non, massa. Fusce ac turpis quis ligula lacinia aliquet. Mauris
      ipsum. Nulla metus metus, ullamcorper vel, tincidunt sed, euismod in, nibh. Quisque volutpat condimentum velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam nec ante. Sed lacinia, urna non tincidunt
      mattis, tortor neque adipiscing diam, a cursus ipsum ante quis turpis. Nulla facilisi. Ut fringilla. Suspendisse potenti. Nunc feugiat mi a tellus consequat imperdiet. Vestibulum sapien. Proin quam. Etiam ultrices. Suspendisse in justo eu magna
      luctus suscipit. Sed lectus. Integer euismod lacus luctus magna. Quisque cursus, metus vitae pharetra auctor, sem massa mattis sem, at interdum magna augue eget diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia
      Curae; Morbi lacinia molestie dui. Praesent blandit dolor. Sed non quam. In vel mi sit amet augue congue elementum. Morbi in ipsum sit amet pede facilisis laoreet. Donec lacus nunc, viverra nec.d</p>
  </div>
</div>

此外,由于 SO 片段似乎不允许您调整输出窗口的大小,这里是一个 jsFiddle:same snippet in jsFiddle

最佳答案

通过混合使用 inline-block 元素、绝对定位和间隔 hack,您应该能够使用 css 实现此目的

/* make container as big as it's content */

.container,
.copy-content,
.copy-content p {
  display: inline-block;
  position: relative;
}
.image {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  width: 100%;
}
.spacer {
  display: block;
  padding-top: 50%;  /* this is specific to the image - worked out by height / width and keeps the spacer in ratio with the image */
  width: 100%;
}
<div class="container">
  <span class="spacer"></span>

  <!--image-->
  <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=300%C3%97150&w=300&h=150" alt="sports" class="image">

  <!--text-->
  <div class="copy-content">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper
      porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh.
      Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, suscipit quis, luctus non, massa. Fusce ac turpis quis ligula lacinia aliquet. Mauris
      ipsum. Nulla metus metus, ullamcorper vel, tincidunt sed, euismod in, nibh.</p>
  </div>
</div>
<br>
<br>


<div class="container">
  <span class="spacer"></span>

  <!--image-->
  <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=300%C3%97150&w=300&h=150" alt="sports" class="image">

  <!--text-->
  <div class="copy-content">
    <p>Lorem ipsum dolor.</p>
  </div>
</div>
<br>
<br>


<div class="container">
  <span class="spacer"></span>

  <!--image-->
  <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=300%C3%97150&w=300&h=150" alt="sports" class="image">

  <!--text-->
  <div class="copy-content">
    <p>Lorem ipsum dolor. Sed convallis tristique sem.</p>
  </div>
</div>

如果你愿意,你可以将图像作为背景图像放在间隔物上,而不是绝对定位它

关于html - 如何根据文本量缩小某些文本上方的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39727574/

相关文章:

javascript - 用于数据选择的多个 TreeView

html - 如何使这些图像以它们需要的方式响应?

php - 将 csv 文件转换为 PHP 二维数组

javascript - 如何在 Android 移动设备上运行通用 Windows 平台桌面应用程序?

css - 如何在CSS中放置横幅?

angular - 在运行时显示类调用时如何处理

html - 我怎样才能让 2 个 <div> 居中?

jquery - 表格的条件格式

html - 使用标签/ anchor 链接时页面顶部略有截断(仅限 FF)

css - 在子菜单中创建纯 CSS 下拉子菜单的问题