快速了解浮动

浮动的初衷
    浮动刚创建出来时,并不是为了实现块级元素并排显示的,是实现所谓的字围效果,即让文字绕着图片显示。由于文字是环绕在图片周围,所以浮动半脱离标准文档。如果是全脱离标准文档流,文字都会直接钻上去。
    但是,现在我们使用浮动,并不是为了字围效果,而是使用浮动让块级元素可以并排显示,进行网页的布局。
    如果不使用浮动,只按照标签的特征,进行的默认布局,从上到下,从左到右进行排列,块级元素独占一行,行内元素并排显示,这种布局方案叫流式布局。流式布局就是遵循标准文档流进行的布局方案。
        不足:不能让块级标签并排显示。

浮动布局:可以让块级元素在同一行上并排显示。
        让一个块级元素在同一行并排显示的方案比较多,浮动仅仅是其中的一个方案而已。
        一个元素浮动了,它并没有脱离父元素。
        如果一个父元素中的子元素都浮动了,儿子都出国了,就不能撑起父元素了,父元素的高度就变了0,也就是所谓的父元素高度塌陷。
        也就是说对父元素的高度造成了影响,清除这种影响,也就是如何清除浮动,可以使用overflow:hidden 。

浮动的特性  
    破坏性:破坏了流式布局,可以让块级元素并排显示。
            在CSS3中,提出更好的一种布局方案,叫flex布局。在移动端(手机,平板)开发,可以使用flex来代替浮动布局。
    字围效果:两个div,在没有设置的情况下,由于都是块级标签,所以会各自独占一行。如果上面的div发生浮动,下面的div就会钻上去,但是如果下面的div中有文字,文字没办法钻上去,会在原位不动。
    贴靠性:两个div,如果都向一个方向浮动,它们两个就会贴靠在一起,此时两个div就并排显示了。
    浮动的块级元素具有包裹性:必须是块级元素,并且这个块级元素没有明确的设置尺寸。如果一个块级元素的width没有设置,它的宽度就是父元素的宽度的100%。如果此时让它浮动了,它的宽度由内容来决定,尽可能地压缩空间。这就是块级元素浮动所产生的包裹性。里面有多少内容,它的宽度就是多少。
    浮动的行内元素会变成块级元素:一个行内元素浮动了,相当于做了一个变性手术,变了块级元素。
            对于一个行内元素,不能设置宽度和高度。但是如果你让它浮动了,那它就变成一块级元素,可以设置宽高。

    对于下面的代码,就显示的比较low了:
        span{
            float: left;   // 因为float:left就可以让span变成块级标签
            display: block;   // 此行代码是多余的
            width: 80px;
            height: 80px;
            background-color: gold;
        }

右浮动的元素写在前面:
        如果盒子中只有右浮动,没有左浮动,效果会有错行的效果。解决:把右浮动的元素写在前面。
        如果有左浮动,也有右浮动,那么谁写在前面(左浮动的元素或是右浮动的元素)都OK的。

浮动的理解
        一个浮动的元素只会对它后面的元素造成影响,不可能对它前面的元素造成影响。
        一个右浮动的元素,先向上飘,飘到父元素边界时停止,然后向右飘,飘到父元素的边界就停止了。
    记住几句话:
        1)浮动的元素只会对它后面的元素造成影响
        2)如果一个块级元素没有浮动,这个元素肯定会独占一行
        3)浮动步骤:先上向  再向左/向右  停止
        4)两个浮动的元素会并排显示
      浮动元素超出父元素的高度,也会对后面的元素造成影响:
           解决:在受影响元素上面加上clear:both。
      如果一个父元素中的子元素都浮动了,父元素在没有设置高度的情况下,会塌陷。

清除浮动概述
        浮动会造成影响,包含对两个方面的影响:
        1)对后面的兄弟元素造成影响;
        2)父元素造成影响:造成父元素的高度塌陷。
    解决对后面的兄弟元素造成影响
        clear 解决对兄弟元素造成影响。 谁受影响了,就在谁的身上加上clear。
            clear取值:
                left :清除左浮动所造成的影响。  代表后面的元素也不受影响。 只能清除左浮动所造成的影响,不能清除右浮动所造成的影响。
                right : 清除右浮动所造成的影响。只对右浮动有效。
                both : 清除左右浮动所造成的影响。 开发中,直接使用both就OK。
                none : 默认值,表示不清除这种影响。

                    注意:
                        一个浮动的元素只能影响它后面的元素,前面的元素是影响不到的。
                        一个块级元素没有浮动,它肯定会独占一行的。
                        clear只能作用于块级元素,对于行内元素是没有效果。
     解决对父元素造成的影响:
          1)加高法   并不好   把高度限定死  往往高度是靠内容撑起来的   如果一个页面中高度是固定死的,也可以使用加高法。
          2)overflow:hidden 小偏方  最终的高度也是内容撑起的
             overflow:本意是用来处理溢出的。
                overflow取值:
                    hidden 溢出的内容会被隐藏掉,不可见。
                    scroll 溢出的内容 产生滚动条 通过滚动条可到全部的内容
                    visible 默认值  溢出的内容正常显示
                        溢出的内容的内容不占见面空间。
          3)让父元素也浮动起来
          4)使用clear清除对父元素造成的影响(内墙法):
            1.给父元素添加一个子元素  这个子元素不浮动,添加到最后。
            2.给这个元素加上clear:both
            真实开发中,我们会使用after伪元素来清除浮动:
                伪类选择器:不存在的一个类  :hover
                伪元素:页面中不存在的一个元素      
            after伪元素:
                .father:after  表示在father元素的内部最后添加一个元素
                创建出来的伪元素默认并不是块级的,clear只能作用块级元素,所以说需要给这个伪元素添加display:block
                .father:after{
                    content:"hello";   新增加元素中的内容
                    clear: both;   用来清除浮动的
                    display: block;  让伪元素变成块级,默认是inline
                }
            提炼出一个清除浮动的类:
                .clearfix:after{
                    content: "";
                    clear: both;
                    display: block;
                }
                通常写法:
                .clearfix:after{
                    display: block;
                    content: "";
                    overflow:hidden;
                    height:0;
                    clear: both;
                    visibility: hidden;
                }
                .clearfix{*zoom:1}

浮动的应用场景:
        1)页面中的左右结构
            实现:
                父元素  .clearfix
                    左  float:left
                    右  float:right
        2)页面中多列布局
            实现:
                父元素     .clearfix
                    第1列  float:left
                    第2列  float:left
                    第3列  float:left
                    第4列  float:left
                    ..       
                    每一列中间的间隙。margin-right  
                    中间1px边框的问题  margin负值           
        3)左侧固定宽度,右侧自适应
            实现:
                父元素:  当父元素的宽度变化时,那么右侧的宽度也跟着变化
                    左侧  宽度必须  浮动
                    右侧  margin-left可以为左侧宽度
        4)页面中的左中右结构
            实现
                父元素: 不需要清除浮动
                    左:左浮动
                    中: text-align:center;  margin:0 auto;
                    右:右浮动  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值