003* (CSS) CSS三大重点之一:盒子模型 padding、border、margin、盒子居中、兄弟垂直合并、父子外边距塌陷

目录

1:盒子模型

2:内边距

3:边框:

4:外边距:

  4.1: 盒子居中

  4.2:盒子居中三大条件

  4.3:兄弟垂直外边距合并、父子垂直外边距塌陷

 

正文

一:核心

CSS就三个大模块:  盒子模型 、 浮动 、 定位,其余的都是细节。

要求这三部分,无论如何也要学的非常精通。

 

二:盒子模型

 

盒子模型(Box Model)

所谓盒子模型就是把HTML页面中的元素看作是一个矩形的盒子,也就是一个盛装内容的容器。每个矩形都由元素的内容、内边距(padding)、边框(border)和外边距(margin)组成。

网页布局的本质:  把网页元素比如文字图片等等,放入盒子里面,然后利用CSS摆放盒子的过程,就是网页布局。

 

三:内边距(padding)属性

总述

1:可以设置单一方向的内边距

2:可以单独些某一方向的内边距,也可以复合些四个方向的内边距

3:上下具有优先级

代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>盒子模型</title>
    <style>
        /* 1:内边距 
        属性:距离
        */
        .inside1, .inside2, .inside3 {
            width: 200px;
            height: 100px;
        }

        .inside1 {
            /* 1:  复合写法: 4种写法 */

            /*上下左右都是 20px*/
            padding: 20px;

            /*上下 10  左右 20*/
            padding: 10px 20px;

            /*上 10  左右 20  下 是 30*/
            padding: 10px 20px 30px;

            /* 上 10  右20  下 30 左 40*/
            padding: 10px 20px 30px 40px;

            background-color: blueviolet;
        }

        .inside2 {
            /* 1:  单一方向设置 4种写法 */

            /* 上内边距 */
            padding-top: 10px;

            /* 下内边距 */
            padding-bottom: 30px;

            /* 左内边距 */
            padding-left: 10px;

            /* 右内边距 */
            padding-right: 20px;
            background-color: blue;
        }

        /* 内边框的两个问题
        1:背景颜色可以蔓延到内边距吗?
            可以
        2:可以设置单一方向的内边距吗?
            可以  
        */
        .inside3 {
            padding: 10px;
            background-color: red;
        }
    </style>
</head>

<body>
    <!-- 1: 内边距 -->
    <div class="inside1"></div>
    <div class="inside2"></div>
    <div class="inside3"></div>


    <!-- 内边距的问题 -->
    <!-- 边框 -->
    <!-- 边框问题 -->
    <!-- 外边距 -->
    <!-- 外边距经典问题 -->

</body>

</html>

详解

 

 

四:盒子边框(border)宽度 样式 颜色

总述

border-width、border-style、border-color 

可以单独设置一个方向、可以设置4个方向

可以单独设置一个属性,可以复合设置3个属性

代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>border 边框</title>
    <style>
        .box1,
        .box2,
        .box3,
        .box4 {
            width: 200px;
            height: 100px;
            background-color: aqua;
        }

        /* 1: border属性 
        border-width
        border-style
        border-color
         */

        /* 1.1: border-width  单独设置 设置一条边和设置多条变*/
        .box1 {
            border-top-width: 10px;
            border-right-width: 10px;
            border-top-width: 10px;
            border-bottom-width: 10px;
            border-width: 10px;
            border-width: 10px 20px;
            border-width: 10px 20px 20px;
            border-width: 10px 20px 20px 20px;
        }

        /* 1.2 border-style */
        .box1 {
            /* 单实线 */
            border-style: solid;

            /* 双实线实线 */
            border-style: double;

            /* 短虚线 */
            border-style: dashed;

            /* 点虚线 */
            border-style: dotted;
            border-style: solid;
            border-style: solid double;
            border-style: solid double dashed;
            border-style: solid double dashed dotted;
        }

        /* 1.3 border-style */
        .box1 {
            border-color: red;
            border-color: #0f0;
            border-color: rgb(255, 100, 80);
            border-color: red;
            border-color: red blue;
            border-color: red blue blueviolet;
            border-color: red blue blueviolet paleturquoise;
        }

        /* 2 复合设置[设置四边] 宽度 样式 颜色*/
        .box2 {
            border: 1px solid red;
        }
    </style>
