【问题标题】:How can stop a container div allowing contents to overflow?如何阻止容器 div 允许内容溢出?
【发布时间】:2012-06-15 15:19:42
【问题描述】:

好的,快速虚构的例子:

<div style="background: #CCC; margin: 10px;">
<div style="width: 50%; height: 400px; background: #FFF;">Child #1</div>
<div style="width: 600px; height: 400px; background: #999;">Child #2</div>
</div>

如果我将浏览器的宽度调整为小于 600 像素(子 #2),如何阻止父 div 继续缩小到浏览器窗口(并在此过程中缩小子 #1)。

本质上,当容器 div 碰到内部最宽的子元素时,如何防止容器 div 进一步缩小?

内容是动态的,所以不能指定孩子的宽度,我只是设置了孩子#2的宽度来说明这个问题。如果有任何特定宽度的元素(例如图像或完全缩小的表格等),也是一样的

【问题讨论】:

    标签: html css


    【解决方案1】:

    我不是 100% 确定您通过允许外部元素扩展和收缩但强制内部设置大小来尝试对您的网页做什么,但我建议的第一件事是设置 min-width css外部 div 上的属性。这样做会遇到的问题是,您现在在两个不同的地方指定了相同的值(这对于 css2 来说只是一种生活方式)。

    据我所知,没有 css 属性可以将父项的宽度限制为其子项的大小。如果该功能是绝对必要的,您可以用表格替换外部 div,但重新评估您的设计可能是一个更好的主意。也许如果您能详细说明为什么这是必要的,我们可以提供进一步的帮助。

    根据您的 cmets,您可以尝试以下方法:

    <html>
      <head>
        <title>Hi</title>
      </head>
      <body style="margin: 0; padding:0;">
        <table style="background: red;padding:100px;width:100%;" cellspacing="0"><tr><td>
        <table style="background: #CCC; width:100%;border:none;" cellspacing="0"><tr><td>
            <div style="width: 50%; height: 400px; background: #FFF;">Child #1</div>
            <div style="width: 600px; height: 400px; background: #999;">Child #2</div>
        </td></tr></table>
        </td></tr></table>
      </body>
    </html>
    

    您必须有嵌套表的原因是因为外部表允许您控制 html 或 body 标签的边距/填充。当您将边距应用于正文时,它不会影响页面的宽度,并且您总是会在底部看到一个滚动条。嵌套表格并让外部表格使用填充来模仿它可以解决问题。 (其他人可能会想出一个更优雅的解决方案)

    话虽如此,如果你的容器 div 只是设置背景颜色,你可以只设置屏幕的背景颜色。如果你的网页是左对齐的(我的设计师朋友会为我开枪),浏览器窗口会为你处理效果。

    【讨论】:

    • 嗯,基本上这是一个简单的容器 div,它包含网站的所有主要内容。我不希望这个容器 div 比它里面最宽的元素收缩得更远(不管它是什么)。允许这样做将进一步减少可变宽度容器内的其他元素。如果你 C&P 这个 html 并在浏览器中试用它,我不希望浅灰色比深灰色缩小得更远(但我不知道在任何特定情况下深灰色的宽度可能是多少)。跨度>
    • 我想我在问一些更长的问题,“你能解释一下为什么在部分内容固定的情况下让容器调整大小对你的案例很重要”。我知道你想要做什么,但如果我明白你想要通过这样做来实现什么,可能会有更好的方法。
    • 想象一下标准的左侧菜单/右侧内容场景。放入内容中的东西是多种多样的,没有办法以受控的方式(动态内容)来分辨其中的内容。所以我试图让容器没有任何内容溢出。我不想隐藏溢出我只是不希望容器缩小到最宽的孩子之外,如果这有任何意义的话。所以基本上你必须横向滚动浏览器才能看到它(比如用大图说)。实际上,我想为容器设置一种最小宽度,具体取决于它是未知的最宽子。
    【解决方案2】:

    受到 NickLarsen 周到而完整的回答的启发:在您的容器上尝试 display: table-cell

    【讨论】:

    • 这里的问题是这将不允许容器比最宽的孩子扩展得更远。这在 ie7/6 中也不起作用。
    猜你喜欢
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 2022-09-27
    • 2023-02-21
    相关资源
    最近更新 更多