CSS浮动

2019-06-17  本文已影响0人  _羊羽_

浮动

布局的三种基本方式:
标准流 按照标签默认的特性摆放盒子即为标准流
浮动流 利用浮动摆放盒子即为浮动流
定位流 利用定位摆放盒子即为定位流
浮动最开始是做图文绕排的。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
       .box{
            width: 300px;
            border: 1px solid #000;
           font-size: 12px;
        }
       img{
           width: 100px;
           height: 80px;
           float: left;
       }
    </style>
</head>
<body>
<div class="box">
    <img src="xuxin.png">2019年乒乓球日本公开赛16日全部结束,
    中国乒乓球队再一次展现王者风范,包揽了全部五项冠军!
    男单冠军:许昕;女单冠军:孙颖莎;女双冠军:刘诗雯/陈梦;男双冠军:樊振东/许昕;混双冠军:许昕/朱雨玲!再次祝贺中国乒乓球队!
</div>
</body>
</html>
image.png

利用浮动实现布局,一个靠左一个靠右

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .box {
            width: 300px;
            height: 300px;
            border: 1px solid #000;
            font-size: 12px;
        }
        .left {
            float: left;
            width: 100px;
            height: 100px;
            background-color: red;

        }
        .right {
            width: 100px;
            height: 100px;
            float: right;
            background-color: green;
        }
    </style>
</head>
<body>
<div class="box">
   <div class="left"></div>
    <div class="right"></div>
</div>
</body>
</html>
image.png

让元素直接排成一排

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .box {
            width: 300px;
            height: 300px;
            border: 1px solid #000;
            font-size: 12px;
        }
        .left {
            float: left;
            width: 100px;
            height: 100px;
            background-color: red;

        }
    </style>
</head>
<body>
<div class="box">
   <div class="left">1</div>
    <div class="left">2</div>
    <div class="left">3</div>
</div>
</body>
</html>
image.png

脱标

浮动的元素会“脱标”,不在占有标准流的位置
脱标的元素拥有行内块的表现
脱标表示脱离了标准流
标准流:块元素单独占一行,行内元素可以排一排的这种默认的盒子排列方式就是标准流 (按照默认的规则排列的)

  1. 脱标的元素不占标准流的位置
    浮动因为脱标的特性(脱离标准流了,不占位置,会盖住其他的标准流的盒子), 所以,在使用上有一个口诀:要浮全浮(要浮动的话兄弟元素都浮动)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .box {
            width: 300px;
            height: 300px;
            border: 1px solid #0094ff;
        }
        .box1 {
            width: 100px;
            height: 100px;
            background-color: red;
            float: left;
        }
        .box2 {
            width: 110px;
            height: 110px;
            background-color: green;
        }

    </style>
</head>
<body>
<div class="box">
    <div class="box1">1</div>
    <div class="box2">2</div>
</div>
</body>
</html>

image.png

不会继承父级块级的的宽度,内容有多个就撑多大 。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .box {
            width: 300px;
            height: 300px;
            border: 1px solid #0094ff;
        }
        .box1 {
            height: 100px;
            background-color: red;
            float: left;
        }
    </style>
</head>
<body>
<div class="box">
    <div class="box1">浮动块</div>
</div>
</body>
</html>
image.png
  1. 不论前身块级还是行内,可以直接写宽高
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .box {
            width: 300px;
            height: 300px;
            border: 1px solid #0094ff;
        }
        .box1 {
            height: 100px;
            width: 100px;
            background-color: red;
            float: left;
        }
    </style>
</head>
<body>
<div class="box">
    <span class="box1">span浮动</span>
</div>
</body>
</html>
image.png
  1. margin:auto
    对于脱标元素不起作用 无法居中
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .box {
            width: 300px;
            height: 300px;
            border: 1px solid #0094ff;
        }
        .box1 {
            height: 100px;
            width: 100px;
            background-color: red;
            float: left;
            margin: 0 auto;
        }
    </style>
</head>
<body>
<div class="box">
    <span class="box1">span浮动</span>
</div>
</body>
</html>

  1. 浮动是在盒子内容区域浮动,不会超出padding区域(水平方向)
  2. 浮动的盒子一排装不下的时候会掉下来(掉下来的位置会根据上一个浮动盒子的高度决定)
  3. 右浮动会颠倒盒子顺序
  4. 浮动的盒子压不住文字和图片
  5. 尽量在标准流的盒子里面浮动

闭合浮动

浮动带来的问题:浮动元素撑不开父级容器
解决办法(闭合浮动):

  1. 强行给父盒子添加高度 (不推荐,不利于后期维护)
  2. 创建一个新的块级盒子放在浮动元素的最后面,给这个盒子添加一个css属性:clear:both;(不推荐,会产生一个多余的盒子)
  3. 用伪元素闭合浮动 (推荐,书写一个公共类就可以使用)
  4. 给父元素添加overflow:hidden; (在某些特定场景下使用不了)

伪元素

就是在当前元素内容的前面或者后面追加一个盒子 这个盒子由css渲染
伪元素特性:

1、伪元素由css渲染 所以不会增加你的DOM(html结构)开销
2、伪元素默认是行内元素 可以进行转块等处理
3、伪元素不管有没有内容 content这个值一定不能少 即使没有 也要写个空
4、伪元素 官方推荐写:: 但是为了兼容考虑 写成单冒号
5、因为伪元素是css渲染 所以JS获取不到
伪元素清除浮动完整代码:

.clearfix::after {
    content:'';
    display:block;
    clear:both;
    height:0;
    visibility:hidden;
}
.clearfix {
    *zoom:1;
}
或者
.clearfix:before,
.clearfix:after { 
    content:"";
    display:table;
}
.clearfix:after {
    clear:both;
}
/* 为了兼容IE6,7 */
.clearfix {
    *zoom:1;
}
上一篇下一篇

猜你喜欢

热点阅读