美文网首页
CSS float,浮动与清除浮动

CSS float,浮动与清除浮动

作者: tazbingor | 来源:发表于2017-03-28 17:22 被阅读0次

    什么是float?

    CSS的 float 属性可以使一个元素脱离正常的文档流,然后被安放到它所在容器的的左端或者右端,并且其他的文本和行内元素环绕它。
    而当初为了实现图片被文字环绕的效果,于是才有了float,与此同时也关乎HTML的默认文档流布局,也就是从上至下,从左到右,块级元素换行等等

    属性

    left
    表明元素必须浮动在其所在的块容器左侧的关键字。
    right
    表明元素必须浮动在其所在的块容器右侧的关键字。
    none
    表明元素不进行浮动的关键字。(默认)
    inline-start
    关键字,表明元素必须浮动在其所在块容器的开始一侧,在ltr脚本中是左侧,在rtl脚本中是右侧。
    inline-end
    关键字,表明元素必须浮动在其所在块容器的结束一侧,在ltr脚本中是右侧,在rtl脚本中是左侧。

    float:left

    创建两个div与两个input的标签,为他们设置宽高,并且同时设置float:left,效果如下
    1.一般情况下
    全部紧贴在一起了(一行),并且右侧留有空余


    2.缩小浏览器的情况下
    input会根据自身情况选择换行

    float:right

    依葫芦画瓢,把这四个标签全部修改为float:right
    1.一般情况下
    左侧留有空余


    2.缩小浏览器的情况下
    左侧留有空余,并同时换行

    以上关于float:left和float:right的四个小例子其实可以得知浮动的核心就是,浮动的元素会脱离文档流从而向左或向右浮动,直至碰到另一个浮动元素或者父元素为止.

    关于浮动的特征##

    在刚才介绍float属性的时候,为了方便测试,就将<body>加上了边框效果,从效果上来说,其实已经的得出了浮动的特征.
    首先从边框的效果可以得知,父元素的高度是由子元素决定的,因为他们现在仍属于文档流


    再举个例子,将所有的元素再次添加 float: right

    再将body的高度设置为10px,同时拉伸当前浏览器的宽度,这样效果更明显

    从图上效果进行对比得知,添加了浮动会使其脱离文档流,使其对整个页面的布局造成巨大的影响.浮动元素脱了文档流,从而也不会占据文档流的位置,也不可能再将body撑开,因此body失去了高度,被坍缩.效果就像PS里的画布一样被分了层.以此同时,在浮动元素都设置了相同方向的时候(向左/向右),会以碰到另一个相同方向的浮动元素为止.这是浮动元素内联排列的特征.我们在回到图中还能看到一个有趣的现象,input与div,行内元素与块元素处在一行,这从侧面也反映了浮动另一特征:浮动元素会生成块元素,无论它原来是什么元素(块元素,行元素)

    浮动特征总结:
    1.浮动元素会脱离文档流
    2.浮动会导致父元素高度坍塌
    3.浮动可内联排列
    4.行内元素浮动后,将变成块元素

    清除浮动 clear

    **clear
    ** CSS 属性指定一个元素是否可以在它之前的浮动元素旁边,或者必须向下移动(清除浮动) 在它的下面。clear 属性适用于浮动和非浮动元素。
    属性:
    1.left : 不允许左边有浮动对象
    2.right : 不允许右边有浮动对象
    3.both : 不允许有浮动对象
    4.none : 默认值。允许两边都可以有浮动对象
    5.inline 继承

    粗暴清除浮动

    这是最简单的一种清除浮动的方式,在浮动元素后面加一个任何标签并样式设置clear:both即可


    向这种clear:both的方式和clear:left 与clear:right 都属于那种简单粗暴来实现清除浮动的效果.虽简单,但是不利于维护.
    1.clear:both是一个空的div,页面复杂,则需要添加大量的,无语意的html元素,不易维护
    2.给浮动的元素的容器添加浮动(为容器添加clear:left 和clear:right )破坏了原有的布局,使整体浮动,需酌情处理
    这两种不推荐使用!!!

    CSS的:after伪元素清除浮动

    仍然是依照上面的例子,为其添加了after伪元素

    .clearfix:after {
        display: table;
        content: " ";
        clear: both;
    }
    

    其实还可以这么理解
    清除浮动的作用只是仅仅只是清除浮动,不会改变原有浮动设置的方向,浮动的元素依然浮动.只是这个清除浮动的元素把父容器撑起来了

    参考:
    1.<a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/clear ">MDN clear</a>
    2.<a href="https://developer.mozilla.org/zh-CN/docs/CSS/float">MDN float</a>

    其实还有更好的清除浮动方案
    to be continued...

    相关文章

      网友评论

          本文标题:CSS float,浮动与清除浮动

          本文链接:https://www.haomeiwen.com/subject/grefottx.html