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>
相关推荐
sunbyte1 小时前
Tailwind CSS 初学者入门指南:项目集成,主要变更内容!
前端·css
可爱的秋秋啊2 小时前
vue3,element ui框架中为el-table表格实现自动滚动,并实现表头汇总数据
前端·vue.js·笔记·elementui
一夜枫林2 小时前
uniapp自定义拖拽排列
前端·javascript·uni-app
IT瘾君4 小时前
JavaWeb:Html&Css
前端·html
264玫瑰资源库4 小时前
问道数码兽 怀旧剧情回合手游源码搭建教程(反查重优化版)
java·开发语言·前端·游戏
喝拿铁写前端4 小时前
从圣经Babel到现代编译器:没开玩笑,普通程序员也能写出自己的编译器!
前端·架构·前端框架
HED4 小时前
VUE项目发版后用户访问的仍然是旧页面?原因和解决方案都在这啦!
前端·vue.js
拉不动的猪5 小时前
前端自做埋点,我们应该要注意的几个问题
前端·javascript·面试
王景程5 小时前
如何测试短信接口
java·服务器·前端
安冬的码畜日常5 小时前
【AI 加持下的 Python 编程实战 2_10】DIY 拓展:从扫雷小游戏开发再探问题分解与 AI 代码调试能力(中)
开发语言·前端·人工智能·ai·扫雷游戏·ai辅助编程·辅助编程