简体   繁体   English

父 div 的位置绝对不占用其子项的高度

[英]A parent div positioned absolutely not taking height of its children

As the title suggests, I have a parent div that is positioned absolutely and I need its defined height to expand with the height of its child elements.正如标题所暗示的,我有一个绝对定位的父 div,我需要它定义的高度来扩展其子元素的高度。 Is this possible with css?这可以用 css 实现吗?

Here's a codepen of what I mean https://codepen.io/SeanPeterson/pen/paKqBg这是我的意思的代码笔https://codepen.io/SeanPeterson/pen/paKqBg

 .wrapper { background: blue; widht: 100%; height: 100%; } .parent1 { width: 100%; min-height: 500px; background: blue; } .parent2 { background: red; position: absolute; left: 0; top: 0; bottom: 0; right: 0; width: 30%; height: 30%; } .child { background: green; }
 <div class="wrapper"> <div class="parent1"> </div> <div class="parent2"> <div class="child"> <p>Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Quisque velit nisi, pretium ut lacinia in, elementum id enim. Donec rutrum congue leo eget malesuada. Pellentesque in ipsum id orci porta dapibus. Proin eget tortor risus. Donec rutrum congue leo eget malesuada. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Vivamus magna justo, lacinia eget consectetur sed, convallis at tellus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Donec sollicitudin molestie malesuada. Curabitur aliquet quam id dui posuere blandit. Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a. Vivamus suscipit tortor eget felis porttitor volutpat. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Proin eget tortor risus. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Vivamus suscipit tortor eget felis porttitor volutpat.Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Quisque velit nisi, pretium ut lacinia in, elementum id enim. Donec rutrum congue leo eget malesuada. Pellentesque in ipsum id orci porta dapibus. Proin eget tortor risus. Donec rutrum congue leo eget malesuada. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Vivamus magna justo, lacinia eget consectetur sed, convallis at tellus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Donec sollicitudin molestie malesuada. Curabitur aliquet quam id dui posuere blandit. Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a. Vivamus suscipit tortor eget felis porttitor volutpat. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Proin eget tortor risus. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Vivamus suscipit tortor eget felis porttitor volutpat.</p> </div> </div> </div>

Even though the div is visible, the parent's defined height in the browser does not correspond to the height of its child.即使 div 可见,浏览器中父级定义的高度也与其子级的高度不对应。 Here's a screenshot of what I'm referring to.这是我所指内容的屏幕截图。

在此处输入图片说明

The reason I'm trying to do this is so I can maybe use a flex box to match the height of parent1 and parent2 divs.我尝试这样做的原因是我可以使用弹性框来匹配 parent1 和 parent2 div 的高度。 But I can't achieve this without parent1 taking the height of its children.但是如果没有 parent1 采取其孩子的身高,我就无法实现这一点。

Any help is appreciated!任何帮助表示赞赏!

 <div class="wrapper"> <div class="parent1"> </div> <div class="parent2"> <div class="child"> <p>Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Quisque velit nisi, pretium ut lacinia in, elementum id enim. Donec rutrum congue leo eget malesuada. Pellentesque in ipsum id orci porta dapibus. Proin eget tortor risus. Donec rutrum congue leo eget malesuada. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Vivamus magna justo, lacinia eget consectetur sed, convallis at tellus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Donec sollicitudin molestie malesuada. Curabitur aliquet quam id dui posuere blandit. Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a. Vivamus suscipit tortor eget felis porttitor volutpat. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Proin eget tortor risus. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Vivamus suscipit tortor eget felis porttitor volutpat.Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Quisque velit nisi, pretium ut lacinia in, elementum id enim. Donec rutrum congue leo eget malesuada. Pellentesque in ipsum id orci porta dapibus. Proin eget tortor risus. Donec rutrum congue leo eget malesuada. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Vivamus magna justo, lacinia eget consectetur sed, convallis at tellus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Donec sollicitudin molestie malesuada. Curabitur aliquet quam id dui posuere blandit. Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a. Vivamus suscipit tortor eget felis porttitor volutpat. Curabitur arcu erat, accumsan id imperdiet et, porttitor at sem. Proin eget tortor risus. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet dui. Vivamus suscipit tortor eget felis porttitor volutpat.</p> </div> </div> </div>

 .wrapper{ height: 400px; width: 100%; background: #ddd; position: relative; } .parent2{ position: absolute; left: 0; top: 50%; transform: translateY(-50%); } .child{ color: #333; padding: 10px; background: #f5f5f5; margin: 40px; }
 <div class="wrapper"> <div class="parent1"> </div> <div class="parent2"> <div class="child"> <p>Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Curabit Curabitur aliquet quam id dui posuere blandit. Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a. Vivamus susci.</p> </div> </div> </div>

You Should Give Position: Relative To the Parent Div Of child Div Which one You Want to put as Absolute and Taking The 100% Height of This Parent Div Height.你应该给出位置:相对于子 Div 的父 Div,你想把哪一个作为绝对值,并取这个父 Div 高度的 100% 高度。

.wrapper{
     position: relative;
}

By The Way, You Also Define The Fixed Height Of Your Parent Div, Like顺便说一下,您还定义了父 Div 的固定高度,例如

.wrapper{
    height: 600px;
    position: relative;
}

Firstly make sure that your absolutely positioned parent2 div has a positioning context by setting position:relative to it's container.首先通过设置position:relative来确保你绝对定位的parent2 div 有一个定位上下文position:relative对于它的容器。

Then remove the bottom:0 from parent2 and it will adjust its height to the content.然后从parent2删除bottom:0 ,它将根据内容调整其高度。

 * { margin: 0; padding: 0; box-sizing: border-box; } ::before, ::after { box-sizing: inherit; } .wrapper { background: blue; height: 100%; } .parent1 { width: 100%; min-height: 500px; background: blue; } .parent2 { background: red; position: absolute; left: 0; top: 0; right: 0; width: 30%; } .child { background: green; }
 <div class="wrapper"> <div class="parent1"> </div> <div class="parent2"> <div class="child"> <p>Donec rutrum congue leo eget malesuada. Curabitur aliquet quam id dui posuere blandit. Curabitur non nulla sit amet nisl tempus convallis quis ac lectus. Quisque velit nisi, pretium ut lacinia in, elementum id enim. Donec rutrum congue leo eget malesuada. Pellentesque in ipsum id orci porta dapibus.</p> </div> </div> </div>

Note that due to the positioning, the wrapper will NOT take the height of the parent2 div into account.请注意,由于定位,包装器不会考虑parent2 div 的高度。 If you want to equalise heights of parent1 and parent2 you will need an alternate technique such as Create a row of flexbox items with a max height defined by one child.如果您想均衡parent1parent2高度,您将需要一种替代技术,例如创建一行 flexbox 项目,其最大高度由一个孩子定义。

clearfix清除修复

hope it helps you.希望对你有帮助。

.parent2{
  background: red;
  position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    right: 0;
    width: 30%;
    height: 30%;
  clear: both;
  content: '';
  display:table;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM