web浮动塌陷的原因和简单解决方案

web浮动塌陷的原因和简单解决方案

Introduce

因为学校的学弟学妹们偶尔会问问float的问题,每次都说百度去,好像也不太好。 就。。整理下把。也给未来什么时候犯傻的自己做一份准备

about

作图是不可能的, 这辈子都不可能作图的。我都懒死了

Tool

  1. vscode
  2. chrome
  3. 百度

Phenomenon

我还记得我第一次遇到这个问题的时候是这个样子。 一个底层div 背景原谅色里面塞了一个ul标签。ul标签里是若干个li标签。 大概七八个把。竖着的,就觉得很丑。 于是floa:left;还加了个margin。美滋滋的想,哇好漂亮啊,突然发现。哎,背景呢?边框呢?一首凉凉送给自己。审查元素查一查,发现父级div标签的高度变成了0 . border重合。背景消失

Reasons

简单的说说原因把

  1. float有个特性,叫做脱离文本流,文本流的意思就是按照一个人正常书写的方式自左向右,自上而下的写dom节点。脱离文本流的最直观表现就是,在它本身出现的地方,biu消失了,或者到别的地方了。而它原来所在的位置可以被别的dom节点所占有了
  2. 所以当元素float之后,就不存在文本流了。那他父级div就懵逼了。 哎,我儿子呢? 我儿子多大我就得多大啊。 他不在文本流了 ,那就不占大小了啊。 那我。。。 也变成0吧。 嗯,于是父级元素高度归0,宽度归它父级元素的100%。这就是浮动的塌陷了。
  3. 可是我一般不能让浮动塌陷啊,塌陷了我的背景怎么办,border怎么办。。我那可爱的学弟告诉我,那我不要背景了,不要border了。。 咳咳咳 ,你怕是想被你的产品打死或者被ui骂死
  4. 学弟被我训了一顿,有点傻,又提出来一个意见,那我在子级div设置背景? 嘿嘿嘿 我没告诉他 我以前也这样干过。 但是会出现一个问题。 你后来出现的dom节点的布局还是有问题。
  5. 于是刚学会审查元素的学弟又想出来一招。我给父级加上高度。 哈哈哈,这样是不是就完美解决了。 嗯 我以前也干过。 直到有一天 发现不兼容浏览器。。 移动端和pc端看到了 就不同。。可能很细微,但是你的产品不会管的。。。

Solution

我工作的地方离我最近的墙上贴着一面板子, 办法总比困难多,实在不行百度啊。 啊? 懒得百度? 那我帮你整理吧

  1. 最傻最二的方法,初学者可以在审查元素里查出这一块标签实际的大小,然后赋给父级元素高度和宽度,好的,解决。但是极度不可靠。工作的时候这样子肯定凉凉。

  2. 第二傻的方法,给父级元素也加上浮动,那么爸爸儿子就一起动起来了,动次打次,一起浮动,好的 解决了父级塌陷的问题。但是 ,你父级元素的定位不会出问题吗? 排版不会出问题吗? 总不能一个网页从头到尾浮动吧。 好的 ,又凉凉了

  3. 添加一个div,给它加上style= “clear:both”;我以前用过,后来放弃了, 因为每次反复的写div真烦,而且是空白的毫无意义的节点。这对依赖dom操作的原生js和jq 有点不太友好。

  4. 伪类,在浮动元素之后加一个伪类标签,比如

    <div class="box">
       <div class="son">我是浮动的子元素</div>
    </div>
    
    .box {
       width:400px;
       background:#F00;
    }
    .son {
       float:left;
    }
    .son::after {
       content:"";
       clear:both;/*清除浮动*/
       display:block;/*确保该元素是一个块级元素*/
    height:0;
    width:0;
    visibility :hidden;
    }

    我觉得这是最棒的解决方法,目前来说。 你可能觉得这样写css太累了, 没关系啊。 以后有sass可以用,贼简单,容易上手。

    1. overflow:hidden

      • 隐藏溢出,当内容超过其父元素时,可以使用该属性和值将溢出的部分裁剪掉,使页面更加美观
      • 清除浮动,当子元素浮动时,给父元素添加overflow:hidden,按照它的第一个特性,应该将子元素超出的部分截掉,但是因为子元素有浮动,无法裁剪,所有只能由父元素增加高度去包裹住子元素,使得父元素拥有了高度,而这个高度是跟随子元素自适应的高度,这样就把浮动的子元素包含在父元素内了。

writer&contact

Jontyy jontyy@163.com

github

https://github.com/YJD199798

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值