css浮动

一、什么是浮动?

浮动就是半脱离文档流。定位完全脱离文档流。浮动用来布局,使块级元素能够并排显示。

浮动分为float:left(左浮动);float:right(右浮动)。

二、浮动的特点

(一)、包裹性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
       *{margin: 0;padding: 0;}
       div{
           border: 1px solid red;
       }
    </style>
</head>
<body>
    <div>aaaaaaaaaaaaa</div>  
</body>
</html>

写一个盒子,不给盒子设置宽度,盒子里面放上内容,这时盒子宽度默认为父元素的100%。

我们给它加上浮动。让盒子左浮动(float:left)。

这时盒子的内容就由它的内容来决定了。这就是浮动的包裹性。

即如果一个块级元素,没有设置宽度,那么它的宽度就是父元素的100%。若它浮动了,那么它的宽度就由内容来决定。

注意:包裹性的条件:块级元素;没有明确设置宽度。

(二)、块级性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
       *{margin: 0;padding: 0;}
       span{
           border: 1px solid red;
           float: left;
       }
    </style>
</head>
<body>
    <span>aaaaaaaaaaaaa</span>  
</body>
</html>

我们给一个行内元素设置浮动。

发现它变成了块级元素,这就是浮动的块级性。

即浮动的行内元素会变成块级元素。

注意:对于一个行内元素,给它设置宽度高度是无效的。如果我们给它加了浮动,他便变成了块级元素,就可以设置宽度和高度了。

(三)、破坏性

破坏了流式布局,可以让块级元素并排显示。

   流式布局:按照标签的特征进行的默认布局,即从上到下,从左到右。块级元素独占一行,行内元素并排显示。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
       *{margin: 0;padding: 0;}
       div{
           border: 1px solid red;
       }
       div p{
           float: left;
       }
    </style>
</head>
<body>
    <div>
  <p>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</p>
    </div>
</body>
</html>

 

在块级元素里,

给子元素设置了浮动,并没有给父元素设置浮动。此时,子元素的内容并没有撑起父元素,父元素坍塌了。

解决坍塌的解决方法(清除浮动的方法):

1、给父元素加 overflow: hidden;

overflow本意用来处理溢出。

属性说明
overflow:hidden溢出的内容会被隐藏掉,不可见。
overflow:scroll溢出的内容产生滚动条。
overflow:visible默认值,溢出的内容正常显示。

注意:溢出的内容不占空间。

2、在父元素结束前,加一个空的div,给这个div设置clear:both;(内墙法)。

clear分为clear:left(清除左浮动);clear:right(清除右浮动);clear:both(清除左右浮动)。

注意:clear只能作用于块级元素,对行内元素无效。

3、给父元素加一个高度。

4、给父元素也加浮动。

5、使用after伪元素来清除浮动。

after伪元素:页面中不存在的一个元素。

.father::after表示在father后加一个伪元素,创建出来的伪元素默认并不是块级的,所以要加display:block;让这个伪元素变成块级元素。然后再用clear:both;来清除浮动。

一般情况下,我们会把这个伪元素设置成初始化样式。用的时候,直接在盒子里加。这个样式为:

 .clearfix::after{
          clear: both;
          display: block;
          /* content引号里面的是伪元素里面的内容 */
          content: "";
          overflow: hidden;
          height: 0;
      }

三、浮动的元素相互贴靠

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>浮动元素相互贴靠</title>
    <style>
        .father{
            width: 500px;
            float: left;
            border: 1px solid red;
        }
        .son1,.son2,.son3{
            width: 100px;
            float: left;
        }
        .son1{height: 120px;background-color: blue;}
        .son2{height: 140px;background-color: yellow;}
        .son3{height: 100px;background-color: green;}
    </style>
</head>
<body>
    <div class="father">
        <div class="son1">son1</div>
        <div class="son2">son2</div>
        <div class="son3">son3</div>
    </div>
</body>
</html>

给一个父元素设置三个子元素,让三个元素都左浮动。此时三个子元素紧紧的贴靠在一起。

如果父元素宽度不够大,不够并排显示,那么son3会去找son1,如果son1有贴靠条件,他就会贴靠son1,如果son1没有贴靠条件,son3就会去贴靠父元素左边框。再减小父元素的宽度,如果son2空间也不足,son2和son3会都去贴靠父元素左边框(贴左边框原因:这三个子元素都是左浮动)。

四、浮动的应用场景

(一)、页面中的左右结构

实现:父元素:加cleaxfix类(初始化样式)

           左侧:加float:left

           右侧:加float:left

(二)、页面中的多列布局

实现:父元素:加.clearfix

          第一列:float:left

          第二列:float:left

          第三列:float:left

若每列之间有间隙,要加margin-right处理。

(三)、左边固定高度,右边自适应。

实现:父元素:当父元素宽度变化时,右侧宽度也跟着变化。

            左侧:必须加宽度,float:left

            右侧:加margin-left

(四)、页面中的左中右结构

实现:父元素:不需要清除浮动   

           左侧:float:left

           中间: text-align:center; margin:0 auto;    

           右侧:float:right

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值