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

Chrome/Safari未填充flex父级的100%高度

施博文
2023-03-14

我想有一个垂直的菜单,有一个特定的高度。

每个子级必须填充父级的高度并具有中间对齐的文本。

孩子的数量是随机的,所以我必须使用动态值。

Div.container包含随机数的子级(.item),这些子级总是必须填充父级的高度。为了实现这一点,我使用了FlexBox。

为了使链接中的文本对齐,我使用了display:table-cell技术。但是使用表格显示需要使用100%的高度。

我的问题是.item-inner{height:100%}在webkit(Chrome)中不工作。

  1. 有解决此问题的方法吗?
  2. 或者是否有其他技术来使所有.item用垂直对齐到中间的文本填充父级的高度?
.container {
  height: 20em;
  display: flex;
  flex-direction: column;
  border: 5px solid black
}
.item {
  flex: 1;
  border-bottom: 1px solid white;
}
.item-inner {
  height: 100%;
  width: 100%;
  display: table;
}
a {
  background: orange;
  display: table-cell;
  vertical-align: middle;
}
<div class="container">
  <div class="item">
    <div class="item-inner">
      <a>Button</a>
    </div>
  </div>

  <div class="item">
    <div class="item-inner">
      <a>Button</a>
    </div>
  </div>

  <div class="item">
    <div class="item-inner">
      <a>Button</a>
    </div>
  </div>
</div>

共有1个答案

金昌胤
2023-03-14

使用嵌套的flex容器。

去掉高度百分比。删除表属性。删除垂直对齐。避免绝对定位。只要一直坚持使用flexbox就行了。

display:flex应用于flex项(.item),使其成为flex容器。这会自动设置align-items:streting,它告诉子级(.item-inner)扩展父级的整个高度。

重要提示:从flex项中删除指定的高度,以便此方法工作。如果子级指定了高度(例如height:100%),则它将忽略来自父级的align-items:strett。要使strett默认值起作用,必须将孩子的高度计算为auto(完整解释)。

尝试此操作(不更改HTML):

.container {
    display: flex;
    flex-direction: column;
    height: 20em;
    border: 5px solid black
}

.item {
    display: flex;                      /* new; nested flex container */
    flex: 1;
    border-bottom: 1px solid white;
}

.item-inner {
    display: flex;                      /* new; nested flex container */
    flex: 1;                            /* new */

    /* height: 100%;                    <-- remove; unnecessary */
    /* width: 100%;                     <-- remove; unnecessary */
    /* display: table;                  <-- remove; unnecessary */  
}

a {
    display: flex;                      /* new; nested flex container */
    flex: 1;                            /* new */
    align-items: center;                /* new; vertically center text */
    background: orange;

    /* display: table-cell;             <-- remove; unnecessary */
    /* vertical-align: middle;          <-- remove; unnecessary */
}
<div class="container">
  <div class="item">
    <div class="item-inner">
      <a>Button</a>
    </div>
  </div>

  <div class="item">
    <div class="item-inner">
      <a>Button</a>
    </div>
  </div>

  <div class="item">
    <div class="item-inner">
      <a>Button</a>
    </div>
  </div>
</div>
 类似资料:
  • 问题内容: 我想要一个具有特定高度的垂直菜单。 每个孩子都必须填充父母的身高,并且中间对齐文本。 孩子的数量是随机的,因此我必须使用动态值。 Div 包含随机数量的子代(),这些子代始终必须填充父代的高度。为此,我使用了flexbox。 为了使文本中间对齐,我使用了技巧。但是使用表格显示需要使用高度100%。 我的问题是无法在webkit(Chrome)中使用。 有解决此问题的方法吗? 还是有一种

  • 问题内容: +--------------------+ | | | | | | | | | 1 | | | | | | | | | +--------------------+ | | | | | | | | | 2 | | | | | | | | | +--------------------+ 如上所示的(1)的内容是未知的,因为它在动态生成的页面中可能会增加或减少。如上所示,第二个div(

  • 问题内容: 使用HTML / CSS,如何制作宽度和/或高度为其父元素的100%并且仍然具有适当的填充或边距的元素? 所谓“适当的”我的意思是,如果我的父元素是高大的,我指定用我所期望的,我应该得到一个高的元素与所有各方,很好地集中在父元素。 现在,我知道这不是标准盒模型指定它应该工作的方式(尽管我想确切地知道为什么),所以显而易见的答案不起作用: 但是在我看来,必须有某种方法可以可靠地为任意大小

  • 我试图理解我的意外行为: 容器中有一个最大高度为100%的元素,该容器也使用了最大高度,但意外的是,子元素溢出了父元素: 测试用例:http://jsfiddle.net/bq4Wu/16/ 但是,如果为父级指定了明确的高度,则这是固定的: 测试用例:http://jsfiddle.net/bq4Wu/17/ 有人知道第一个例子中孩子为什么不尊重父母的最大身高吗?为什么需要明确的高度?

  • 但是,它在Safari中并不起作用。但是如果我们将中的高度从更改为,我们将观察到拆分器(从上到下到)变得可拖动。这意味着在Safari中不起作用。 有没有人知道如何修改代码,使拆分器在Chrome和Safari中都能工作? 编辑1:

  • 问题内容: 我的HTML文档中有一个iframe,但遇到了一些麻烦。 我还在页面顶部有一个URL栏(固定位置元素),当用户滚动时,URL栏应随用户使用。很好 我希望iframe可以填充剩余空间,但不会被网址栏覆盖。 这就是我在说的。http://s75582.gridserver.com/Ls 如何解决此问题,以使URL栏不覆盖页面的一部分?当我尝试在主体中设置padding时,它只会创建一个额外