关于CSS的浮动笔记

内容来是作者学习尚硅谷浮动的相关视频所做笔记,希望能帮助大家,欢迎补充。

前言

在某一天,小范忘记了flex布局的使用方法,却想三个盒子并排在同一行,于是他找到了浮动。

浮动

可以使浮动的框向左或向右移动,直到它的边缘碰到包含框或者另一个浮动框的边框为止。

浮动的作用:

可以是一个元素向其父元素的左侧或者右侧移动

浮动的属性:

float:

        可选值:none,默认值,元素不移动

                       left,元素向左移动

                       right,元素向右移动

浮动的主要特点

1.浮动的元素会完全脱离文档流,导致该元素下面的元素会自动向上排列。

2.并且脱离文档流的块元素,会具有行内块元素的性质。行内元素脱离文档流以后也会具有行内块元素的性质

 以下是同样打开开发者工具对盒模型选取的对比:

浮动前:占据一整行

关于CSS的浮动笔记

 浮动后:只占据自身盒子大小

关于CSS的浮动笔记

3.浮动元素向左或向右移动时,不会超过其他浮动的元素

4.浮动元素不会影响比它早设置(HTML里的顺序)的浮动元素,反而会被其影响。

5.设置浮动后,浮动元素会向父元素的左侧或右侧移动,且不会移出父元素

6.如果浮动元素上边是一个没有浮动的块元素,则浮动元素无法上移
 

脱离文档流的简易解释:一群兄弟div很有秩序的在饭堂(父元素)排好了一列队伍打饭,然后最前面的人打好饭了,他走了,后面的div就都往前走了一个位置。这时,走的那个人就叫做脱离文档流,它可以在饭堂内任意移动。但是如果这是二号div不想排了,那么他只能在一号之后活动,不能超过一号,后面同理。

好了,到此,小范的目的可以达到了。

但他还发现了浮动更加有趣有用的地方:

浮动的其他特点:浮动元素不会盖住文字,文字会自动环绕在浮动元素的周围

关于CSS的浮动笔记

这不就是我们经常在网上看到的像新闻那样的布局吗!?

原来这些页面是这样设计的,长芝士了。

高度塌陷

但是浮动也会导致一些缺点,比如高度塌陷的问题。

在浮动布局中,父元素的高度默认是被子元素撑开的,当子元素浮动后,其会完全脱离文档流,子元素从文档流中脱离,将会无法称其父元素的高度,导致父元素高度丢失。

比如我们设置父元素高度为auto,我们想让子元素撑开他,在我们子元素不浮动时,会是这样:关于CSS的浮动笔记

而如果我们子元素浮动后,则会出现这样的场景:子元素跑出来了,导致父元素高度丢失,边框之内没有元素了,不会给撑开。

关于CSS的浮动笔记 

 高度塌陷是常见的问题,但为了不让布局混乱,所以我们必须要解决:

高度塌陷解决办法:

1.高度写死(但不能满足随子元素变化

2.BFC

BFC是CSS中一个隐含的属性,可以为一个元素开启BFC 开启BFC的元素会变成一个独立的布局区域。

-开启BFC后的特点:

1.开启BFC的元素不会被浮动元素覆盖

2.开启BFC的元素子元素和父元素外边距不会重叠

3.开启BFC的元素可以包含浮动的子元素

开启BFC的方法:

1.设置元素的浮动

2.将元素设置为行内块元素

前面两种都不推荐,副作用比较大

3.将元素的overflow设置为一个非visible的值

        -常用方式: 为元素设置overflow:hidden 开启其BFC,以使其可以包含浮动元素

4.clear属性

        -作用清除浮动元素对当前元素所产生的影响

        -可选值:

                left          清除左侧浮动元素对当前元素的影响

                right        清除右侧浮动元素对当前元素的影响

                both        清除两侧中最大影响的那侧

原理:

        设置清除浮动后,浏览器会自动为元素添加一个上外边距,消除影响。

如果没有其他内容

可以通过伪类after来设置clear:both撑起父元素高度

最佳办法clearfix

这个样式可以同时解决高度塌陷和外边距重叠的问题

示例:

/*CSS*/
    <style>
        .box1{
            height: auto;
            border:5px solid red;
        }
        .box2{
            background-color: #bfa;
            width: 200px;
            height: 200px;
            float: left;
        }
        .clearfix::before,
        .clearfix::after{
            content: '';
            display: table;/*解决外边距折叠同时设置元素*/
            clear: both;/*解决高度塌陷*/
        }
    </style>
<!--HTML-->
    <body>
        <div class="box1 clearfix">
            <div class="box2"></div>
        </div>
    </body>

好了,学会了float属性,可以去完成一些简单的页面布局了,还学会了解决高度塌陷的问题,真不错呢。

上一篇:第五篇《盒子模型》


下一篇:块级格式化上下文BFC