# 盒子模型

页面布局要学习三大核心,盒子模型,浮动和定位.学习好盒子模型能非常好的帮助我们布局页面.

盒子模型组成部分:

  1. 外边距
  2. 内边距
  3. 边框
  4. 内容
    盒子模型

# 边框

border

border可以设置元素的边框。边框有三部分组成:边框宽度(粗细)边框样式边框颜色

属性 作用
border-width 定义边框粗细,单位是px
border-style 边框的样式
border-color 边框颜色

# border-style

属性 说明
none 无边框。与任何指定的border-width值无关
hidden 隐藏边框。IE不支持
dotted 在MAC平台上IE4+与WINDOWS和UNIX平台上IE5.5+为点线。否为实线
dashed 在MAC平台上IE4+与WINDOWS和UNIX平台上IE5.5+为线。否则为实钱
solid 实线边框
double 双线边框。两条单线与其间隔的和等于指定的border-width值
groove 根据border-color的值画3D凹槽
ridge 根据border--color的值画菱形边框
inset 根据border--colo的值画3D凹边
outset 根据border-colore的值画3D凸边

# border-collapse

border-collapse属性控制浏览器绘制耒格边框的方式。它控制相邻单元格的边框。

  • collapse单词是合并的意思
  • border-collapse:collapse
    表示相邻边框合并在起
    <table cellspacing="0">
        <tr>
            <th>姓名</th>
            <th>年龄</th>
        </tr>

        <tr>
            <td>张三</td>
            <td>18</td>
        </tr>

        <tr>
            <td>李四</td>
            <td>19</td>
        </tr>
    </table>
        
    </body>

    <style> 
       table {
            width: 500px;
            height: 240px;
              border-collapse: collapse;
       }
        table,td,th {
            border: 1px solid black;
        }
        td { 
            text-align: center; 
          
        }
    </style>

# 内边距

padding
属性用于设置内边距,即边框与内容之间的距离。

<body>

    <div>
        内容
    </div>
</body>

<style> 
    div {
        padding: 0px 20px;
        border:  1px solid black;
        width: 200px;
        height: 200px;
    }
</style>

# 外边距

margin属性用于设置外边距,即控制盒子和盒子之间的距离。

    <body>

        <div>
            内容
        </div>
        <div>
            内容
        </div>
    </body>

    <style> 
        div {
            padding: 0px 20px;
            border:  1px solid black;
            width: 200px;
            height: 200px;
            margin-bottom: 20px;
        }
    </style>

# 外边距合并-嵌套块元素塌陷

对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。
解决方案:

  1. 可以为父元素定义上边框。
  2. 可以为父元素定义上内边距。
  3. 可以为父元素添加overflow.hidden。
<body>

    <div class="parent">
        <div class="son"></div>
    </div>

</body>

<style> 
    .parent {
        background-color: rgb(241, 239, 199);
        width: 500px;
        height: 500px;
        /* border-top: 1px solid transparent; */
        /* padding: 1px; */
        overflow: hidden;
    }
    .son {
        margin-top: 50px;
        width: 200px;
        height: 200px;
        background-color: rgb(169, 226, 248);
    }
</style>

# 圆角边框

在CSS3中,新增了圆角边框样式,这样我们的盒子就河以变圆角了。
border-radius

<body>
    <div class="radius"></div>
</body>

<style> 
  .radius {
    width: 100px;
    height: 100px;
    border-radius: 5px;
    background-color: skyblue;
  }
</style>

# 盒子阴影

CSS3中新增了盒子阴影,我们可以使用box-shadow属性为盒子添加阴影。

描述
h-shadow 必需。水平阴影的位置。允许负值。
v-shadow 必需。垂直阴影的位置。允许负值。
blur 可选。模糊距离。
spread 可选。阴影的尺寸。
color 可选。阴影的颜色。请参阅CSS颜色值。
inset 可选。将外部阴影(outset)改为内部阴影。
    <body>
        <div class="radius"></div>
    </body>

    <style> 
      .radius {
        width: 100px;
        height: 100px;
        border-radius: 5px;
        background-color: skyblue;
        box-shadow: 10px 10px 0 0 rgba(0, 0, 0, 0.1);
      }
    </style>

# 文字阴影

在CSS3中,我们可以使用text-shadow属性将阴影应用于文本。

描述
h-shadow 必需。水平阴影的位置。允许负值。
v-shadow 必需。垂直阴影的位置。允许负值。
blur 可选。模糊的距离。
color 可选。阴影的颜色。参阅CSS颜色值。

