【问题标题】:Is it possible to force images to be a set height but still remain responsive?是否可以强制图像设置高度但仍保持响应?
【发布时间】:2015-10-08 01:13:50
【问题描述】:

我正在使用电影 API 来获取一些图像海报并将它们显示在网格中,问题是大约 10% 的海报与其余的大小不同,从而导致网格系统到处都是空白并导致其他图像跳下。

在这里你可以明白我的意思:

右上角标记为红色的海报导致带有布鲁斯威利斯的海报占据了上“行”的空间,从而完全破坏了浮动流程。

可以通过在网格元素上使用 inline-block 和没有浮动来修复跳下,但这会导致图像上方和下方的空白看起来很糟糕。

看起来是这样的:

这是我的标记:

<div class="row">
  <h1 class="text-center">Similar movies</h1>
  <div ng-repeat="movie in similarMovies" class="col-xs-12 col-sm-6 col-md-3 cut-off">
    <a href="#/movies/{{movie.id}}">
      <figure>
        <img ng-src="{{getSrc(movie.poster_path)}}" alt="{{movie.title}}" class="image enlarge">
      </figure>
    </a>
  </div>
</div>

为此,我正在使用 Bootstrap 的网格系统。

现在我的问题是,我能否以某种方式将海报设置为它所在的 div 高度的 100%,从而导致所有海报的高度相同,但在调整屏幕大小时仍然缩放属性?

我认为实现这一点的唯一方法是通过一些 hacky JavaScript 解决方案?

【问题讨论】:

  • 就我个人而言,我会反其道而行之。我会为每个图像设置一个高度和/或最大高度,因此
    的高度将由它们的内容决定。这也意味着,如果某些图像的分辨率较低,它们仍将被渲染为与所有其他图像相同的高度。
  • @KieranPotts 问题是它们来自 API,如果我必须为每个图像运行某种映射函数,感觉会减慢很多速度。
  • 问题很难理解,这个demo有帮助吗?
  • @Pangloss 我认为这很清楚,我尝试使用表格单元格,但是当您必须在 Angular 中使用 ng-repeat 循环出元素时效果不佳,然后我必须插入一个每 2-4 个元素的表格行取决于屏幕大小,它很快就变得一团糟。
  • @Chrillewoodz 不确定它应该是什么样子,那么表格布局可以解决高度问题吗?如果每行中有固定数量的图像,这听起来像是一个简单的循环,您也可以使用表格行,但我对角度知之甚少。

标签: javascript html css responsive-design


【解决方案1】:

如果您的 inline-block/no float 解决方案很接近,但问题只是图像上方和下方的空间,可能会有一些简单的修复。在没有看到实际的最终输出和工作页面示例的情况下,我将尝试解决该特定问题。

确保首先设置“figure”元素的样式,将边距设置为 0em 以覆盖大多数浏览器默认值,这将插入 1em 的顶部/底部边距,通常在侧面插入一些。

确保您的海报的 img 元素的样式设置为 line-height 为 0em,并且可能是 text-align:bottom(或您喜欢的 top)。

您也可以使用 overflow:hidden!important 设置两个元素的样式。

否则,您可以通过几种方式解决高度问题。如果您为包含父元素的元素设置了默认高度,则始终可以在图像上使用 min-height:100% 。或者为图像本身设置一个以像素或 em 为单位的最小高度,并订购一些属性。

最大高度:100% 高度:自动 最小高度:300px

如果您为 figure 或 div 元素设置了高度,您总是可以以不同的方式处理标记,而不是使用 figure 元素,而是使用背景尺寸:cover 用海报图像替换其他东西作为背景图像方法(考虑您可能希望图像的大小差异不会太大,例如高度差不超过 15-25%),如果您有一些内容要插入到容器中(链接)。

或者,背景尺寸:100%; background-repeat:no-repeat 会产生大致相同的结果。

另一种选择是,您可以为这个用例中的图像元素创建一个自定义的、非常小的响应式网格,而不是使用 Bootstrap。或者,尝试运行一个脚本,该脚本适用于从 API 中提取的图像,动态调整大小。您甚至可以先为图像分配一个具有统一高度和宽度的类,然后内联样式,并使用该样式来设置响应功能,因为它将覆盖已经设置的类。统一设置尺寸,然后覆盖,你可能会也可能不会运气好。我们不喜欢内联样式,我知道……但有时你必须做你必须做的事情。

假设 x% 和不同大小图像的响应父容器:

img 标签上的类到统一大小... 高度:400px!重要; 宽度:250px!重要;

后跟内联样式... 宽度:100%!重要;

不需要javascript。

无论如何,如果您不统一服务器端的图像,您会看到大量的浏览器开销。

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签