【问题标题】:background-image cropping according to parent div根据父 div 裁剪背景图像
【发布时间】:2020-09-03 05:15:40
【问题描述】:

我有一个带有左右边距的父 div 和另一个带有背景图像但没有边距的 div。

我有背景尺寸作为封面,但显示的图像的左右部分被切断但仍然尊重边距。

橙色是背景图像 div 并且具有数字 1 到 6,但灰色边距部分覆盖图像并阻挡 1 和 6,但我想将图像填充到橙色部分,尊重灰色边距,并将所有 1 到 6 拟合到橙色部分。

<div style="margin-left: 10vw; margin-right: 10vw;">
    <div class="image"></div>
</div>

.image {
    background-image: url("orange.jpg");
    background-size: cover;
    background-position: center;
    width: 100%;
    height: 100px;
}

编辑:上传新图片

【问题讨论】:

  • 能否请您也添加您的 HTML 和 CSS - 这样我们才能提供适当的帮助。图像并没有真正的帮助。谢谢
  • 你能创建一个简短的 sn-p 来重现这个问题吗?
  • 除了@AlwaysHelping所说的HTML,我们还需要查看相关的CSS!
  • @FluffyKitten 好提醒 :)
  • 好吧,background-image 的 css 不正确 - 您已将所有属性作为 background-image 的一部分包含在内。不确定这是否是您所看到的问题,但您需要解决该问题以查看可能发生的其他情况:)

标签: html css


【解决方案1】:

好的,伙计。答案很简单。

将包含image 类的div 设为父级。像这样,图像将从左到右全宽。

* {
  margin: 0;
}

.image {
  background-image: url("https://picsum.photos/1920/108");
  background-size: cover;
  background-position: center;
  width: 100%;
  height: 100px;
}

h1 {
  border: 2px solid red;
}
<div class="image">
  <div style="margin-left: 10vw; margin-right: 10vw;">
    <h1>Hi</h1>
  </div>
</div>

或者保持原样并删除margin-leftmargin-right

另一种选择是执行以下操作。

* {
  margin: 0
}

.image {
  background-image: url("https://picsum.photos/1920/1080");
  background-size: cover;
  background-position: center;
  width: 100%;
  height: 100px;
}

h1 {
  border: 2px solid red;
}
<div class="main-container">
  <div class="image">
    <div class="myContent" style="margin-left: 10vw; margin-right: 10vw;">
      <h1>Hi</h1>
    </div>
  </div>
</div>

如果这不能回答您的问题,请给我留言,我会尽力编辑答案以满足您的要求并尽可能地帮助您。

【讨论】:

  • 我认为 OP 希望保留灰色边距,并确保图像适合橙色区域,而不是删除灰色边距并使橙色区域全宽。
  • 我不认为这是正确的。我希望图像被填充到橙色部分并显示所有 1 到 6。
  • MM,如果您可以提供您正在尝试做的事情的图像,这可能会很有帮助,因为您向我们展示的图像告诉我们您遇到了困难。你能告诉我们所需输出的截图吗?此外,更多的 CSS 和 HTML 将不胜感激。
  • 所以...您希望图像宽度完全填充橙色区域的宽度,对吗?并且图像不超过橙色区域?
  • 我一直在反复阅读这个问题。我的解决方案中的图像实际上覆盖了从 1 到 6 的区域。其中的内容尊重左右的边距,它们不会一直向左或向右。这就是您正在寻找的答案。如果没有,请向我们提供更多 HTML 和 CSS,并为我们提供所需输出的屏幕截图,以便更轻松地为您提供帮助。 @Lattie
【解决方案2】:

您只需将cover 更改为contain

您的代码将变为:

<div style="margin-left: 10vw; margin-right: 10vw;">
    <div class="image"></div>
</div>

.image {
    background-image: url("orange.jpg");
    background-size: contain;
    background-position: center;
    width: 100%;
    height: 100px;
}

查看窗口的纵横比导致图像的高度伸展到足以填充橙色框的高度,并且保持纵横比将图像的两侧推出橙色区域并进入灰色区域。

如果你让你的窗口不那么高,它看起来就像你想要的那样,但你不想依赖于查看器的窗口纵横比。

相反,使用“包含”将限制图像大小,以使图像适合橙色区域。

【讨论】:

  • 包含并没有解决问题,如果窗口变得非常宽,这会带来额外的问题。
  • 是的,我希望如此。如果contain 将图像的整个宽度限制在橙色区域的宽度内,尊重灰色边距而不是替换它们,那么我建议您的原始问题已解决并且您有一个新问题。 (如果没有,请准确告知contain 产生的结果)。在不了解页面预期外观的情况下,答案可能在于响应式 CSS 样式以及相同的图像是否用于不同的视口宽度或纵横比。随意发布一个新问题。
  • 我不明白的是父 div 设置了左右边距,但图像 div 的图像忽略了这一点,但实际的 div 尊重它。为什么图像 div 不适合 div 本身的图像宽度?
  • 我预计这是由于cover这个词。用contain 替换它是否将图像的宽度限制为橙色区域的宽度?如果没有,contain 有什么作用?
  • 包含还有图像为整个跨度的宽度。不同之处在于,如果窗口的大小大于图像的大小,则它不会按比例扩展图像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 2022-11-17
  • 2016-05-04
  • 2016-01-19
相关资源
最近更新 更多