父级元素高度为 0 .
父级元素的高度由子元素撑开.
body默认高度为0 所以为子元素设置百分比高度单位不会生效
下面转载一种新布局单位:
css3自适应布局单位vw,vh详解
视口单位(Viewport units)
什么是视口?
在桌面端,视口指的是在桌面端,指的是浏览器的可视区域;而在移动端,它涉及3个视口:Layout Viewport(布局视口),Visual Viewport(视觉视口),Ideal Viewport(理想视口)。
视口单位中的“视口”,桌面端指的是浏览器的可视区域;移动端指的就是Viewport中的Layout Viewport, “视区”所指为浏览器内部的可视区域大小,即
window.innerWidth/window.innerHeight
大小,不包含任务栏标题栏以及底部工具栏的浏览器区域大小。。根据CSS3规范,视口单位主要包括以下4个:
1.vw:1vw等于视口宽度的1%。
2.vh:1vh等于视口高度的1%。
3.vmin:选取vw和vh中最小的那个。
4.vmax:选取vw和vh中最大的那个。
vh and vw:相对于视口的高度和宽度,而不是父元素的(CSS百分比是相对于包含它的最近的父元素的高度和宽度)。1vh 等于1/100的视口高度,1vw 等于1/100的视口宽度。
比如:浏览器高度950px,宽度为1920px, 1 vh = 950px/100 = 9.5 px,1vw = 1920px/100 =19.2 px。
vmax相对于视口的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vmax。
vmin相对于视口的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vmin。
解决方法:
使用flex布局为父元素设置单位高度100vh.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<link rel="stylesheet" href="css/login2.css" />
<style type="text/css">
body{
margin: 0;
}
#mainboxFLEX{
height: 100vh;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}
#mainboxFLEX #mainbox{
width: 40%;
height: 500px;
background-color: #FF0000;
}
</style>
</head>
<body>
<div id="mainboxFLEX">
<div id="mainbox">
</div>
</div>
</body>
</html>
效果: