css盒子模型第二章(margin padding border content)

盒子模型(第二章)

一、盒子的组成部分

CSS 会把所有的 元素将作为块级元素显示。 元素将作为内联元素显示。 元素将作为行内块元素显示。 HTML 元素都看成一个盒子,所有的样式也都是基于这个盒子。

  1. margin(外边距): 盒子与外界的距离
  2. border(边框): 盒子的边框。
  3. padding(内边距): 紧贴内容的补白区域。
  4. content(内容):元素中的文本或后代元素都是它的内容。

图示

结论

盒子的大小 = content + 左右 padding + 左右 注意:外边距 border 。

外边距 margin 不会影响盒子的大小,但会影响盒子的位置

示例

markdown 复制代码
<style>
     div {
      /* 内容区宽 */
       width: 400px;
       /* 内容的高 */
       height: 400px;
       /* 内边距 */
       padding: 20px;
       /* 边框 */
       border: 10px solid transparent;
       /* 外边距 */
       margin: 50px;
       font-size: 20px;
       background-color: gray;

     }
  </style>
</head>
<body>
    <div>你好啊,盒子模型</div>
</body>

二、盒子内容区域 content

CSS 属性名 功能 属性值
width 设置内容区域宽度 长度
max-width 设置内容区域的最大宽度 长度
min-width 设置内容区域的最小宽度 长度
height 设置内容区域的高度 长度
max-height 设置内容区域的最大高度 长度
min-height 设置内容区域的最小高度 长度
  • 注意

    max-width、min-width 一般不与 width 一起使用。 max-height、min-height 一般不与 height一起使用。

三、盒子内边距(padding)

CSS 属性名 功能 属性值
padding-top 上内边距 长度
padding-right 右内边距 长度
padding-bottom 下内边距 长度
padding-left 左内边距 长度
padding 复合属性 长度,可以设置 1 ~ 4 个值

使用规则

  1. padding: 10px; 四个方向内边距都是 10px。
  2. padding: 10px 20px; 上10px,左右20px 。(上下、左右)
  3. padding: 10px 20px 30px; 上10px,左右20px,下30px。(上、左右、下)
  4. padding: 10px 20px 30px 40px; 上10px,右20px,下30px,左40px。(上、右、 下、左)

使用注意事项

  1. padding 的值不能为负数
  2. 行内元素的 左右内边距是没问题的,上下内边距不能完美的设置
  3. 块级元素、行内块元素,四个方向内边距都可以完美设置

示例

markdown 复制代码
   <style>
      div {
         width: 400px;
         height: 400px;
          /* 复合属性, 代表的是四个方向 */
         /* padding: 40px; 
         padding-left: 20px;*/
         /* 上内边距 
         padding-top: 30px;*/
         /* 右侧内边距 
         padding-right: 40px;*/
         /* 底边 内边距 
         padding-bottom: 50px;*/

         /* 复合属性 ,写两个值  上下  左右 */
         /* padding: 10px 20px; */

         /* 复合属性,三个值   上  左右 下 */
         /* padding: 10px 20px 30px; */

         /* 复合属性,四个值   上 右 下 左 */
         padding: 10px 20px 30px 40px;

         font-size: 30px;
        
         background-color: skyblue;
      }

      span {
         background-color: yellow;
         font-size: 30px;
         /*  */
         padding-left: 20px;
         /* 行内右边起作用 */
         padding-right: 50px;
         /* 上边距没有用  对于行内元素 */
         padding-top: 40px;
         /* 下边距没有用  对于行内元素 */
         padding-bottom: 50px;

      }

   </style>
</head>
<body>
  <div>内边距padding</div>
  <hr>
  <span>内边距span</span>
  <div>Lorem ipsum dolor sit amet consectetur adipisicing elit. Impedit, minima atque facere corporis et laboriosam expedita nihil accusantium autem modi similique iste recusandae cupiditate velit placeat? Autem, maiores laudantium? Dignissimos numquam cumque quod a ex odit hic magni repellendus sit nisi quo illum iure natus, earum tempore atque. Laudantium, ex!</div>
</body>

四、盒子边框 (border)

