【问题标题】:How to make div height increase to include floated image如何使 div 高度增加以包含浮动图像
【发布时间】:2019-04-12 11:36:56
【问题描述】:

这就是问题所在。我有一个 div,其中包含几段文本,然后是一个向右浮动的图像。图像应正确浮动,但包含的 div 不会垂直扩展以适应图像。我知道我可以手动设置 div 的高度,但这会产生问题,因为我想为我网站的每个页面使用相同的 div,因此高度需要不同。

这是一个代码示例:

#main_contentbox {
  width: 918px;
  margin: 10px auto;
  padding: 10px 20px 20px 20px;
  background-color: #ffffff;
  border-style: solid;
  border-width: 1px;
  border-color: #000;
}

#main_contentbox img#sample {
  float: right;
}
<div id="main_contentbox">
  <h1 class="page"> The Event </h1>
  <img id="sample" src="sample.jpg" />
  <p>
    stackoverflow is awesome!stackoverflow is awesome!stackoverflow is awesome!stackoverflow is awesome!stackoverflow is awesome!stackoverflow is awesome!stackoverflow is awesome!</p>

  <p>stackoverflow is awesome!stackoverflow is awesome!stackoverflow is awesome!stackoverflow is awesome!


</div>

【问题讨论】:

    标签: html css


    【解决方案1】:

    您可以通过更改overflow 属性来更改父块处理浮动内容的行为。应该这样做:

    #main_contentbox { overflow: hidden; }
    

    【讨论】:

    • :o 我怎么能错过.. +10(如果可以的话)我总是使用 clear:both 技术...
    • overflow 的这个特殊功能并不是那个众所周知的。
    • overflow 与盒子模型有什么关系?这是又一个 CSS 疯子吗?这虽然有效! +1
    • 我喜欢这个,但解释一下为什么它会很棒。
    • 这会为我剪辑包含图像。如何让高度和动态加载的图片一样?
    【解决方案2】:

    虽然@cletus 的解决方案在技术上是正确的,但将溢出设置为 any 值,而不是overflow: visible(默认值)、initial(显式使用默认值)或带有@987654326 的inherit @parent 将导致元素创建一个新的block formatting context。块格式化上下文是浮动元素可以与块交互的区域。这种情况(非溢出内的浮动元素:可见元素)被明确列为必须创建新上下文的原因:

    “如果浮动元素与滚动元素相交,它将强制重新包装内容。重新包装将在每个滚动步骤之后发生,从而导致缓慢的滚动体验。” - mdn

    因此,将重新计算此新上下文中任何直系子项的高度,并将包括他们的高度。

    我更喜欢在可能的情况下使用overflow: auto 来完成此操作,但scrolloverlayhidden 都会产生在计算父元素高度时包含浮动的预期结果.

    【讨论】:

    • 谢谢。 @cletus 的回答有效,但我不知道为什么。
    【解决方案3】:

    使用:after 伪类,您可以让命名的 div 自动附加明确的修复。将此添加到您的 css 文件中:

    #main_contentbox:after {
      content: "Foo";
      visibility: hidden;
      display: block;
      height: 0px;
      clear: both;
    }
    

    有了它,无论您在哪个页面上,您都无需执行任何操作来强制 main_contentbox 增长以包含其浮动。

    【讨论】:

    • 我将不得不进一步研究这一点,似乎使用 CSS 也有许多黑客或快速修复方法,但我关心的是学习正确的方法。
    • 不确定什么是“正确”的做事方式,但我在工作中经常使用浮点数,并且有几个:在伪类之后,我永远不必考虑它设计时。添加带有浮动类的元素,容器类总是知道做正确的事情。清除似乎是实现此目的的一种相当常见的方法(我知道至少维基百科的默认皮肤使用专用的清除类来做到这一点)。我的解决方案只是对此的推断。
    【解决方案4】:

    不妨试试 JavaScript:

    window.onload = FixMyDiv();
    
    function FixMyDiv()
    {
      var divh = document.getElementById('main_contentbox').style.offsetHeight;
      var imgh = document.getElementById('sample').style.offsetHeight;
    
      if(divh < imgh + 50) document.getElementById('main_contentbox').style.height = imgh + 50;
    
    
    }
    

    【讨论】:

    • 不要敲javascript,它肯定有它的位置,但我一直在寻找一个纯粹的CSS解决方案,因为这是严格基于设计和布局的问题。
    猜你喜欢
    • 2012-03-16
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    相关资源
    最近更新 更多