为什么我的 div 元素 class = "body_1" 高度=0,如何对齐页脚和页眉之间的 div?

How come my div element with class = "body_1"has height=0, how to align the div between footer and header?

我使用下面的代码创建了一个 HTML 页面,我在 body 标签中保留了页眉和页脚标签。页眉的高度为 16%,页脚为 5%。现在我在正文中插入了一个 div 标签并给出了 79%(100-16-5%) 的高度但是当我 运行 代码时 div 标签的高度为零,为什么会这样以及如何对齐页眉和页脚之间的 div 标记。

代码:

body{
    margin: 0 0 0 0;
    background-color: #E6E6FA;
}

header{
    position: absolute;
    background-color: red;
    height: 16%;
    width: 100%;
    margin-bottom: 5px;
    top: 0;


} 

.logo{
    position:absolute;
    background-color:#4CD4CB;
    height:100%;
    width: 10%;

}
#head_img{
    width: 120px;
    height: 120px;
    display: block;
    margin-left: auto;
    margin-right: auto;
} 
.hd_div{
    position:absolute;
    height:40px;
    width: 90%;
    right:0;
    overflow: hidden;
}
#hd_div1{
    background-color: red;
    top: 0;
}
#hd_div2{
    background-color: white;
    top: 33.3333%;
    text-align: center;
}
#hd_div3{
    background-color: red;
    top: 66.6666%;

}
.body_1{
    background-color:blueviolet;
    height: 79%

}


footer{
    background-color: red;
    position: absolute;
    height:5%;
    width: 100%;
    bottom: 0;
}
<header>
    <div id='hd_div1' class='hd_div'></div>
    <div id='hd_div2' class='hd_div'>Hello This a test text </div>
    <div id='hd_div3' class='hd_div'></div>
    <div class='logo'>
        <img id='head_img' src='.\search-logos.jpeg' alt='comp_logo' >
    </div>
</header>
<div class='body_1'></div>
<footer>
    <div id='foot1'></div>
</footer>

图片:

.body_1 身高为 0 因为你 body 身高为 0。 header 和页脚都是绝对定位的,在这种情况下会忽略 body。

简单的解决方案是告诉 body 的高度为 100vh(整个 window 高度),但您必须从顶部到 .body_1 应用边距所以它不会放在 header 下 在没有必要时使用 position: absolute 总体上是一种糟糕的解决问题的方法。

一个绝妙的解决方案是将 body 设置为 display: grid,这是为此类工作创建的。

更多关于 grid

在这个 snipper 中,我向 body 元素添加了网格,并删除了 header.body_1footer 的高度(它们的高度现在设置为 grid-template-rows 所以没有必要在这些元素中设置它们。

body{
    margin: 0 0 0 0;
    background-color: #E6E6FA;
    display: grid;
    grid-template-columns: 1fr;
    grid-template-rows: 16% auto 5%;
    height: 100vh;
}

header{
    background-color: red;
    width: 100%;
    position: relative;
}

.body_1{
    background-color:blueviolet;
}

footer{
    background-color: red;
    width: 100%;
}


 
.logo{
    position:absolute;
    background-color:#4CD4CB;
    height:100%;
    width: 10%;
}

#head_img{
    width: 120px;
    height: 120px;
    display: block;
    margin-left: auto;
    margin-right: auto;
}

.hd_div{
    position:absolute;
    height:40px;
    width: 90%;
    right:0;
    overflow: hidden;
}

#hd_div1{
    background-color: red;
    top: 0;
}

#hd_div2{
    background-color: white;
    top: 33.3333%;
    text-align: center;
}

#hd_div3{
    background-color: red;
    top: 66.6666%;

}
<header>
    <div id='hd_div1' class='hd_div'> </div>
    <div id='hd_div2' class='hd_div'>Hello This a test text </div>
    <div id='hd_div3' class='hd_div'></div>
    <div class='logo'>
        <img id='head_img' src='.\search-logos.jpeg' alt='comp_logo' >
    </div>
</header>
<div class='body_1'></div>
<footer>
    <div id='foot1'></div>
</footer>

这正是您的代码,body_0 是蓝紫色:

body{
    margin: 0 0 0 0;
    background-color: #E6E6FA;
}

header{
    position: absolute;
    background-color: red;
    height: 16%;
    width: 100%;
    margin-bottom: 5px;
    top: 0;


} 
 
.logo{
    position:absolute;
    background-color:#4CD4CB;
    height:100%;
    width: 10%;

}
#head_img{
    width: 120px;
    height: 120px;
    display: block;
    margin-left: auto;
    margin-right: auto;
} 
.hd_div{
    position:absolute;
    height:40px;
    width: 90%;
    right:0;
    overflow: hidden;
}
#hd_div1{
    background-color: red;
    top: 0;
}
#hd_div2{
    background-color: white;
    top: 33.3333%;
    text-align: center;
}
#hd_div3{
    background-color: red;
    top: 66.6666%;

}
.body_1{
    background-color:blueviolet;
    height: 79%

}


footer{
    background-color: red;
    position: absolute;
    height:5%;
    width: 100%;
    bottom: 0;
}
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="test.css">
    <link  rel='shortcut icon' type='image/x-icon' href='data:image/png;base64,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' />
    <title>Search</title>
</head>
<body>
    <header>
        <div id='hd_div1' class='hd_div'> </div>
        <div id='hd_div2' class = 'hd_div'>Hello This a test text </div>
        <div id='hd_div3' class = 'hd_div'></div>
        <div class ='logo'>
            <img id='head_img' src ='.\search-logos.jpeg' alt='comp_logo' >
        </div>
    </header>
    <div class='body_1'> </div>
    <footer>
        <div id='foot1'></div>
    </footer>
</body>
</html>