</head>

<body>
    <div class="box1"></div>
    <div class="box2"></div>
</body>

</html>

详解

1:border有三个属性,宽度、样式、颜色

border-width、border-style、border-color 

1.1:border-width 宽度

1.2:边框属性—设置边框样式(border-style)

边框样式用于定义页面中边框的风格,常用属性值如下:

none:没有边框即忽略所有边框的宽度(默认值)

solid:边框为单实线(最为常用的)

double:边框为双实线

dashed:边框为虚线  

dotted:边框为点线

1.3:border-color 颜色

2: 盒子边框写法总结表

五:外边距

总述

可以单独设置单一方向的外边距,也可以复合写4个方向的外边距

代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>border 边框</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box1,
        .box2 {
            width: 200px;
            height: 100px;
            background-color: aqua;
        }

        /* 1:外边距 */
        .box1 {
            /* 上右下左 外边距为10 */
            margin: 10px;

            /* 上下外边距为10 左右外边距为20*/
            margin: 10px 20px;

            /* 上外边距为10 左右外边距为20  下外边距为10*/
            margin: 10px 20px 30px;

            /* 上外边距为10 右外边距为20  下外边距为30 左外边距为30*/
            margin: 10px 20px 30px 40px;
        }

        .box2 {
            /* 上外边距为10*/
            margin-top: 10px;

            /* 下外边距为10*/
            margin-bottom: 10px;

            /* 左外边距为10*/
            margin-left: 10px;

            /* 右外边距为10*/
            margin-right: 10px;
        }

        /* 2:外边距常见的特性
        1:外边距支持4个方向
        2:背景色没有蔓延到外边距!!!!!!
        3:一般布局需要清空 内外边距
        * {
            margin: 0;
            padding: 0;
        }
        4: 外边距至此负值,隐藏视图等用处
        5:元素横向居中 margin: 0 auto;
        */


        /* 3:外边距2特性 */
        /* 兄弟盒子,垂直外边距和水平外边距情况:
            垂直方向:外边距取最大值
            水平方向:两个外边距累加
        */
        .box3, .box4, .box5, .box6 {
            width: 100px;
            height: 100px;
        }

        /* box3和box4垂直外边距20px */
        /* box5和 box6水平外边距30px */
        .box3 {
            background-color: red;
            margin-bottom: 20px;
        }

        .box4 {
            background-color: blue;
            margin-top: 10px;
        }

        .box5 {
            background-color: yellow;
            margin-right: 20px;
            float: left;
        }

        .box6 {
            background-color: purple;
            margin-left: 10px;
            float: left;
        }


        /* 父子关系 
        2:父子关系:给子盒子添加外边距,但作用到父盒子身上了,怎么解决。
        解决方法:
            1:给父盒子添加内边距   等价于   给子盒子添加外边距
            2:给父盒子添加内边距
            3:给父盒子添加 overflow: hidden
        */
        .box7 {
            width: 300px;
            height: 300px;
            background-color: aqua;
            /* 1:给父盒子添加内边距 */
            /* padding-bottom: 20px; */

            /* 2:给父盒子添加内边距 */
            /* padding-top: 1px; */

            /* 3:给父盒子添加 overflow: hidden */
            /* overflow: hidden; */

           /* 4:给父盒子或子盒子加浮动 */
           /* float: left; */
        }

        .box8 {
            width: 100px;
            height: 100px;
            background-color: darkcyan;
            margin-top: 20px;

             /* 4:给父盒子或子盒子加浮动 */
             float: left;
        }
    </style>
</head>

