html-在这种情况下如何计算高度?

前端之家收集整理的这篇文章主要介绍了html-在这种情况下如何计算高度? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在此设置中:

html,body {
  height: 100%;
}

.app {
  display: flex;
}

.menu {
  background-color: red;
  width: 100px;
}

.content {
  flex: 1;
  border: 1px solid blue;
}
<div class="app">
    <div class="menu">menu</div>
    <div class="content">
      <div>content</div>
      <div>content</div>
      <div>content</div>
      <div>content</div>
      <div>content</div>
      <div>content</div>
      <div>content</div>
      <div>content</div>
      <div>content</div>
      <div>content</div>
      <div>content</div>
      <div>content</div>
      <div>content</div>
      <div>content</div>
    </div>
  </div>

我有两个问题.

>您可以看到菜单的高度与内容的高度相同,对吗?
有人可以解释为什么吗?它是否继承了应用程序的高度(其高度是根据content div的内容动态计算的)?
>如果我在.menu属性中插入高度:100%,如下所示:

.menu {
            background-color: red;
            width: 100px;
            height: 100%
      }

然后降低菜单高度.有人可以解释为什么会这样吗?如果菜单应该像以前一样继承应用程序的高度,那么为什么编写height:100%可以防止这种情况呢?

最佳答案
对于第一种情况,它是关于flexBox的默认对齐方式,即stretch.因此所有元素都将拉伸以适合container1的高度,因此菜单的高度与内容的高度相同.换句话说,最高的元素将定义高度,而另一个将拉伸以适合该高度.

更改对齐方式,您将不再有此行为:

html,body {
  height: 100%;
}

.app {
  display: flex;
  align-items:flex-start; /*anything different from stretch*/
}

.menu {
  background-color: red;
  width: 100px;
  height:100%;
}

.content {
  flex: 1;
  border: 1px solid blue;
}
<div class="app">
  <div class="menu">menu</div>
  <div class="content">
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
  </div>
</div>

通过添加height:100%,您现在可以明确地将高度应用到元素(不再应用拉伸),但这将无法自动设置值(内容的高度),因为父元素没有指定任何高度2

html,body {
  height: 100%;
}

.app {
  display: flex;
}

.menu {
  background-color: red;
  width: 100px;
  height:100%;
}

.content {
  flex: 1;
  border: 1px solid blue;
}
<div class="app">
  <div class="menu">menu</div>
  <div class="content">
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
  </div>
</div>

1 If the cross size property of the flex item computes to auto,and neither of the cross-axis margins are auto,the flex item is stretched@H_301_58@. Its used value is the length necessary to make the cross size of the item’s margin Box as close to the same size as the line as possible@H_301_58@,while still respecting the constraints imposed by min-height/min-width/max-height/max-width.07001

在这种情况下,我们只有一行,因此它与整个容器相同.

2 Specifies a percentage height. The percentage is calculated with respect to the height of the generated Box’s containing block@H_301_58@. If the height of the containing block is not specified explicitly@H_301_58@ (i.e.,it depends on content height),and this element is not absolutely positioned,the value computes to ‘auto’@H_301_58@.07002

为应用程序增加一个高度,您将看到正在发生的事情:

html,body {
  height: 100%;
}

.app {
  display: flex;
  height:80%;
}

.menu {
  background-color: red;
  width: 100px;
  height:100%;
}

.content {
  flex: 1;
  border: 1px solid blue;
}
<div class="app">
  <div class="menu">menu</div>
  <div class="content">
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
    <div>content</div>
  </div>
</div>

更新

根据评论,这里是一个特殊情况,其中百分比高度在父元素中未指定高度的情况下工作.

html,body {
  height: 100%;
}

.app {
  display: flex;
  height: 80%;
}

.menu {
  background-color: red;
  width: 100px;
}

.container{
  flex: 1;
  background:green;
}

.test {
  height: 80%;
  border: 2px solid blue;
}
<div class="app">
<div class="menu">menu</div>
  <div class="container">
    <div class="test">percentage height is working here!! why??</div>
  </div>
</div>

正如我在a previous answer中所解释的,.container的高度没有明确设置,但是我们没有任何循环依赖关系,因为.container的高度是由拉伸行为而不是其内容定义的,因此浏览器可以首先设置.container使用Stretch的高度,然后解析.test元素的百分比高度.

没有拉伸效果,浏览器需要首先根据内容找到高度,并且内容的高度取决于容器,因此我们具有循环依赖性,这将使百分比高度无法自动显示,以便能够定义容器的高度.

原文链接:https://www.f2er.com/html/530395.html

猜你在找的HTML相关文章