当前位置:  开发笔记 > 编程语言 > 正文

如何强制子div为父div的高度的100%而不指定父级的高度?

如何解决《如何强制子div为父div的高度的100%而不指定父级的高度?》经验,为你挑选了12个好方法。

我有一个具有以下结构的网站:



导航位于左侧,内容div位于右侧.内容div的信息通过PHP引入,因此每次都不同.

我如何垂直缩放导航,使其高度与内容div的高度相同,无论加载哪个页面?



1> Aiphee..:

对于父母:

display: flex;

你应该添加一些前缀,http://css-tricks.com/using-flexbox/.

编辑:正如@Adam Garner所说,align-items:stretch; 不需要.它的用途也适用于父母,而不是孩子.如果要定义子项拉伸,请使用align-self.

.parent {
  background: red;
  padding: 10px;
  display:flex;
}

.other-child {
  width: 100px;
  background: yellow;
  height: 150px;
  padding: .5rem;
}

.child {  
  width: 100px;
  background: blue;
}
Only used for stretching the parent


2> cletus..:

注意:此答案适用于不支持Flexbox标准的旧版浏览器.有关现代方法,请参阅:https://stackoverflow.com/a/23300532/1155721


我建议你看一下使用跨浏览器CSS和无黑客的Equal Height Columns.

基本上,使用CSS以浏览器兼容的方式执行此操作并非易事(但对于表格而言微不足道),因此请找到适合您的预打包解决方案.

此外,答案取决于您是想要100%高度还是相同高度.通常它的高度相等.如果它是100%高度,答案会略有不同.


这看起来是一个很好的解决方案,直到你绘制一个边框`border:1px solid blue`例如`container2`:蓝色边框位于前两列,而不是第二列,只是你预期的那样.

3> Travis..:

这是一个令人沮丧的问题,一直与设计师打交道.诀窍是你需要在CSS中的BODY和HTML上设置高度为100%.

html,body {
    height:100%;
}

这个看似毫无意义的代码是为浏览器定义100%的含义.令人沮丧,是的,但这是最简单的方法.


这只适用于所有父母都有100%的身高,仅仅设置html和身体是不够的,所有父母都必须定义身高.
除了它并不总是有效之外,例如,如果你有一个相对定位的元素在一个绝对定位元素内,它就不再强制hasLayout.

4> 小智..:

我发现设置两列display: table-cell;而不是float: left;效果很好.


MS自己不再支持它,如果这有助于任何人说服他们的客户......
提升这个答案.把你的背部放进小伙子!
这应该是公认的答案.时代已经改变,这个答案适用于[所有浏览器](http://caniuse.com/#feat=css-table)(在Safari 5.1.17中有小怪癖).两行CSS并且您可以立即获得您正在寻找的效果而我无法想到.

5> David Thomas..:

如果您不介意在意外短的内容div中剪辑导航div,那么至少有一种简单的方法:

#main {
position: relative;
}

#main #navigation {
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 10em; /* or whatever */
}

#main #content {
margin: 0;
margin-left: 10em; /* or whatever width you set for #navigation */
}

另外还有人造柱技术.


非常感谢,你救了我的一天.不知道有人可以定义顶部和底部,它会以这种方式工作.

6> 小智..:
#main {
    overflow: hidden;
}
#navigation, #content {
    margin-bottom: -1000px;
    padding-bottom: 1000px;
}



7> 小智..:

使用jQuery:

$(function() {
    function unifyHeights() {
        var maxHeight = 0;
        $('#container').children('#navigation, #content').each(function() {
            var height = $(this).outerHeight();
            // alert(height);
            if ( height > maxHeight ) {
                maxHeight = height;
            }
        });
        $('#navigation, #content').css('height', maxHeight);
    }
    unifyHeights();
});


`Math.max()`将是你的朋友.

8> 小智..:

尝试将底部边距设为100%.

margin-bottom: 100%;


或填充底部:100%; 它不精确,但在某些情况下效果很好.

9> 小智..:
#main {
   display: table;
} 
#navigation, #content {
   display: table-cell;
}

看看这个例子.



10> Lajos Meszar..:

height : 仅当您拥有指定百分比高度且在顶层具有固定高度(以像素,ems等为单位)的所有父节点时才会起作用.这样,高度将级联到您的元素.

您可以指定100%的html和body元素,如前面所述的@Travis,以使页面高度级联到您的节点.



11> Hakan Fıstık..:

经过长时间的搜索和尝试,没有解决我的问题,除了

style = "height:100%;"

关于儿童div

并为父母申请

.parent {
    display: flex;
    flex-direction: column;
}

另外,我正在使用bootstrap,这并没有破坏对我的响应.



12> Dmitry..:

基于本文中描述的方法,我创建了.Less动态解决方案:

HTML:

Column 1
Column 2
Column 3

减:

/* Changes these variables to adjust your columns */
@col1Width: 60%;
@col2Width: 1%;
@padding: 0%;

/* Misc variable. Do not change */
@col3Width: 100% - @col1Width - @col2Width;

#container3 {
    float: left;
    width: 100%;
    overflow: hidden;
    background-color: red;
    position: relative;

    #container2 {
        float: left;
        width: 100%;
        position: relative;
        background-color: yellow;
        right: @col3Width;

        #container1 {
            float: left;
            width: 100%;
            position: relative;
            right: @col2Width;
            background-color: green;

            #col1 {
                float: left;
                width: @col1Width - @padding * 2;
                position: relative;
                left: 100% - @col1Width + @padding;
                overflow: hidden;
            }

            .col2 {
                float: left;
                width: @col2Width - @padding * 2;
                position: relative;
                left: 100% - @col1Width + @padding + @padding * 2;
                overflow: hidden;
            }

            #col3 {
                float: left;
                width: @col3Width - @padding * 2;
                position: relative;
                left: 100% - @col1Width + @padding + @padding * 4;
                overflow: hidden;
            }
        }
    }
}

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有