缩小图像以适应网页底部的剩余空间

问题描述 投票:0回答:1

我想在某些文字下方显示照片。我希望照片水平居中,并根据需要缩小以适应文本末尾和浏览器窗口底部边缘之间剩余的矩形空间。如果有足够的空间,它不应放大到超过原始大小的 100%。 永远不需要出现滚动条。

这是一个演示。注意事项:

  • html,如样式所示,始终等于窗口内的空间。这是我不想超越的空间。
  • 我将 body margin 设置为零,这样它就会叠加 html 空间(否则,默认边距会将 body 向下向右移动,延伸到 html 区域之外并激活滚动条)。
  • 我在内部定义了一个 div (.outer-div) 并叠加在主体上。这给了我一个保证不具有任何用户代理样式的容器。我恢复了左侧和右侧的边距,使其在主体内对称地变窄。我用 display:flexflex-flow:column 定义它,因为有人说:-)
  • 我创建了一个弹性项目 .inner-fixed-div,以包含页面顶部的文本。
  • 我创建了另一个弹性项目 .inner-remaining-div,以占据文本下方未使用的矩形空间。它是图像必须适合的容器。根据我尝试应用的 Flex 解决方案,它设置为 flex-grow: 1
  • 我为图片创建一个容器,.picture-div。 display: inline-block 使其响应其容器的 text-align: center
  • 最后,img的样式为width:100%height:auto,我理解这会缩放图像以适合其容器,并保留纵横比。

向导建议的大多数重复问题都与页面底部多余的空白有关。 这个答案依赖于神奇的数字;即页面各个组件的像素大小。我不想要一个需要知道任何东西的绝对大小的解决方案 - 必须有一种自我维护的方法来做到这一点。

抱歉,这没有使用“代码片段”的东西。无论出于何种原因,突然这个编辑器没有向我显示该选项(也许是因为我正在使用询问向导?)

/* The outlines are all "inside-outlines": their negative offset makes
         their *outer* edges trace the container. This is done because
         otherwise the outline of the outermost container, HTML, would not
         be visible on the north and west sides of the window */

html {
  height: 100%;
  width: 100%;
  /* Outline shows that "html" always exactly fits the window */
  outline: 4px double black;
  outline-offset: -4px;
}

body {
  margin: 0;
  /* prevent body from displacing to the southeast */
  height: 100%;
  /* body should perfectly superimpose the html */
  width: 100%;
  outline: 4px dashed;
  outline-color: rgba( 255 0 0 / 1);
  outline-offset: -4px;
}

.outer-div {
  display: flex;
  flex-flow: column;
  height: 100%;
  /* Now create left/right margins */
  margin: 0 0.5em;
}

.inner-fixed-div {
  outline: 4px dotted blue;
  outline-offset: -2px;
}

.inner-remaining-div {
  text-align: center;
  flex-grow: 1;
}

.picture-div {
  outline: 4px dashed fuchsia;
  outline-offset: -4px;
  /* Enable to respond to parent's text-align */
  display: inline-block;
}

.picture-div-img {
  outline: 4px dashed purple;
  outline-offset: -4px;
  width: 100%;
  height: auto;
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>

<body>
  <div class="outer-div">
    <div class="inner-fixed-div">
      <h1>Static portion</h1>
      <p>
        Lorem ipsum odor amet, consectetuer adipiscing elit. Per dignissim arcu imperdiet accumsan suscipit. Nisl donec ultrices dui fames dapibus neque sollicitudin vitae. Ut parturient elementum cursus sodales sem sed praesent parturient. Rutrum ultricies erat
        finibus taciti ante feugiat dictumst dictum. Imperdiet lobortis penatibus non imperdiet ridiculus ac gravida. Platea lobortis tempor tempus lacus dui felis.
      </p>
      <h2>Remaining space will contain a photo, scaled down to fit if necessary
      </h2>
      <p>
        The remaining space should be precisely bounded by the HTML container (the thick dashed black outline). The photo should be centered, should scale dynamically while maintaining aspect as the window dimensions are changed. <i>There should be no need for
          scrollbars.</i>
      </p>
    </div>
    <div class="inner-remaining-div">
      <div class="picture-div">
        <img src="https://placehold.co/600x400?text=600+x+400\npx" class="picture-div-img">
      </div>
    </div>
  </div>
</body>

</html>

html css scale
1个回答
0
投票

我不知道我的回答是否能完美解决您的问题,但我推荐这个...

使用图像作为

div
CSS 背景,而不是直接使用
img
元素。

然后你可以使用

inner-remaining-div
CSS 属性来限制
max-*
宽度和高度,如下所示:

.inner-remaining-div
{
   width: 100%;
   height: auto;
   max-height: 400px;
   background-image: 'https://placehold.co/600x400?text=600+x+400\npx';
   background-position: bottom;
}

将背景图像与

bottom
对齐将使图像底部和 div 底部完美贴合。但是,如果您的图像超出了
max-height
,超出的图像顶部将会丢失/隐藏。

将背景图像与

top
对齐将使图像的顶部和 div 的顶部完美贴合。但是,如果您的背景图像超过
max-height
,超出的图像底部将会丢失/隐藏。

我还建议您阅读以下链接:

https://developer.mozilla.org/en-US/docs/Web/CSS/background-position

那里有一些很好的例子和一个游乐场......

您也可以使用

img
元素,但您必须使用大量 JavaScript 并在
overflow:hidden
元素中使用
div
CSS 属性...(我不知道有什么更简单的方法)使用
img
元素实现此目的的方法)

© www.soinside.com 2019 - 2024. All rights reserved.