【问题标题】:How make a div container responsive?如何使 div 容器响应?
【发布时间】:2016-06-24 15:59:33
【问题描述】:

我有一个在 CSS3 文件中分配了背景图像的 div。 图像是响应式的,因此它会根据屏幕尺寸进行缩放,但容器会在所有屏幕尺寸下保持高度。

我需要知道是否有办法让容器和背景图像一样响应。

HTML:

<div class="responsive> </div>

CSS3:

.responsive {
    background: url('https://s20.postimg.org/o09gf7fvx/bag.jpg') no-repeat center top;
    border: 1px solid red;
    background-size: contain;
    width: 100%;
    height: 270px;
}

我必须使用背景图像选择器并且没有 img src 标签。 这是fiddle file

谢谢。

【问题讨论】:

  • 响应什么?它已经 100% 宽了,你期待会发生什么?
  • 就像@Paulie_D 所说,"responsive design" 通常指的是舒适的 100% 宽度,但如果您有其他想法,请查看 CSS3 media-queries
  • 如果您尝试将 div 的大小调整为图像大小,则无法使用背景图像进行此操作。
  • 为什么一定要使用background-image
  • @Paulie_D 响应式网页设计意味着元素能够根据视口大小调整其大小,从桌面到移动设备。如果您获得不同屏幕尺寸的小提琴样本,您会注意到图像根据屏幕尺寸缩放,但是 div 容器在所有屏幕尺寸下保持相同的高度。

标签: html css


【解决方案1】:

更新 - 2021 年 2 月 3 日

自从我写了原始答案以来,引入了一个新的 CSS 属性 - 'aspect-ratio' - 来解决这个问题。

<div id="responsive">some text</div>

CSS:

#container {
    width: 100%;
    background: hotpink;
    aspect-ratio: 100 / 29;
}

在撰写本文时,此 CSS 属性尚未得到广泛的浏览器支持。

工作示例: https://jsfiddle.net/fu0nL57t/

参考:https://web.dev/aspect-ratio/

================================================ ======

原答案

这可以通过一个额外的虚拟元素来完成,在你想要保持固定比例的元素内。如果您将 padding-top 或 padding-bottom 指定为百分比,则表示容器元素的宽度,然后将容器元素的高度保持在固定比例。

<div id="responsive">
    some text
    <div id="dummy"></div>
</div>

CSS:

#responsive {
    display: inline-block;
    position: relative;
    width: 100%;
    background: url('https://s20.postimg.org/o09gf7fvx/bag.jpg') no-repeat center top;
    background-size: contain;
}

#dummy {
    padding-top: 29%;
}

工作示例:

https://jsfiddle.net/098jj61q/

致谢:

【讨论】:

  • 正是我想要的。谢谢你。一个问题;在 padding-top 上:29%; 29% 来自哪里?
【解决方案2】:

是的,它是正确的。根据@Paulie_D,你不能用背景图片来做到这一点。根据你的要求,你只能使用 img 标签来做到这一点。

你必须做的,不使用 div 只是通过将图像视为块元素来使图像响应,

.img-responsive {
    display: block;
    max-width: 100%;
    height: auto;
}

或者如果你坚持对背景图像使用除法,那么覆盖背景图像并将 min-height 设置为,

div.mydiv {
    background:url(background_image.jpg);
    background-repeat:no-repeat !important;
    background-size: cover !important;
    background-position:center center !important;
    min-height:300px;
}

【讨论】:

  • 我不能使用 img src 标签。必须从 css 文件而不是 html 文件调用图像。您能否详细说明您的示例,如何将它们集成到我的代码中?你可以在小提琴上测试它吗?谢谢
  • 图像水平缩放,但在所有屏幕尺寸下都保持相同的高度。
  • 这就是响应式图像/元素的重点,如果您想根据视口缩放分割,那么您可以尝试@Chris Hilditch 在上述答案中给出的一些技巧。
猜你喜欢
  • 2012-09-19
  • 1970-01-01
  • 2019-12-28
  • 2018-12-25
  • 1970-01-01
  • 2014-12-12
  • 2014-07-17
  • 2016-04-28
  • 1970-01-01
相关资源
最近更新 更多