如何相对于文档/正文放置元素的背景图像并溢出:父级设置为隐藏?

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

问题

我希望将background-imagediv.childdiv.parent相对于body定位,而overflow: hidden用于div.parent。另外,我希望top: 0div.child适用于body而不是div.parent,以便div.parent在Y轴上的位置无关紧要(因此,top:div.child无需调整)。

示范

body {
  position: relative;
  margin: auto;
  height: 1200px;
  width: 100%;
  
  background-image: url("https://images.unsplash.com/photo-1531251445707-1f000e1e87d0?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=562&q=80");
  background-size: 100% auto;
  background-position: top center;
 
}

.parent {
  width: 80%;
  height: 300px;
  margin: 0 auto;
  margin-top: 200px;
  outline: 2px solid white; /* !!! Not visible anymore !!! */

  overflow: hidden; /* !!! Ignored by .child !!! */
}

.child {
  position: absolute;
  z-index: -1;
  width: 100%;
  height: 600px;
  top: -200px;
  left: 0;
  background-image: url("https://images.unsplash.com/photo-1531251445707-1f000e1e87d0?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=562&q=80");
  background-size: 100% auto;
  background-position: top center;
  filter: invert(1);
}
<body>
  <div class="parent">
    <div class="child"></div>
  </div>
</body>

有两个background-images完全匹配(相同,一个倒置)。但是,应用于overflow: hiddendiv.parent不再起作用。

div.parent框由白色outline表示。

需要解决方案

我需要一个.parent框,该框具有与background-image相同的body,无论此.parent的位置如何,始终显示应用于background-image的底层body的摘录。 重要:将.parentbackground: transparent一起使用不起作用。这是因为,我稍后将使用与应用于background-image相同的body,但使用的是[[edited(就像小提琴中的倒数一样)。

html css position background-image overflow
2个回答
0
投票
如果您知道应用于父元素的其他值,则可以轻松计算出background属性并使子对象相对于其父元素:

body { position: relative; height: 1200px; margin:0; background-image: url("https://images.unsplash.com/photo-1531251445707-1f000e1e87d0?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=562&q=80"); background-size: 100% auto; background-position: top; overflow:auto; } .parent { width: 80%; height: 300px; margin: 0 auto; margin-top: 200px; outline: 2px solid white; position:relative; overflow:hidden; box-sizing:border-box; } .child { position: absolute; z-index: -1; /* same as border */ top:-2px; left: -2px; right:-2px; bottom:-2px; /**/ background-image: url("https://images.unsplash.com/photo-1531251445707-1f000e1e87d0?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=562&q=80"); background-size: calc(100%/0.8) auto; /*0.8 = 80% of the width */ background-position: top -200px center; /* Equal to margin*/ filter: invert(1); }
<body>
  <div class="parent">
    <div class="child"></div>
  </div>
</body>

-1
投票
您需要将position:relative添加到父div。检查下面的小提琴。希望能帮助到你。

body { position: relative; margin: auto; height: 1200px; width: 100%; background-image: url("https://images.unsplash.com/photo-1531251445707-1f000e1e87d0?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=562&q=80"); background-size: 100% auto; background-position: top center; } .parent { width: 80%; height: 300px; margin: 0 auto; margin-top: 200px; outline: 2px solid white; /* !!! Not visible anymore !!! */ overflow: hidden; /* !!! Ignored by .child !!! */ /*Add Relative to parent*/ position: relative; } .child { position: absolute; z-index: -1; width: 100%; height: 600px; top: -200px; left: 0; background-image: url("https://images.unsplash.com/photo-1531251445707-1f000e1e87d0?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=562&q=80"); background-size: 100% auto; background-position: top center; filter: invert(1); }
<body>
  <div class="parent">
    <div class="child"></div>
  </div>
</body>
© www.soinside.com 2019 - 2024. All rights reserved.