flex盒子里面元素linehight对高度的影响

那天,高高兴兴的测试flex属性。大家都知道,当父盒子display:flex的时候,子盒子即使宽高和大于父盒子,也会由于flex的特性进行收缩;然而,在给父盒子加了flex-direction:column之后,居然出现了:

它们没收缩!!!!!!

html:

<div class="father">
    <div class="box1">1</div>
    <div class="box2">2</div>
    <div class="box3">3</div>
    <div class="box4">4</div>
</div>

css(没加flex-direction:column):

.father{
            width: 300px;
            height: 300px;
            background-color: pink;
            display: flex;
            margin: 100px auto;
        }
        .box1,.box2,.box3,.box4{
            width: 100px;
            height: 100px;
            line-height: 100px;
            text-align: center;
        }
        .box1{
            background-color: red;
        }
        .box2{
            background-color: yellow;
        }
        .box3{
            background-color: green;
        }
        .box4{
            background-color: purple;
        }

再三测试,发现是行高的影响

又再三测试,总结出来了一些规律

在竖直方向上

  a.当盒子的行高和大于等于父盒子时候,行高最大的盒子的行高

    1.大于等于自身设定的高度,则高度为设定的高度;剩下的父盒子高度则为父盒子原高度减去子盒子的高度;然后再其他盒子进行判断。

    2.小于自身设定的高度,则高度为行高

  b.当盒子的行高和小于父盒子的时候,行高最大的盒子的行高    

    1.大于等于父盒子高/盒子个数且大于盒子设定的高度时,则该盒子高度为设定的高度,剩下的父盒子高度则为父盒子原高度减去子盒子的高度;然后再其他盒子进行判断

    2.大于等于父盒子高/盒子个数且小于盒子设定的高度时,则该盒子的高度为行高,剩下的父盒子高度则为父盒子原高度减去子盒子的高度;然后再其他盒子进行判断。

    3.小于父盒子高/盒子个数且小于盒子设定的高度时,则盒子们均分剩下的高度;

  如1:父盒高为300px,四个子盒子高为100px;行高分别设为120px,100px,45px,45px;总行高为120+100+45+45=310>300

    则:盒子1行高大于等于自身设定的高度(120>100),走a1路线,盒子1高度将为100px;父盒子剩下高度为300-100=200px;

      剩下三个盒子总行高为100+45+45=190<200px,父盒子高度/盒子个数=200/3 = 66px

      则盒子2行高大于等于自身设定的高度(100>=100),走b1路线,盒子2 高度将为100px;父盒子剩下的高度为200-100=100px

        剩下两个盒子总行高为45+45=90<100px 父盒子高度/盒子个数=100/2=50px

          则盒子3,盒子4,均不符合行高小于父盒子高度/盒子个数(45<50),走b3路线,均分剩下的100px;每份50px;

          最终结果将如下

  如2:父盒高为300px,四个子盒子高为100px;行高分别设为80px,80px,80px,70px;总行高为80+80+80+70=310>300px;

    则:盒子1,2,3行高小于自身设定的高度(80<100),走a2路线,盒子1,2,3高度将为80px;父盒子剩下高度为300-240=60px;

      剩下盒子总行高为70px>60px,

        盒子4行高小于自身设定的高度(70<100),走a2路线,盒子4高度将为行高即60px,最候结果如下:

  

  如3:父盒高为300px,四个子盒子高为100px;行高分别设为57px,120px,30px,90px;总行高为57+120+30+90=297<300px;

    则:盒子2行高大于等于自身设定的高度(120>100),走b1路线,盒子1高度将为100px;父盒子剩下高度为300-100=200px;

      剩下三个盒子总行高为57+30+90=177<200px,父盒子高度/盒子个数=200/3 = 66px;

        则盒子4大于等于父盒子高/盒子个数且小于盒子设定的高度(100>90>66),走b2路线,盒子2 高度将为行高90px;父盒子剩下的高度为200-90=110px

          剩下两个盒子总行高为57+30=87<110px,父盒子高/盒子个数=100/2=50px

            则盒子1大于等于父盒子高/盒子个数且小于盒子设定的高度(100>57>50),走b2路线,盒子1 高度将为行高57px;父盒子剩下的高度为110-57=53px

              剩下的盒子30<57/1,走b3路线,53分给盒子3

            最终结果为 57px,100px 53px,90px;如图

    基本验证无误,欢迎大家测试。实际布局中应该尽量避免大数值的行高设置。(其实这个测试很无聊)

