代码之家  ›  专栏  ›  技术社区  ›  Prashant Singh

父div的高度为零,即使其子div的高度有限

  •  68
  • Prashant Singh  · 技术社区  · 13 年前

    我有一个网站,其布局如图所示。主体由一个 main container ,包括 header , parent div footer 这个 父div 进一步包含几个 child div 如图所示。

    Webpage Layout

    问题是所有 子div 是有限的。但是 父div 只包含子div。所有子div都可见,但父div的高度显示为零。我也没有通过给出一些预先指定的值来固定父div的高度,因为如果将来子div的数量增加,这可能会导致错误。

    父div大小为零的问题是,我的页脚div正在上升,并与父div的内容发生冲突。这可以通过提供合适的页边空白顶部来解决,但这不是我想要的解决方案。

    有人能给我一些建议吗?这样父div的高度就会根据子div的高度自动变化。

    如果我的疑问不清楚,请发表评论!

    3 回复  |  直到 13 年前
        1
  •  93
  •   VVV    7 年前

    看来你有个案子 clearfix class

    所以我猜你是在浮动子div,这就是为什么父div的高度是0。 使用浮动时,父对象不会适应子对象的高度。

    您可以将“clearfix”类应用于浮动元素的父级(当然,您需要在样式表中包含它),它将添加一个“insivible”最后。然后,您的父母将拥有正确的身高。

    注意,它是跨平台的,兼容IE6+,Chrome,Safari,Firefox,你能想到的!

    .clearfix:after {
        content: ".";
        display: block;
        clear: both;
        visibility: hidden;
        line-height: 0;
        height: 0;
    }
    
    .clearfix {
        display: inline-block;
    }
    
    html[xmlns] .clearfix {
        display: block;
    }
    
    * html .clearfix {
        height: 1%;
    }
    
        2
  •  65
  •   Paulo R.    8 年前

    尝试将以下内容添加到样式表中:

    #parentdiv:after { 
        content: " "; 
        display: block;
        clear: both;
    } 
    

    正如Daedalus在他的评论中所建议的那样,你可能是在浮动child divs。如果是这样的话,上面的行就修复了它。

    浮动对象时的问题是它们的父元素“忽略”了它们。

    上面的行创建了一个(pseudo-)元素并将其插入到#parentdiv中,该元素被向下推过所有浮动的div。然后,父div虽然忽略了浮动的子元素,但并没有忽略这个伪元素——正如它应该做的那样,它扩展以包含伪元素。现在,由于pseudo元素位于所有浮动子元素的下方,父div会发生,或者更好的是,似乎也“包含”浮动子元素——这正是您真正想要的。

        3
  •  1
  •   spodell    3 年前

    @Joo Paulo Macedo的作品,在一个风格化的div中实现:

    export const HeadroomWrapper = styled('div')`
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        background: white;
        z-index: 2;
        &:after { 
            content: " ";
            display: block;
            clear: both;
            height: 1px;
        }
    `;