当前位置: 首页 > 知识库问答 >
问题:

最大高度的子级:100%溢出父级

郑向阳
2023-03-14

我试图理解我的意外行为:

容器中有一个最大高度为100%的元素,该容器也使用了最大高度,但意外的是,子元素溢出了父元素:

测试用例:http://jsfiddle.net/bq4Wu/16/

.container {  
    background: blue; 
    padding: 10px; 
    max-height: 200px; 
    max-width: 200px; 
}

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

但是,如果为父级指定了明确的高度,则这是固定的:

测试用例:http://jsfiddle.net/bq4Wu/17/

.container {  
    height: 200px;
}

有人知道第一个例子中孩子为什么不尊重父母的最大身高吗?为什么需要明确的高度?

共有3个答案

郎鸿雪
2023-03-14

代替max-high: 100%/100%,填充所有空间的另一种方法是使用位置:绝对,顶部/底部/左侧/右侧设置为0。

换句话说,超文本标记语言如下所示:

<div class="flex-content">
  <div class="scrollable-content-wrapper">
    <div class="scrollable-content">
      1, 2, 3
    </div>
   </div>
</div>
.flex-content {
  flex-grow: 1;
  position: relative;
  width: 100%;
  height: 100%;
}

.scrollable-content-wrapper {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  overflow: auto;
}

.scrollable-content {
}

您可以在CSS Flex/Grid中的Codesandbox-Overflow中看到一个实例

刘承悦
2023-03-14
.container {
  background: blue;
  padding: 10px;
  max-height: 200px;
  max-width: 200px;
  float: left;
  margin-right: 20px;
}

.img1 {
  display: block;
  max-height: 100%;
  max-width: 100%;
}

.img2 {
  display: block;
  max-height: inherit;
  max-width: inherit;
}
<!-- example 1  -->
<div class="container">
  <img class='img1' src="http://via.placeholder.com/350x450" />
</div>

<!-- example 2  -->

<div class="container">
  <img class='img2' src="http://via.placeholder.com/350x450" />
</div>
印瑾瑜
2023-03-14

奇怪的是,当您为孩子的最大高度指定百分比时,它是家长实际高度的百分比,而不是家长的最大高度的百分比。这同样适用于最大宽度。

因此,当您没有在父级上指定明确的高度时,就没有可以计算子级的max-高度的基高度,因此max-高度计算为no,允许子级尽可能高。现在作用在子级上的唯一其他约束是其父级的max-宽度,并且由于图像本身比它的宽度高,它会向下溢出容器的高度,以便在保持其长宽比的同时仍然尽可能大。

当您为父级指定一个显式高度时,子级知道它最多必须是该显式高度的100%。这允许它被约束到父级的高度(同时仍然保持其长宽比)。

 类似资料:
  • 问题内容: 我试图了解什么对我来说似乎是意外的行为: 我在容器内有一个最大高度为100%的元素,该元素也使用最大高度,但是,出乎意料的是,子代溢出了父代: 但是,如果给定父级的显式高度,则此问题已解决: 有谁知道为什么孩子在第一个例子中不尊重父母的最大身高?为什么需要一个明确的高度? 问题答案: 当您指定的百分比上一个孩子,这是父母的实际高度的百分比,而不是父母的,奇怪的。同样适用于。 因此,如果

  • 我在flexbox数组中有一系列元素。每个元素都包含一张“卡片”,其高度各不相同。当我试图让卡片占据它们所在的flexbox子元素的剩余空间时,它们会溢出到下面一行的元素中。如果我指定所有flex子项都是100%高度,那么它们的高度实际上会折叠为它们内部卡的大小。 蓝色卡片的高度为100%。从字面上看,它们的高度是父母的100%,但这意味着它们会溢出。 我怎样才能让他们只扩展到他们父母的底部呢?

  • 问题内容: 我有一个具有以下结构的网站: 导航在左侧,内容div在右侧。内容div的信息是通过PHP获取的,因此每次都不同。 无论加载哪个页面,如何垂直缩放导航使其高度与内容div的高度相同? 问题答案: 注意 :此答案适用于不支持Flexbox标准的旧版浏览器。 我建议您看看使用Cross-Browser CSS和NoHacks的等高列。 基本上,以与浏览器兼容的方式使用CSS做到这一点并不是一

  • 问题内容: 我使用此 CSS将最大高度设置为 谁能给我一个普遍的答案, 和 之间有什么区别? 问题答案: 这是W3Clink的解释: 以下算法描述了两个属性[min-height和max-height]如何影响’height’属性的使用值: 临时使用的高度是根据上面“计算高度和边距”下的规则计算的(不包括“最小高度”和“最大高度”)。 如果此暂定高度大于“最大高度”,则会再次应用上述规则,但是这次

  • 我想有一个垂直的菜单,有一个特定的高度。 每个子级必须填充父级的高度并具有中间对齐的文本。 孩子的数量是随机的,所以我必须使用动态值。 Div包含随机数的子级(),这些子级总是必须填充父级的高度。为了实现这一点,我使用了FlexBox。 为了使链接中的文本对齐,我使用了技术。但是使用表格显示需要使用100%的高度。 我的问题是在webkit(Chrome)中不工作。 有解决此问题的方法吗? 或者是

  • 问题内容: 我有一个可能包含大量数据的元素,但是我不想让它破坏页面布局,所以我设置了和,希望在内容不适合时显示滚动条。 一切在Firefox和IE7中都可以正常工作,但是IE8的行为就像是存在而不是。 我尝试了,仍然没有帮助,IE8只是将内容截断而不显示滚动条。更改声明品牌溢出工作OK,这是组合和打破的东西。 在IE8的最终发行版本中,这也被记录为[正式错误。 有解决方法吗?现在,我求助于而不是使