CSS 属性名 功能 属性值
border-style 边框线风格 复合了四个方向的边框风格 none: 默认值 solid: 实线 dashed: 虚线 dotted: 点线 double: 双实线
border-width 边框线宽度 复合了四个方向的边框宽度 长度,默认3px
border-color 边框线颜色 复合了四个方向的边框颜色 颜色,默认黑色
border 复合属性 值没有顺序和数量要求。
border-left border-left-style border-left-width border-left-color border-right border-right-style border-right-width border-right-color border-top border-top-style border-top-width border-top-color border-bottom border-bottom-style border-bottom-width border-bottom-color 分别设置各个方向的边框

复合属性

边框相关属性共 20个

border-style 、border-width、border-color其实也是复合属性

示例

markdown 复制代码
<style>
     div {
       width: 400px;
       height: 400px;
       background-color: aqua;
       /* border: 1px solid pink; */

       /* border-width: 10px; */
       border-left-width: 10px;
       border-top-width: 20px;
       border-right-width: 30px;
       border-bottom-width: 40px;

       /* border-color: pink; */
       border-left-color: red;
       border-top-color: orange;
       border-right-color: green;
       border-bottom-color: purple;

       /* border-style: dashed; */
       border-left-style: solid;
       border-top-style: dashed;
       border-right-style: double;
       border-bottom-style: dotted;

       /* 复合属性  不挑顺序 */
       border-left: 30px pink solid;
       border-top: 20px skyblue dashed;
       border-right: 10px aqua double;
       border-bottom: 40px gray dotted;

      
      
       
     }
  </style>
</head>
<body>
   <div>你好啊!</div>
</body>

五、盒子外边距(margin)

CSS 属性名 功能 属性
margin-left 左外边距 CSS中的长度 值
margin-right 右外边距 CSS中的长度 值
margin-top 上外边距 CSS中的长度 值
margin-bottom 下外边距 CSS中的长度 值
margin 复合属性,可以写1~4个值,规律同padding(顺时 针) CSS中的长度 值

注意事项

  1. 子元素的margin,是参考父元素的content计算的。(因为是父亲的content中承装着 子元素)
  2. 上margin、左margin:影响自己的位置;下margin、右margin:影响后面兄弟元素 的位置。
  3. 块级元素、行内块元素,均可以完美地设置四个方向的margin;但行内元素,左右 margin可以完美设置,上下margin设置无效。
  4. margin的值也可以是 auto,如果给一个块级元素设置左右margin都为 auto,该块级 元素会在父元素中水平居中。
  5. margin的值可以是负值。

示例

mar 复制代码
  <style>
      .outer {
         width: 400px;
         height: 400px;
         padding: 50px;
         background-color: bisque;
      }
      .inner {
         width: 100px;
         height: 100px;
         margin: 50px;
         background: orange;
      }
  </style>
</head>
<body>
  <!-- 子元素的margin是参考父元素content元素计算的 -->
   <div class="outer">
      <div class="inner"></div>
   </div>
   
------------------------------
  <style>
      .box {
         width: 200px;
         height: 200px;
      }

      .box1 {
          background-color: red;
      }
      .box2 {
         margin-top: 50px;
         margin-bottom: 50px;
          background-color: yellow;
      }
      .box3 {
          background-color: green;
      }

  </style>
</head>
<body>
   <!--上margin 左margin会影响自身位置,下 marin右margin 会影响兄弟元素原子 -->
  <div class="box box1">1</div>
  <div class="box box2">2</div>
  <div class="box box3">3</div>
  <hr>
  <img src="../../个人总结md/1盒子模型图片/image-20250315204614337.png" alt="111" >
  <img src="../../个人总结md/1盒子模型图片/image-20250315204614337.png" alt="" srcset="">
  <img src="../../个人总结md/1盒子模型图片/image-20250315204614337.png" alt="" srcset="">
</body>

--------------------------
<style>
         #d1 {
             width: 400px;
             height: 400px;
             margin: 50px;
             background-color: deeppink;
         }
         img {
            margin: 50px;
         }
         .one {
             background-color: deepskyblue;
         }
         .two {
             background-color: darkred;
             margin-left: 50px;
             margin-right: 50px;
             /* 行内元素 上下margin设置无效  */
             margin-top: 4000px;
         }
         .three {
             background-color: skyblue;
         }
    </style>
