gpt4 book ai didi

html - 为什么我的 div 超出了它的父 div?

转载 作者:太空宇宙 更新时间:2023-11-03 21:35:11 25 4
gpt4 key购买 nike

ID 为“message-box”的 Div 超出其父 div“message-container”我不明白为什么?

我使用了“溢出:自动;”在我的“消息框”CSS 中。但仍然没有给我想要的结果。当我在“消息框”上使用“溢出:自动”时,剩余边距无法正常工作。

下面是我的 HTML 文件:

<html>

<head>
<link rel="stylesheet" type="text/css" href="styles.css" >
<title>temp</title>
</head>

<body>

<div id="main">

<div id="header">header</div>

<div id="container">
<div id="user-container">user</div>

<div id="message-container">
<div id="message-box">message box</div>
<div id="text-box"> text box</div>
</div>
</div>

<div id="footer">footer</div>
</div>

</body>
</html>

下面是我的 CSS 文件:

#main{
border: 1px solid red;
margin: 5px;
}

#header{
border: 1px solid red;
height:30px;
margin: 10px;
}

#container{
margin:10px;
height:32em;
}
#footer{
border: 1px solid red;
height:30px;
margin: 10px;
}

#user-container{
border: 1px solid red;
float:left;
width:120px;
height:32em;
}
#message-container{
border: 1px solid red;
height:32em;
width:100%;

}
#message-box{
border: 1px solid grey;
overflow:auto;
margin:5px;
}
#text-box{
border:1px solid grey;
overflow:auto;
margin:5px;
}

请有人帮助我。

最佳答案

快速回答

你的 #message-box#message-container 相关的所有边距都正确div,但问题是#message-container#message-box溢出到#user-container .自 #message-boxoverflow属性,它在溢出到 #user-container 的确切边缘被剪裁.自 #message-container没有overflow , 它继续在 #user-container 后面流动到#container的边缘分区要解决此问题,请添加 overflow#message-container .

#message-container {
height: 32em;
border: 1px solid red;
overflow: hidden;
}

我想你在这里想要的是overflow: hidden剪辑溢出的内容; overflow: auto添加滚动条以查看溢出的内容。

解释

float#user-container导致问题。 float 从正常文档“流”中删除一个元素(请参阅下面的正常文档流)。

我为 #user-container 添加了背景颜色(绿色)和 #message-container (蓝色)所以你可以看到发生了什么。如果删除 overflow来自 #text-box#message-box ,您会看到边距实际上在 #message-box 之间正常工作和 #message-container .将它们添加回来,您将看到它们是如何被 #user-container 剪裁的.

这就是正在发生的事情 http://jsfiddle.net/fmceqbdp/2/

正常文档流

DOM 具有元素层次结构。该文档是最高级别的父项(或最外层的框),您添加的任何元素都是其子项。元素的起始位置是其父元素的左上角。如果您在同一级别(未嵌套)添加另一个元素,则它是文档的另一个子元素和第一个元素的兄弟元素。同级元素也希望尽可能靠近文档的左上角,但它会被第一个元素(行内)向右推或推到下一行( block )。当您将一个元素嵌套在该元素中时,嵌套元素就是子元素,它包含在父元素中。它的起始位置是其父元素的左上角。这是正常的文档流。 float 元素已从此正常流中移除,因此它不会像往常一样插入其他元素。

float 的行为方式

div 是 block 元素,它们将其他元素推开。然而,当你 float 一个元素时,它会从正常文档流中移除该元素——这意味着它的位置对同级元素(同一级别的元素)是不可见的,因此它们现在位于 float 元素的前面或后面尽管 float 元素不存在。因为你飘了#user-container , #message-container填满整个 #container好像#user-container不存在。

溢出如何运作

具有 overflow 的元素属性会自行清除,以免溢出到其他元素中。这就是为什么 #message-container流入了#user-container占据的空间但它的 child #message-box#text-box具有溢出属性的人已经清除了自己流入空间的问题#user-container .他们的利润率仍然相对于他们的 parent #message-container ,而不是他们被剪裁的地方,这就是为什么他们遇到 #user-container 的地方似乎没有左边距的原因。 .

有关详细信息,请参阅 http://css-tricks.com/the-css-overflow-property/ -- 向下滚动页面大约 1/4。

关于html - 为什么我的 div 超出了它的父 div?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27088158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com