<body>
    <!-- 外边距 -->
    <div class="box1"></div>
    <div class="box2"></div>

    <!-- 外边距经典2特性
    1:兄弟关系:两个盒子垂直外边距与水平外边距问题
        垂直方向:外边距取最大值
        水平方向:两个外边距累加
    2:父子关系:给子盒子添加外边距,但作用到父盒子身上了,怎么解决。
    -->
    <div class="box3"></div>
    <div class="box4"></div>
    <div style="overflow: hidden;">
        <div class="box5"></div>
        <div class="box6"></div>
    </div>
    

    <!-- 父子关系 -->
    <div class="box7">
        <div class="box8"></div>
    </div>

</body>

</html>

详解

1:外边距(margin)

margin属性用于设置外边距。  设置外边距会在元素之间创建“空白”, 这段空白通常不能放置其他内容。

margin-top:上外边距

margin-right:右外边距

margin-bottom:下外边距

margin-left:上外边距

margin:上外边距 右外边距  下外边距  左外边

2:盒子宽高的计算

  /*外盒尺寸计算(元素空间尺寸)*/

  Element空间高度 = content height + padding + border + margin

  Element 空间宽度 = content width + padding + border + margin

  /*内盒尺寸计算(元素实际大小)*/

  Element Height = content height + padding + border (Height为内容高度)

  Element Width = content width + padding + border (Width为内容宽度)

3:盒子居中

 1:盒子居中条件

  1.1:是块元素。因为块元素有宽高

  1.2::要有宽度。没有宽度默认是网页的宽度

  1.3: 左右auto。自动充满

<style>

        /*可以让盒子内容(文字 行内元素 行内块元素)居中对齐*/
        /* margin: 0 auto; 通俗写法 0 auto  上下是 0  左右是auto  自动  水平居中对齐 */
        div {
            text-align: center; /*可以让盒子内容(文字 行内元素 行内块元素)居中对齐*/
            width: 300px;
            height: 100px;
            background-color: pink;
            /* margin: 0 auto; 通俗写法 0 auto  上下是 0  左右是auto  自动  水平居中对齐 */
            /* margin-left: auto;
            margin-right: auto; 自动充满*/
            /* margin: auto; 上下左右都是auto*/
            margin: 100px auto;

        }
</style>

4:兄弟元素:

垂直方向:外边距合并,水平方向外边距累加

当上下相邻的两个块元素相遇时,如果上面的元素有下外边距margin-bottom,

下面的元素有上外边距margin-top,则他们之间的垂直间距不是margin-bottom与margin-top之和,

而是两者中的较大者。这种现象被称为相邻块元素垂直外边距的合并(也称外边距塌陷)。

5:父子元素:给子盒子添加外边距,作用到父盒子上。

对于两个嵌套关系的块元素,如果父元素没有上内边距及边框,则父元素的上外边距会与子元素的上外边距发生合并,合并后的外边距为两者中的较大者,即使父元素的上外边距为0,也会发生合并。

解决方案:

/* 1:给父盒子添加内边距 */
/* padding-bottom: 20px; */

/* 2:给父盒子添加内边距 */
/* padding-top: 1px; */

/* 3:给父盒子添加 overflow: hidden */
/* overflow: hidden; */

/* 4:给父盒子或子盒子加浮动  溢出隐藏,不影响布局 */  
/* float: left; */

6:盒子模型布局稳定性

按照 优先使用  宽度 (width)  其次 使用内边距(padding)    再次  外边距(margin)。   

  width >  padding  >   margin   

原因:

1. margin 会有外边距合并 还有 ie6下面margin 加倍的bug(讨厌)所以最后使用。

2. padding  会影响盒子大小, 需要进行加减计算(麻烦) 其次使用。

3. width   没有问题(嗨皮)我们经常使用宽度剩余法 高度剩余法来做。

 

posted on 2018-09-28 20:06  风zk  阅读(450)  评论(0编辑  收藏  举报

导航