css Div高度:100%不与身体一起工作最小高度:100vh

hgc7kmma  于 2023-11-19  发布在  其他
关注(0)|答案(3)|浏览(100)

我遇到了一个意想不到的行为。我想将body的最小高度设置为视口的高度(100 vh),然后创建一个div(与容器类)在里面,这将采取整个高度的身体(100%),使div将至少扩展到所有的高度的视口。除了这不会发生;实现这个结果的唯一方法是将htmlbody的高度设置为100%。是什么技术原因导致这种情况发生?div不应该取其父元素的100%的高度吗?
Here you can find a codepen with the expected behaviour commented out at the end of the css

*,
*::after,
*::before {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  background: #ddd;
  min-height: 100vh;
}

.container {
  background: #aaa;
  max-width: 500px;
  margin: 0 auto;
  padding: 1rem;
  min-height: 100%;
  height: 100%;
}

/* Uncomment for the expected behaviour */
/*
html,
body {
  height: 100%
}
*/

个字符

wpx232ag

wpx232ag1#

答案很简单,因为百分比min-height是基于父容器的height值而不是min-height计算的。

* {margin:0;}

body {
  background: gray;
  height: 100vh; /* look here */
}

.container {
  background: silver;
  margin: 0 20px;
  min-height: 100%;  /* look here */
}

个字符
但是,对于min-height:inherit,它会从父容器继承min-height值。

* {margin:0;}

body {
  background: gray;
  min-height: 100vh; /* look here */
}

.container {
  background: silver;
  margin: 0 20px;
  min-height: inherit;  /* look here */
}
<div class="container">
  <h1>Some generic title</h1>
  <p>Some random paragraph</p>
</div>

的字符串
如果.container总是覆盖视口高度,我会直接在min-height:100%上设置.container

* {margin:0;}

body {
  background: gray;
}

.container {
  background: silver;
  margin: 0 20px;
  min-height: 100vh; /* look here */
}
<div class="container">
  <h1>Some generic title</h1>
  <p>Some random paragraph</p>
</div>
yqhsw0fo

yqhsw0fo2#

*,
*::after,
*::before {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  background: #ddd;
  min-height: 100vh;
  height: 100vh;
}

.container {
  background: #aaa;
  max-width: 500px;
  margin: 0 auto;
  padding: 1rem;
  min-height: 100%;
  height: 100%;
}

/* Uncomment for the expected behaviour */
/*
html,
body {
  height: 100%
}
*/

个字符

mbjcgjjk

mbjcgjjk3#

这个想法是min-height是100 vh或100%的情况下内容大于100 vh。

body {
  background: gray;
  height: max-content; 
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

.container {
  background: silver;
  margin: 0 20px;
  flex-grow: 1;
}

字符串

相关问题