# 浮动

网页布局的本质一用CSS来摆放盒子。把盒子摆放到相应位置
CSS提供了三种传统布局方式(简单说就是盒子如何进行排列顺序)
flot 属性用于创建浮动框,将其移动到一边,直到佐边缘或右边缘触及包含块或另一个浮动框的边缘。

属性值 描述
none 元素不浮动(默认值)
left 元素向左浮动
right 元素向右浮动
<body>

    <div class="flot-left"></div>
    <div class="flot-right"></div>

</body>

<style> 
    .flot-left {
        width: 100px;
        height: 100px;
        background-color: skyblue;
         float: left;
    }
    .flot-right {
        width: 100px;
        height: 100px;
        background-color: paleturquoise;
       float: right;
    }
</style>

# 特性

  1. 浮动元素会脱离标准流(脱标)
  2. 浮动的元素会一行内显示并且元素顶赔部对齐
  3. 浮动的元素会具有行内块元素的特性

# 清除浮动

语法:

选择器:{
    clear: both;    
}
属性值 描述
left 不允许左侧有浮动元素(清除左侧浮动的影响)
right 不允许右侧有浮动元素(清除右侧浮动的影响)
both 同时清除左右两侧浮动的影响

清除浮动方法

  1. 额外标签法也称为隔墙法,是W3C推荐的做法。
  2. 父级添加overflow属性
  3. 父级添加after伪元素
  4. 父级添加双伪元素

# 额外标签法

必须是块元素

<body>

    <div class="parent">
        <div class="flot-left"></div>
        <div class="flot-right"></div>
        <div class="clear-fix"></div>
        <div class="footer"></div>
        
    </div>

</body>

<style> 
    .footer {
        height: 200px;
        background-color: black;
    }
    .flot-left {
        width: 100px;
        height: 100px;
        background-color: skyblue;
         float: left;
    }
    .flot-right {
        width: 100px;
        height: 100px;
        background-color: paleturquoise;
       float: left;
    }

    .clear-fix {
        /*如果不加上这个clear,会高度坍塌*/
        clear: both;
    }


</style>

# 父级添加 overflow

可以给父级添加overflow属性,将其属性值设置为hidden、.auto或scroll。
注意是给父元素添加代码

<body>
    <div class="parent">
        <div class="flot-left"></div>
        <div class="flot-right"></div>
    </div>
    <div class="footer"></div>
</body>

<style>
    .parent {
        overflow: hidden;
        width: 800px;
    }
    .flot-left {
        width: 100px;
        height: 100px;
        background-color: skyblue;
         float: left;
    }
    .flot-right {
        width: 100px;
        height: 100px;
        background-color: paleturquoise;
       float: left;
    }
    .footer {
        width: 800px;
        height: 200px;
        background-color: black;
    }
</style>

# :after伪元素法

:after方式是额外标签法的升级版。也是给父元素添动加

    <body>

        <div class="parent clear-fix">
            <div class="flot-left"></div>
            <div class="flot-right"></div>
        </div>
        <div class="footer"></div>

    </body>

    <style>
        .clear-fix::after {
            content: '';
            display: block;
            height: 0;
            clear: both;
            overflow: hidden;
        }
        .clear-fix {
            /* IE6 IE7 专有 兼容 */
            *zoom: 1;
        }
        .parent {
            overflow: hidden;
            width: 800px;
        }
        .flot-left {
            width: 100px;
            height: 100px;
            background-color: skyblue;
             float: left;
        }
        .flot-right {
            width: 100px;
            height: 100px;
            background-color: paleturquoise;
           float: left;
        }
        .footer {
            width: 800px;
            height: 200px;
            background-color: black;
        }
    </style>

# 双伪元素

也是给给父元素添加

 <body>

        <div class="parent clear-fix">
            <div class="flot-left"></div>
            <div class="flot-right"></div>
        </div>
        <div class="footer"></div>

    </body>

    <style>
        
        .clear-fix::before,.clear-fix::after {
            content: '';
            display: table;
        }

        .clear-fix::after {
            clear: both;
        }

        .clear-fix {
            *zoom: 1;
        }

        .parent {
            overflow: hidden;
            width: 800px;
        }
        .flot-left {
            width: 100px;
            height: 100px;
            background-color: skyblue;
             float: left;
        }
        .flot-right {
            width: 100px;
            height: 100px;
            background-color: paleturquoise;
           float: left;
        }
        .footer {
            width: 800px;
            height: 200px;
            background-color: black;
        }
    </style>