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>
相关推荐
北岛贰13 分钟前
啵啵音乐迎来全新升级!
前端
hkNaruto2 小时前
【AI】基于大模型的AI游戏地图生成、控制方案:AI Native Game Harness 迁移操作手册
前端·人工智能·游戏
IT_陈寒2 小时前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
Acro3 小时前
快给macOS 上的Grok Bot换一套皮肤
前端
flash俊杰3 小时前
双引擎 OCR 编排:逐页判定、视觉优先、partial 语义与三层超时
前端
计算机魔术师3 小时前
Reddit 每周被 Google 偷走 100 万次点击,CEO 摊牌了
前端
前端繁华如梦3 小时前
用 React Three Fiber 做一栋能编辑的教学楼数字孪生
前端
前端繁华如梦3 小时前
用 React Three Fiber 做一套智慧医院数字孪生:编辑器、大屏和 BIM 浏览器
前端
俊昭喜喜里4 小时前
理解全局跨域CORS配置
前端
锋行天下7 小时前
DeepSeek写Langgraph就是个大傻逼,一本正经胡说八道
前端·人工智能·后端