</head>
<body>
    <!-- 对于行内元素来说,左右的margin是可以设置的,上下的margin设置后是无效的 -->
    <div id="d1">我是一个块级元素</div>
    <img src="./image/image-20250315204614337.png" alt="">
    <div>我是一段文字</div>
    <hr>
    <span class="one">人之初</span>
    <span class="two">性本善</span>
    <span class="three">性相近</span>
    
    -----
    <style>
        div {
            width: 800px;
            height: 100px;
            /* margin-left: auto;
            margin-right: auto; */
            /* 块元素 水平居中了 */
            margin: 10px auto;

            background-color: deepskyblue;

        }

        span {
            background-color: blueviolet;
            margin: 10px auto;

        }
    </style>
</head>
<body>
    <!-- margin的值可以是auto,给一个块级元素左右margin设置auto可以实现该元素在其父元素内水平居中 -->
   <div>margin注意四</div>
   <span>好好学习,我是内联元素</span>   

五、margin 塌陷问题

什么是 margin 塌陷

第一个子元素的上margin会作用在父元素上,最后一个子元素的下margin会作用在父元素上。

如何解决margin 塌陷

  1. 给父元素设置不为 0 的padding。
  2. 给父元素设置宽度不为 0 的border。
  3. 给父元素设置 css 样式 overflow:hidden

示例

markdown 复制代码
<style>
       .outer {
         width: 400px;
         height: 400px;
         background-color: gray;
         /* overflow: hidden; */
       } 

       .inner1 {
          width: 100px;
          height: 100px;
          background-color: aqua;
          margin-top: 50px;
          
       }

       .inner2 {
          width: 100px;
          height: 100px;
          background-color: red;
          margin-bottom: 50px;
       }
    </style>
</head>
<body>
    <div class="outer">
        <div class="inner1">inner1</div>
        <div class="inner2">inner2</div>
    </div>

    <div>我是一段测试代码</div>
</body>

六、margin 合并问题

上面兄弟元素的下外边距和下面兄弟元素的上外边距会合并,取一个最大的值,而不是相加。 margin-bottom 何 margin-top

如何解决

  • 写上边的时候直接把值加上下边,相当于只写一个值,用上边距+下边距;

  • 布局的时候上下的兄弟元素,只给一个设置上下外边距就可以了。

示例

markdown 复制代码
<style>
     .box {
       width: 200px;
       height: 200px;
     }
     .box1 {
       background-color: pink;
       margin-bottom: 50px;
     }
     .box2 {
       background-color: deeppink;
       margin-top: 60px;
     }
     .test {
       width: 200px;
       height: 200px;
       display: inline-block;
     }
     .testa {
        background-color: aqua;
        margin-right: 50px;
     }
     .testb {
        background-color: deepskyblue;
        margin-left: 50px;
     }
  </style>
</head>
<body>
  <div class="box box1">1</div>
  <div class="box box2">2</div> 
  <hr>
    <div class="test testa">a</div>
    <div class="test testb">b</div>
</body>
相关推荐
前端南玖4 分钟前
深入理解Base64编码原理
前端·javascript
aircrushin6 分钟前
【PromptCoder + Trae 最新版】三分钟复刻 Spotify 页面
前端·人工智能·后端
木木黄木木10 分钟前
从零开始实现一个HTML5飞机大战游戏
前端·游戏·html5
NoneCoder12 分钟前
工程化与框架系列(30)--前端日志系统实现
前端·状态模式
计算机毕设定制辅导-无忧学长22 分钟前
HTML 基础夯实:标签、属性与基本结构的学习进度(一)
前端·学习·html
斯~内克1 小时前
深度解析ECharts.js:构建现代化数据可视化的利器
前端·信息可视化·echarts
前端加油站1 小时前
Errorboundary详解
前端·react.js
java1234_小锋1 小时前
一周学会Flask3 Python Web开发-SQLAlchemy添加数据操作-班级模块
开发语言·前端·python·flask·flask3
diang1 小时前
vue3实现监听从其他页签回到当前页签重新刷新setInterval
前端·javascript
codeCat!1 小时前
关于运行 npm run serve/dev 运行不起来,node_modules Git忽略不了等(问题)
前端·git·npm