CSS布局

两栏布局

  这里我们要用到position,例如做一个左侧固定,右侧自适应

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            padding:0;
            margin:0;
        }
        .left{
            position:absolute;
            left:0;
            width:200px;
            height:200px;
            background: green;
        }
        .right{
            margin-left:200px;
            height:200px;
            background:yellow;
        }
    </style>
</head>
<body>
        <div class="left"></div>
        <div class="right"></div>
</body>
</html>

        效果如图           


 

   三栏布局

     同样用position定位,例如做一个左右两侧固定,中间自适应

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            padding:0;
            margin:0;
        }
        .left{
            position:absolute;
            left:0;
            width:200px;
            height:200px;
            background: green;
        }
        .center{
            margin-left:200px;
            margin-right:200px;
            height:200px;
            background: yellow;
        }
        .right{
            position:absolute;
            top:0;
            right:0;
            width:200px;
            height:200px;
            background: red;
        }
    </style>
</head>
<body>
        <div class="left"></div>
        <div class="center"></div>
        <div class="right"></div>
</body>
</html>

                                        效果如图

                

    

    这里有一点需要注意,由于左侧使用了position定位,中间没有设置宽度,则width=auto,所以是自适应状态,这样定位时我们需要在right中使用定位,然后让top为零。


 

CSS浮动

      前面在浮动模型的时候已经讲了一些关于浮动的东西,包括position里面的relative以及absolute,有时候为了页面布局我们必须使用float,但是这样会对后续代码产生很多影响。

        特点一:float可以脱离原来的位置,进行定位。如果是left,就从左到右排列,如果是right就从右向左排列。

        特点二:当子元素的宽的和大于父元素时,子元素会溢出

 

 浮动元素脱离文档流但是不脱离文字流,也就是说文字可以看到浮动元素,举个栗子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            padding:0;
            margin:0;
        }
        .box{
            width:500px;
            height:500px;
        }
        .box1{
            float:left;
            width:150px;
            height:150px;
            background: greenyellow;
        }
        .box2{
            width:300px;
            height:300px;
            background: red;
        }
    </style>
</head>
<body>
        <div class="box">
            <div class="box1">哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈</div>
            <div class="box2">啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
        </div>
</body>
</html>

 

                      效果如图 

感觉很神奇,box1明明float了,box2里面的文字这么厉害吗,难道是戴眼镜了,这都能看到。不难得知,文字可以看到浮动元素。

 

  其实浮动元素还有很多特点:

      1.块级元素看不到浮动元素

      2.文字可以看见浮动元素(包括img标签,行级元素,行级块元素,触发bfc的元素),利用这一特点,我们可以实现文字环绕图片的效果。


清除浮动

    利用伪元素,因为伪元素是每个元素天生自带的,它是依赖元素存在的,它可以操作,可以定位,天生就是行级元素,但是它没有元素的结构, 两个自带的伪元素分别是before 和after ,他们将会出现在元素的逻辑前和逻辑后。

    所以我们可以利用伪元素进行清除浮动,也就是“三加一”

        .father{
            *zoom:1;
        }
        father::after{
            content:'';
            display:block;
            clear:both;
        }

 

 

 

      注意:只有块级元素才能清除浮动!!!

     IE6和IE7 不支持float和bfc,但是他们可以触发layout,layout跟bfc差不多,我们可以利用这个触发它。这时候我们要利用zoom:1;就可以触发layout。为了告诉浏览器他们有这个特性,所以在前面加上*。 

 

posted @ 2017-11-29 15:36  暮雨橙风  阅读(101)  评论(0编辑  收藏  举报