时间: 2024-10-12 13:22:38

flex盒子里面元素linehight对高度的影响的相关文章

【Flex】子元素设置百分比高度生效的解决方法

一.问题描述: 当使用Flex布局时,子元素设置百分比高度后,如下图没有效果: 二.解决方法: 父元素必须设置高度,效果如下图: 三.完整代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initi

【css3网页布局】flex盒子模型

1.0 前言 网页布局(layout)是CSS的一个重点应用. 经典布局类型: 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. 2009年,W3C提出了一种新的方案----Flex布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能,成为了现下最流行的布局方式. Flex布局是什么? Flex是Flexible

(转)css3的flex盒子布局

Flex 布局教程:语法篇 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. 2009年,W3C提出了一种新的方案----Flex布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能. Flex布局将成为未来布局的首选方案.本文介绍它的语法,下一篇文章给出常见布局

HTML连载39-外边距合并现象、盒子模型以及宽度和高度

一. 在默认布局的垂直方向上,默认情况下外边距是是不会叠加的,会出现合并现象,谁的外边距较大,就听谁的:但是在水平方向就不会出现这种状况,我们举个例子 span{ display: inline-block; width:100px; height:100px; border:1px solid red; } div{ width:100px; height:100px; border:1px solid green; } /*我们让span的两个盒子,相距100px*/ .hezi1{ mar

flex盒子布局

Flex布局语法教程 网页布局(layout)是css的一个重点应用 布局的传统解决方案:基于盒状模型,依赖display+position+float属性.它对于那些特殊布局非常不便,比如,垂直剧中就不易实现 //传统解决垂直居中 <div class = "content"></div> <style> .content{ width:300px; height:300px; background-color:orange; margin:0 a

web前端入门到实战:外边距合并现象、盒子模型以及宽度和高度

一. 在默认布局的垂直方向上,默认情况下外边距是是不会叠加的,会出现合并现象,谁的外边距较大,就听谁的:但是在水平方向就不会出现这种状况,我们举个例子 span{ display: inline-block; width:100px; height:100px; border:1px solid red; } div{ width:100px; height:100px; border:1px solid green; } /*我们让span的两个盒子,相距100px*/ .hezi1{ mar

jquery iframe取得元素与自适应高度

总结一下iframe在jquery中怎么操作的,下面我来给各位介绍jquery 获取iframe子/父页面的元素及iframe在jquery高度自适应实现方法,各位朋友可参考. jquery方法: 在iframe子页面获取父页面元素 $('#objId', parent.document); 在iframe子页面获取父页面元素 代码如下:  代码如下 复制代码 $('#objId', parent.document); // 搞定... 在父页面 获取iframe子页面的元素代码如下:  代码如

子元素浮动 父元素不能自动调节高度的问题

我们知道,子元素浮动或者相对定位,元素都会脱离文档流.而父元素如果没有设置固定高度,在计算高度时,就不会计算浮动子元素所占的高度.但是,有时候我们需要父元素计算其所有子元素的的高度(包括浮动元素)来调整自己的宽高,以便调节自身的背景 border等,此时,只需要给父元素添加css属性: overflow:auto; zoom : 1; 父元素就会自动计算包括浮动子元素内所有子元素的高度来调整自己的高度.

[装载]float元素浮动后高度不一致导致错位的解决办方法

原文出处:float元素浮动后高度不一致导致错位的解决办方法 给换行后的第一个li添加clear:left 如: ul li{float:left;width:160px;} .c{clear:left;} <li>1</li> <li>2</li> <li>3</li> <li class="c">4</li> <li>5</li> <li>6</