overmind 2024-11-07 10:37 采纳率: 82.4%
浏览 13
已结题

浮动div的高度控制问题。

红框区域总是白色,希望是浅绿色

img

<link rel="stylesheet" href="style.css">
<body>
<div id="wrapper">
    <div id="header"> 我是header </div>
    <div id="middle">
        <div id="sidebar">

            <div class="subject-main-container">
                <div class="subject-top-container"></div>
                <div class="subject-bottom-container">
                    <div>2</div>
                    <div>3</div>
                    <div>4</div>
                </div>
            </div>
            <div class="subject-main-container">
                <div class="subject-top-container"></div>
                <div class="subject-bottom-container">
                    <div>5</div>
                    <div>6</div>
                    <div>7</div>
                </div>
            </div>
            <div class="subject-main-container">
                <div class="subject-top-container"></div>
                <div class="subject-bottom-container">
                    <div>8</div>
                    <div>9</div>
                    <div>10</div>
                </div>
            </div>
            <div class="subject-main-container">
                <div class="subject-top-container"></div>
                <div class="subject-bottom-container">
                    <div>11</div>
                    <div>12</div>
                    <div>1</div>
                </div>
            </div>

        </div>
        <div id="content"> 

            <div class="container">
                <div class="image"></div>
                <div class="author">作者</div>
                <div class="date">2024/11/11</div>
            </div>
            <div class="container">
                <div class="image"></div>
                <div class="author">作者</div>
                <div class="date">2024/11/11</div>
            </div>
            <div class="container">
                <div class="image"></div>
                <div class="author">作者</div>
                <div class="date">2024/11/11</div>
            </div>
            <div class="container">
                <div class="image"></div>
                <div class="author">作者</div>
                <div class="date">2024/11/11</div>
            </div>
            <div class="container">
                <div class="image"></div>
                <div class="author">作者</div>
                <div class="date">2024/11/11</div>
            </div>
            <div class="container">
                <div class="image"></div>
                <div class="author">作者</div>
                <div class="date">2024/11/11</div>
            </div>
            <div class="container">
                <div class="image"></div>
                <div class="author">作者</div>
                <div class="date">2024/11/11</div>
            </div>
            <div class="container">
                <div class="image"></div>
                <div class="author">作者</div>
                <div class="date">2024/11/11</div>
            </div>
            <div class="container">
                <div class="image"></div>
                <div class="author">作者</div>
                <div class="date">2024/11/11</div>
            </div>
            <div class="container">
                <div class="image"></div>
                <div class="author">作者</div>
                <div class="date">2024/11/11</div>
            </div>
            <div class="container">
                <div class="image"></div>
                <div class="author">作者</div>
                <div class="date">2024/11/11</div>
            </div>
            <div class="container">
                <div class="image"></div>
                <div class="author">作者</div>
                <div class="date">2024/11/11</div>
            </div>
            <div class="container">
                <div class="image"></div>
                <div class="author">作者</div>
                <div class="date">2024/11/11</div>
            </div>
        </div>
    </div>
    <div id="footer">我是 footer</div>
</div>
</body>

body{
    margin:0;
}
div#wrapper{
    margin:0 auto;
    width:1000px;
    background:lightgreen;
}
div#header{
    height:120px;
    width:1000px;
    background:lightblue;
}
div#middle{
}
div#sidebar{
    width:240px;
    float:left;
    background:lightgreen;
}
div#content{
    width:760px;
    float:left;
    background:cyan;
}
div#footer{
    height:100px;
    width:1000px;
    float:left;
    background:lightblue;
}

.subject-main-container {
  width: 240px;
}

.subject-top-container {
  background-color: darkgreen;
  width: 240px;
  height: 70px;
  border-radius: 150px;
  text-align:center;
  color:white;
  font-size:60px;
}

.subject-bottom-container {
  background-color: lightgreen;
  width: 240px;
  margin-left:20px;
  margin-top:-5px;
  padding:20px 10px;
}

.subject-bottom-container div{
  font-size:22px;    
  line-height:30px
}
div.subject-main-container .subject-bottom-container{
    display:none;
}

div.subject-main-container:hover .subject-bottom-container{
    display:block;
}

.container {
    width: 150px;
    height: 210px;
    text-align: left;
    float:left;
    margin-left:15px;
}

.image {
    width: 150px;
    height: 150px;
    border-radius: 10px;
    background:black;      
}

.author {
    font-weight: bold;
    font-size:25px;
}

.date {
    font-size: 16px;
    color:grey;
}
  • 写回答

22条回答 默认 最新

  • 问答-莫得感情 2024-11-07 10:39
    关注

    ️题主您好️,目前由我为您解答👇🏼
    🧡参考谷歌智能助手,由吾为汝整理提供🧡

    问题在于 #middle 没有清除浮动,导致它的高度塌陷,无法包含内部浮动的 #sidebar#content。因此,#wrapper 的背景色(浅绿色)无法延伸到 #sidebar 的下方,露出了 #wrapper 的父元素的背景色(通常是白色)。

    以下是几种解决方法,并推荐最佳方案:

    1. 使用 clearfix 清除浮动 (推荐)

    这是最常用的也是最推荐的清除浮动的方法。它利用伪元素 ::after#middle 内部创建一个不可见的块级元素,并将其清除浮动,从而撑开 #middle 的高度。

    div#middle::after {
        content: "";
        display: table;
        clear: both;
    }
    

    2. 给 #middle 设置 overflow: hiddenoverflow: auto

    这种方法比较简单,但需要注意的是,如果 #middle 内部的元素超出了它的高度,可能会被隐藏或出现滚动条。如果你的设计不允许出现滚动条,或者需要显示所有内容,那么这种方法并不适用。

    div#middle{
        overflow: hidden; /* 或 overflow: auto */
    }
    

    3. 给 #middle 设置固定高度

    这种方法不太灵活,因为你必须预先知道 #sidebar#content 的高度,才能设置正确的 #middle 高度。如果内容是动态的,这种方法就很难维护。

    div#middle {
        height: 1000px; /*  根据实际需要调整 */
    }
    

    4. 在 #sidebar 后面添加一个空的 div 并清除浮动

    这种方法比较繁琐,不推荐使用。

    <div id="middle">
        <div id="sidebar">
            ...
        </div>
        <div style="clear:both;"></div> <div id="content">
            ...
        </div>
    </div>
    

    最佳方案:使用 clearfix

    将以下代码添加到你的 style.css 文件中:

    div#middle::after {
        content: "";
        display: table;
        clear: both;
    }
    

    这种方法兼容性好,代码简洁,不会产生副作用,是清除浮动的最佳实践。

    最终修改后的 CSS 代码:

    body{ margin:0;}
    div#wrapper{ margin:0 auto; width:1000px; background:lightgreen;}
    div#header{ height:120px; width:1000px; background:lightblue;}
    div#middle::after {  content: "";  display: table;  clear: both;} /* 添加 clearfix */
    div#sidebar{ width:240px; float:left; background:lightgreen;}
    div#content{ width:760px; float:left; background:cyan;}
    div#footer{ height:100px; width:1000px; float:left;  background:lightblue;}
    /* ... 其他样式 ... */ 
    

    这样修改后,红色的 #wrapper 区域就能正确地显示浅绿色背景了,因为 #middle 的高度会被内部的浮动元素撑开。

    希望以上解释和解决方案对你有帮助! 请尝试使用 clearfix 方法解决问题。 如果还有其他疑问,请随时提出。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(21条)

报告相同问题?

问题事件

  • 系统已结题 11月16日
  • 已采纳回答 11月8日
  • 创建了问题 11月7日