如何使子高度相对于其父高度-Css

Posted

技术标签:

【中文标题】如何使子高度相对于其父高度-Css【英文标题】:How to make a child height relative to its parent height-Css 【发布时间】:2019-07-19 13:53:51 【问题描述】:

我有一个父 div,其高度是动态设置的,因此它可以根据用户设置进行更改。现在我里面有一个子 div,我想以这样一种方式设置该 div 的内容,即随着父 div 高度的变化,内容应该仍然在定义的规范内。 例如:我希望:padding: 40px 54px 54px; 在子 div 周围,无论父级设置为多少高度。

HTML:

<div class="parent" style="height:180px">
    <div class="child">
        <header>title</header>
        <div>test11</div>
        <button>
            Test
        </button>
        <button>
            Cancel
        </button>
    </div>
</div>

CSS:

.parent 
    max-height: 300px;
    margin: 0 auto;
    background-color: #fff;
    position: fixed;
    top: 20%;
    left: 20%;
    border: 1px solid #000;
    width: 234px;


.child 
    padding: 40px 54px 54px;
    height: 86px;

小提琴: https://jsfiddle.net/5thk641u/15/

从上面的小提琴你可以看到,当我尝试将父类的高度从 180px 更改为 250px 时,底部填充增加,按钮到父 div 的距离也增加。 我想要实现的是当我改变父级的高度时,子级div的高度相对增加,以便按钮和其他内容保持其填充。

我不确定这是否可以实现,对此有什么想法吗?

【问题讨论】:

嘿,你想要,当父 div 高度增加时,内部 div 应该垂直居中。? CSS - Expand float child DIV height to parent's height的可能重复 @MohitGupta,是的,这是正确的,或者说不仅仅是中心,无论我提到什么填充,它都应该保持在这个范围内,并且不受父身高增加减少的影响 【参考方案1】:

子框在父框垂直居中。这是sn-p,

.parent 
  max-height: 300px;
  margin: 0 auto;
  background-color: #fff;
  position: fixed;
  top: 20%;
  left: 0;
  border: 1px solid #000;
  width: 234px;

.child  /* No height, only verticaly centered */
  position: relative;
  padding: 40px 54px 54px;
  top: 50%;
  transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
  -moz-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
<div class="parent" style="height:180px">
  <div class="child">
  <header>title</header>
  <div>test11</div>
    <button>Test</button>
    <button>Cancel</button>
  </div>
</div>

【讨论】:

【参考方案2】:

我已经更新了代码,现在子 div 将是 vertically centre always,相应地是 parent div height

Note:在全宽窗口中查看此页面。因为父 div 有你给的 position: fixed; css。 使用以下代码:

.parent 
    max-height: 300px;
    margin: 0 auto;
    background-color: #fff;
    position: fixed;
    top: 20%;
    left: 20%;
    border: 1px solid #000;
    width: 234px;
    display: flex;
    align-items: center;
    justify-content: center;
    display: -webkit-flex;
    -webkit-align-items: center;
    -webkit-justify-content: center;

.child 
  padding: 54px;
  height: auto;
  <div class="parent" style="height:280px">
    <div class="child">
    <header>title</header>
    <div>test11</div>
    <button>
    Test
    </button>
    <button>
    Cancel
    </button>
    </div>
    </div>

【讨论】:

【参考方案3】:

JsFiddle

.child 
    padding: 40px 54px 54px;
    height: inherit;
    box-sizing: border-box;

.child 类中添加height:inheritheight:100%box-sizing:border-box。高度继承/100% 将在您的子 div 中应用父高度。

JsFiddle (Your Code)

JsFiddle (My Code)

我在.parent 类中设置了height:280px(例如)。可以看到子类的背景色区域。我希望这个答案能解决你的问题。

【讨论】:

【参考方案4】:

Hope this is what you are looking for

.child 
 padding: 40px 54px 54px;
 display:flex;
 height:100%;
 align-items:center;
 justify-content:center
 

【讨论】:

感谢您的帮助,但我有点不希望孩子弯曲,内容下方的按钮和其他可能不需要弯曲的内容可能存在

以上是关于如何使子高度相对于其父高度-Css的主要内容,如果未能解决你的问题,请参考以下文章

CSS:保持div的高度相对于其宽度[重复]

CSS 获取当前可视屏幕高度--使用calc()方法动态计算宽度或者高度

CSS 使用calc()获取当前可视屏幕高度

CSS单位

使用jquery计算相对于容器的宽度和高度

视区相关单位vw, vh ,vm,CSS/CSS3长度时间频率角度单位大全