CSS 盒子模型

一个 HTML 元素,需要占用页面的布局空间,这个空间由以下几个部分组成:

  • content 内容区域 元素本身的大小
  • padding 内间距 元素内容与边框之间的距离
  • border 元素的边框
  • margin 外间距 元素与元素之间的距离
    涉及到四个方向 left 左 right 右 top 上 bottom 下

外间距 (margin)

外间距的写法:

  • margin-bottom: 50px; 设置单侧外间距(top上 / right右 / bottom下/ left左)
  • margin:10px; 四个方向都是 10px
  • margin:10px 20px; 上下 10px 左右 20px
  • margin:10px 20px 30px; 上 10px 左右 20px 下 30px
  • margin:10px 20px 30px 40px; 上 10px 右 20px 下 30px 左 40px
  • margin: 0 auto; 上下 0 左右居中
    块级元素左右外间距计算成等值,能实现水平居中效果
    规律:按照 上右下左 顺时针 依次赋值 没有的找对门

    外间距指的元素外部与其它元素之间的距离
  1. 块级与行内块元素四个方向的外间距均生效
  2. 行内元素的左右外间距可以用,上下外间距不生效
  3. 父子贴边问题:给父元素加 BFC 结界 overflow:hidden;
    第 1 个子元素的上外间距与最后 1 个子元素的下外间距都会包裹在父元素范围之内
  4. 相邻兄弟间在垂直方向上如果有重叠的外间距,取最大值显示
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>外间距测试</title>
    <style>
        body {
            /*可以去掉body默认四个方向的8px外间距*/
            margin: 0;
        }
        /* div默认宽度为其父级宽度的100% 默认高度为0 */
        .fu {
            background-color: rgba(255,255,0,.3); /*不透明度.3 0透明 1不透明*/
            /*给父元素设置BFC结界 把首尾元素超出的外间距包裹在内*/
            overflow: hidden;
        }
        .fu>div {
            width: 100px;
            height: 100px;
            background-color: rgba(0,0,255,.6);
            border: 2px solid #00f;
            color: #fff;
        }
        /* 相邻兄弟垂直方向的外间距取大值显示,不会叠加 */
        .z1 {
            margin-bottom: 30px;
            margin-top: 50px;/*第1个子元素的上外间距会超出父元素的范围*/
        }
        .z2 {
            margin-top: 50px;
        }
        .z4 {
            margin-bottom: 50px;/*最后1个子元素的下外间距会超出父元素的范围*/
        }
        .z3 {
            /* 上 右 下 左 顺时针依次赋值 没有值就找对门的值 */
            margin: 10px 20px 30px 40px;
            margin: 10px;
            margin: 10px 20px;
            margin: 10px 20px 30px;
            /*上下0 左右auto让浏览器自动计算为相等的值 实现块级元素的水平居中 */
            margin: 0 auto;
        }
        span {
            border: 2px solid #f00;
        }
        .s2 {
            /* 行内元素垂直方向的外间距不生效,不要使用! */
            margin: 30px 20px;
        }
    </style>
</head>
<body>
<span>span1</span><span class="s2">span2</span><span>span3</span>

<!-- .fu>.z*4 -->
<div class="fu">
    <div class="z1">子元素div1</div>
    <div class="z2">子元素div2</div>
    <div class="z3">子元素div3</div>
    <div class="z4">子元素div4</div>
</div>
</body>
</html>

边框 (border)

设置边框:border:1px solid #000; 粗细 线型 颜色

设置某一个方向的边框:border-top: 1px solid #000; 设置上边框的粗细 线型 颜色

去掉边框: border:none; 或者 border:0;

线型:solid 单实线 dashed 虚线 dotted 点状线 double 双实线...

边框圆角: border-radius: 100px;

  • 数值越大,角越圆
  • 边框圆角为正方形高度的一半,可以切圆形

内间距 (padding)

内间距的写法:

  • padding-top: 50px; 设置单侧内间距(top 上/right 右/bottom 下/left 左)
  • padding:10px; 四个方向都是 10px
  • padding:10px 20px; 上下 10px 左右 20px
  • padding:10px 20px 30px; 上 10px 左右 20px 下 30px
  • padding:10px 20px 30px 40px; 上 10px 右 20px 下 30px 左 40px
    规律:按照 上右下左 顺时针 依次赋值 没有的找对门

    内间距指的是元素内容与边框之间的距离
  1. 块级与行内块元素的四个方向的内间距均生效
  2. 行内元素的左右内间距正常生效,但上下内间距不生效
    内间距使用场景
    让元素内部距离外层父级元素的边有点距离,主要为了美化,如:
  • 输入框的文字不要贴边显示
  • 文本卡片内容不要贴边显示
    切换盒子模型计算方案:
  • box-sizing: border-box;边框盒子
  • 效果:加内间距与边框都不会让元素变大,都算在元素设置的 width 与 height 中
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>边框与内间距</title>
    <style>
        .d1 {
            width: 200px;
            height: 200px;
            background-color: #0aa1ed;
            /* 设置四个方向的 粗细 线型 颜色*/
            border: 5px solid #f00;
            /* 设置单方向的边框 */
            border-top: 8px solid #ff0;
            /* 边框圆角 值越大 角越圆 值为正方形宽高的一半是圆形 */
            border-radius: 100px;
        }
        .d2 {
            width: 200px;
            height: 200px;
            border: 5px solid #f0f;
            padding-left: 50px;
            padding-top: 50px;
            /*默认的计算方案:加内间距与边框都会让元素变大*/
            /*切换成"边框盒子"计算方案后,内间距与边框都会算在预设的大小里,是固定大小*/
            box-sizing: border-box;
            margin: 50px; /*外间距不算在元素本身的大小里,但是会占据页面布局空间*/
        }
        span {
            border: 3px solid #f00;
        }
        .s2 {
            /* 行内元素垂直方向的内外间距都不能使用! 水平方向可以正常生效 */
            padding: 50px;
        }
    </style>
</head>
<body>
    <div class="d1"></div>
    <div class="d2">内间距测试</div>
    <hr>
    <span>我是span</span>
    <span class="s2">我是span</span>
    <span>我是span</span>
    <h1>我是标题</h1>
</body>
</html>
相关推荐
fury_1234 分钟前
当大的div中有六个小的div,上面三个下面三个,当外层div高变大的时候我希望里面的小的div的高也变大
前端·javascript·html
大鸡腿最好吃19 分钟前
为啥react要用jsx
前端·javascript·react.js
小黄编程快乐屋22 分钟前
前端小练习——大雪纷飞(JS没有上限!!!)
开发语言·前端·javascript
程序猿阿伟24 分钟前
《平衡之策:C++应对人工智能不平衡训练数据的数据增强方法》
前端·javascript·c++
STUPID MAN39 分钟前
vue3使用后端传递的文件流进行文件预览
前端·javascript·vue.js·文件预览
-代号95271 小时前
【React】二、状态变量useState
前端·javascript·react.js
爬坑的小白1 小时前
el-menu导航三级数据结构及数据展示
前端·javascript·vue.js
CodeSheep1 小时前
雷军又添一员猛将!!
前端·后端·程序员
dz88i81 小时前
关于Chrome自动同步书签的解决办法
前端·chrome
温轻舟2 小时前
前端开发 之 15个页面加载特效中【附完整源码】
前端·javascript·css·html