关于一个css的问题:子元素是浮动的,父元素高度不能撑开

@Ta 2017-11-16 7384点击
子元素是浮动的,父元素高度不能撑开。

但若给父元素加上overflow: hidden;便可以?

why?
哪位大佬来解释一下?/xk
回复列表(12|隐藏机器人聊天)
  • @Ta / 2017-11-16 / /
    子元素浮动后就脱离标准文档流了,是肯定撑不开父元素的。
  • @Ta / 2017-11-17 / /
    我看标签都几个月了还没记住,CSS估计就更看不懂了
  • @Ta / 2017-11-17 / /
    我只知道overflow:hidden是用来清除浮动溢出的。还有你问之前为啥不试试看
  • @Ta / 2017-11-17 / /
    @灰色头像,已经解决了才发的帖子,想来讨论讨论。。。。加上overflow: hidden;父元素便被撑开。
  • @Ta / 2017-11-17 / /
    @东城,加上overflow: hidden;父元素便被撑开。。。。。

    @MFVPNHAHA,加油
  • @Ta / 2017-11-17 / /

    @无道, overflow:hidden这个CSS样式是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是很了解。一提到清除浮动,我们就会想到另外一个CSS样式:clear:both,我相信对于这个属性的理解大家都不成问题的。但是对于“浮动”这个词到底包含什么样的含义呢?我们下面来详细的阐述一下。

    这是一个常用的div写法,下面我们来书写样式。大家可以在DMX中自己做试验

    box{

          width:500px; 
    
          background:#000; 
    
          height:500px;

    }

    content {

          float:left; 
    
          width:600px; 
    
          height:600px; 
    
          background:red;

    }

      给box这个div加了一个overflow:hidden这个属性解决了这个问题。我们直到overflow:hidden这个属性的作用是隐藏溢出,给box加上这个属性后,我们的content 的宽高自动的被隐藏掉了。另外,我们再做一个试验,将box这个div的高度值删除后,我们发现,box的高度自动的被content 这个div的高度值给撑开了。说到这里,我们再来理解一下“浮动”这个词的含义。我们原先的理解是,在一个平面上的浮动,但是通过这个试验,我们发现,这不仅仅是一个平面上的浮动,而是一个立体的浮动!也就是说,当content 这个div加上浮动这个属性的时候,在显示器的侧面,它已经脱离了box这个div,也就是说,此时的content 的宽高是多少,对于已经脱离了的box来说,都是不起作用的。当我们全面的理解了浮动这个词的含义的时候,我们就理解overflow:hidden这个属性中的解释,清除浮动是什么意思了。也就是说,当我们给box这个div加上overflow:hidden这个属性的时候,其中的content 等等带浮动属性的div的在这个立体的浮动已经被清除了。这就是overflow:hidden这个属性清除浮动的准确含义。当我们没有给box这个div设置高度的时候,content 这个div的高度,就会撑开box这个div,而在另一个方面,我们要注意到的是,当我们给box这个div加上一个高度值,那么无论content 这个div的高度是多少,box这个高度都是我们设定的值。而当content 的高度超过box的高度的时候,超出的部分就会被隐藏。这就是隐藏溢出的含义!

    我是一条只会说6666666666666666666的咸鱼
    召唤大佬前来顶贴@梦浪的小虾米

  • @Ta / 2017-11-17 / /

    mark

    @梦浪的小虾米,您收藏了这个帖子

  • @Ta / 2017-11-17 / /
    @梦浪的小虾米,大佬666
  • @Ta / 2017-11-17 / /
    @无道,你才是大佬,我以前还是看你的代码长大的
  • @Ta / 2017-11-18 / /
    @梦浪的小虾米,以前我只是看真的大佬的代码,然后加以加工做成源码的。

    现在才在系统的学习。。。。。。。
  • @Ta / 2017-11-18 / /
    @无道,我之前常用的一个方法

    .clearFloat::after{
        display: block;
        content: '';
        clear: both;
    }

    喜欢用sass 这样写起来更好看,不用独立写出来

    .clearFloat{
        ...code

        &::after{
           display: block;
           content: '';
           clear: both;
        }
    }
  • @Ta / 2018-03-11 / /

    也许你可以对子元素改用display: inline-block,然后就可以左对齐右对齐了,不再需要float

添加新回复
回复需要登录