首页 > 其他分享 >盒子模型

盒子模型

时间:2023-01-09 23:25:33浏览次数:37  
标签:盒子 color border 模型 元素 padding width margin

盒子模型的概念:

  • 在html中,把每一个元素都当做成一个盒子,拥有盒子的平面外形和空间
  • 盒模型由内容(content)+内边距(padding)+边框(border)+外边距(margin)4部分构成
    • 内容区域:你书写的内容或者子元素能够显示的区域
    • 内边距:撑开内容与边框的距离
    • 边框:元素的边框
    • 外边距:撑开元素和其他元素之间的距离

盒子模型-内容区域(在标准盒子模型下):

标准盒子模型下设置的width和height都是content(内容)区域的宽高

  • width:
    • 默认是auto。auto分为4种情况:
      1. fill-available:充分利用可使用空间(块标签)
      2. fit-content:收缩到合适(浮动,定位)
      3. min-content:收缩到最小(表格中常见)
      4. max-content:超出容器限制(英文单词较长,或者设置了不换行,就会超出容器限制)
  • height:
    • auto:其高度由内部元素堆叠而成,也就是内部元素撑起来的

设置宽度的坑

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>设置宽度的坑</title>
    <style>
        .box{
            /*假设一个元素 内容区域加上左右各50的margin  正好撑满父级
            以下设置是错误的*/
            width: 100%;/*把内容区域设置成了和父级一样宽 再加上margin 就超出父级了*/
            margin: 0 50px;
            height: 100px;
            background-color: red;

            /*解决以上问题很简单,不写width,或者设置width为auto*/
            width: auto;
        }
        input{
            /*input元素:
                占用的宽是200px 高是50px
                边框是1px
                padding是左右各10px

                    所以设置的宽度应该是 200-2-20=178
                */
            width:178px;
            height: 48px;
            padding: 0 10px;
            border: 1px solid #000;
        }
    </style>
</head>
<body>
    <!--

    -->
    <div class="box">
        dd
    </div>
    <input type="text">
</body>
</html>Copy to clipboardErrorCopied

 

设置高度的坑

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>设置高度的坑</title>
    <style>
        /*想让con元素和屏幕一样高*/
        /*想要让高度的百分比生效,需要给父级也要设置高度(不能是auto)*/
        html{
            height: 100%;
        }
        body{
            height: 100%;
        }
        .outer{
            height: 100%;
        }
        .con{
            height: 100%;
            background-color: red;
        }
    </style>
</head>
<body>
    <div class="outer">
        <div class="con"></div>
    </div>
</body>
</html>Copy to clipboardErrorCopied

 

margin基础

  • 设置一个元素外边距的宽度。外边距可以理解为当前元素与父级或其他兄弟级元素的距离。
  • 值可以是一个单位,也可以是一个百分比
  • 分4个方向
    • margin-left、margin-right、margin-top、margin-bottom
    • 每个方向的值都可以单独的设置
    • margin-left、margin-top是让自身元素靠右 靠下
    • margin-bottom、margin-right是让其他元素 靠右 靠下
  • margin的简写:
    • margin后跟4个值: 分别代表 上 右 下 左
    • margin后跟3个值: 分别代表 上 左右 下
    • margin后跟2个值: 分别代表 上下 左右
    • margin后跟1个值: 分别代表 上下左右
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>margin基础</title>
    <style>
        .con1,.con2{
            width: 200px;
            height: 200px;
        }
        .con1{
            background-color: #5df2ff;
            /*margin-left: 100px;
            margin-top: 80px;
            margin-right: 30px;
            margin-bottom: 40px;*/

            /*margin: 80px 30px 40px 100px;*/
            /*margin: 80px 50px 40px;*/
            margin: 80px 50px;
            margin: 50px;
        }
        .con2{
            background-color: yellow;
        }
    </style>
</head>
<body>
    <div class="con1"></div>
    <div class="con2"></div>
</body>
</html>Copy to clipboardErrorCopied

 

margin 0 auto居中:

  • 在正常的布局中,块级元素具有满屏的属性,也就是在水平方向上占满父级的宽度
  • 满屏以后,内部元素的内容+内边距+边框+外边距 刚好是等于 父级的 内容区域的大小
  • 所以当水平方向上的 宽度 边框 内边距都是固定值的时候,在水平方向上margin设置auto的时候,默认左右平分剩余空间,达到水平居中效果
  • 当水平方向出现auto的时候,剩余空间会进行分配,当某一边不要 另外一边出现auto, 剩余空间就会直接给另外一边
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>margin 0 auto居中</title>
    <style>
        .outer{

        }
        header{
            width: 1000px;
            height: 100px;
            background-color: pink;
            margin: 0 auto;
            margin: 30px auto 50px;
        }
    </style>
</head>
<body>
    <div class="outer">
        <header></header>
        <section></section>
        <footer></footer>
    </div>
</body>
</html>Copy to clipboardErrorCopied

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>水平方向auto小练习</title>
    <style>
        .con{
            width: 400px;
            height: 100px;
            background-color: red;
            margin-left: auto;
            margin-right: 0;
        }
    </style>
</head>
<body>
    <!--
        水平方向auto小练习:
            当水平方向出现auto的时候,剩余空间会进行分配
             当右边不要  左边出现auto 剩余空间就会直接给左边
    -->

    <div class="con">

    </div>
</body>
</html>Copy to clipboardErrorCopied

 

垂直方向上的 margin : auto 0 为什么不行

  • 相对于水平方向来说,块元素在垂直方向上并没有满屏的属性,margin默认在上下的值都是0
  • 无论是否设置垂直方向的auto,表现出来的都是元素多高就占用多少,并没有剩余空间去平分
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>margin 0 auto居中</title>
    <style>
        .outer{
            height: 400px;
            background-color: #b51d1a;
        }
        header{
            width: 1000px;
            height: 100px;
            background-color: pink;
            margin: auto 0;
        }
    </style>
</head>
<body>
    <div class="outer">
        <header></header>
    </div>
</body>
</html>Copy to clipboardErrorCopied

 

margin的父级塌陷:

  • 当一个父级中 第一个元素的margin-top会塌陷给父级

  • 最后一个元素的margin-bottom会塌陷给父级

    防止父级和其他元素之间的间隙过大,当第一个和最后一个子元素的margn塌陷给父级以后 父级就可以和兄弟元素在垂直方向上进行叠加

  • 避免父级塌陷

    1. 给父级设置一个边框 边框的宽度不能为0

      防止影响视觉,可以设置透明(transparent)颜色

    2. 开启BFC(块级格式化上下文)

      很多种方法,后边讲解:overflow:hidden 可以开启 。。。。。。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>margin基础</title>
    <style>
        .con1,.con2{
            width: 200px;
            height: 200px;
        }
        .con1{
            background-color: #5df2ff;
            margin-top: 50px;
        }
        .con2{
            margin-top: 40px;
            background-color: yellow;
            margin-bottom: 40px;
        }
        .outer{
            background-color: pink;

            /*border:1px solid transparent;*/
            overflow: hidden;
        }
    </style>
</head>
<body>
    <div class="outer">
        <div class="con1"></div>
        <div class="con2"></div>
    </div>

</body>
</html>Copy to clipboardErrorCopied

 

margin对元素的影响和支持性:(margin都为正值)

  • 对块标签来说:

    • margin-left:元素右移动
    • margin-top:元素下移动
    • margin-right:如果右边有元素 后边的元素右移动
    • margin-bottom:如果下边有元素 后边的元素下移动
    • margin垂直方向叠加,父级塌陷
  • 对行标签:

    • margin在垂直方向上不生效
    • 水平方向:margin-left:元素右移动,margin-right:如果右边有元素 后边的元素右移动
  • 对行内块:

    • 和块元素一样
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>margin对元素的影响和支持性</title>
    <style>
        .con2{
            margin: 40px;
        }
        .ipt{
            margin: 30px;
        }
    </style>
</head>
<body>
    <div class="outer">
        <div class="con1">div</div>
        <span class="con2">我是span1</span>
        <span class="con2">我是span1</span>
        <input type="text" class="ipt">
    </div>
</body>
</html>Copy to clipboardErrorCopied

 

负margin的基础用法:

  • margin-left为负:
    • 元素向左移动,并且原来的位置不保留(后边元素会紧跟上一起移动),
    • 元素向左移动,并不会挤到前边的兄弟元素,而是覆盖前边的兄弟元素
  • margin-right为负:
    • 元素视觉大小不发生变化
    • 但是元素实际所占用的空间变小,后边元素会跟上来 或者是撑不开父级宽度
    • 假如元素width为100px 设置marginright为-20 元素实际大小是80px
  • margin-top为负:
    • 元素向上移动,并且原来的位置不保留(下边元素会紧跟上一起移动),
    • 元素向上移动,并不会挤到上边的兄弟元素,而是覆盖上边的兄弟元素
  • margin-bottom为负:
    • 元素视觉大小不发生变化
    • 但是元素实际所占用的空间变小,下边元素会跟上来 或者是撑不开父级高度
    • 假如元素height为100px 设置marginbottom为-20 元素实际大小是80px
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>负margin的基础用法</title>
    <style>
        .outer{
            background-color: red;
            /*overflow: hidden;*/
        }
        .con1{
            width: 200px;
            height: 200px;
            background-color: deeppink;
            /*float: left;*/

            margin-left: 0px;
            margin-right: 0px;
        }
        .con2{
            width: 200px;
            height: 200px;
            background-color: yellow;
            /*float: left;*/

            margin-top: 0px;
            margin-bottom: -0px;
        }
    </style>
</head>
<body>
    <div class="outer">
        <div class="con1"></div>
        <div class="con2"></div>
    </div>
</body>
</html>Copy to clipboardErrorCopied

 

负margin练习

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>负margin练习1</title>
    <style>
        header{
            width: 1000px;
            height: 100px;
            background-color: red;
            margin: 0 auto;
        }
        section{
            width: 800px;
            height: 400px;
            background-color: yellow;
            /*margin: 0 auto;
            margin-top: -50px;*/

            margin: -50px auto 0;
        }
    </style>
</head>
<body>
    <div class="outer">
        <header>

        </header>
        <section>

        </section>
    </div>
</body>
</html>Copy to clipboardErrorCopied


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>负margin练习1</title>
    <style>
        .outer{
            /*width: 1000px;*/
            height: 250px;
            border: 1px solid #000;
            float: left;
        }
        .inner{
            width: 1068px;
            overflow: hidden;
            margin-right: -68px;
        }
        .outer .inner div{
            width: 199px;
            height: 200px;
            background-color: pink;
            float: left;
            margin-right: 68px;
        }

        /*方法1  最后一个设置为0 覆盖*/
        /*.outer .active{
            margin-right: 0;
        }*/


        /*方法二: 直接使用选择器选择前3个*/
       /* .outer div:nth-child(-n+3){
            margin-right: 68px;
        }*/
    </style>
</head>
<body>
    <div class="outer">
        <div class="inner">
            <div></div>
            <div></div>
            <div></div>
            <div class="active"></div>
        </div>
    </div>
</body>
</html>Copy to clipboardErrorCopied

 

边框的设置:

  • border-width:边框宽度
  • border-style:边框样式 solid 实现 dashed 虚线 dotted 点线
  • border-color:边框颜色
  • 合写:border:border-width border-style border-color
  • 注意:
    • 边框是在margin里边
    • 背景颜色在边框中显示(实线的时候,我们看不到)
    • 背景图片原点没有从边框开始 而是从padding开始的,但是可能会平铺到边框中
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>边框的设置</title>
    <style>
        .box{
            width: 100px;
            height: 100px;
            border: 10px dotted #000;
            margin: 10px;
            background-color: red;
            background: url("../images/05.jpg") 0 0 no-repeat;
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>Copy to clipboardErrorCopied

 

边框的应用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>边框的应用</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }

        .head_out{
            width: 100%;
            border-bottom: 4px solid #55a5ff;
        }
        .head_out .head{
            width: 1000px;
            height: 100px;
            background-color: orangered;
            margin: 0 auto;
        }
        .head a{
            text-decoration: none;
            color: #3c3c3c;
            font-size: 12px;
        }
        .head .head_login{
            border-right: 3px solid #3c3c3c;
            border-left:3px solid #3c3c3c;
            padding: 10px 20px;
            margin-left: 20px;
        }
        .head .head_regist{
            border-right: 3px solid #3c3c3c;
            padding: 10px 20px;
        }
    </style>
</head>
<body>
    <div class="outer">
        <div class="head_out">
            <header class="head">
                <div class="head_top">
                    <a href="###" class="head_login">登录</a>
                    <a href="###" class="head_regist">注册</a>
                </div>
            </header>
        </div>
    </div>
</body>
</html>Copy to clipboardErrorCopied

 

边框画三角形

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>边框画三角形</title>
    <style>
        body{
            background-color: #ccc;
        }
        .box{
            width: 0;
            height: 0;
            border: 100px solid #000;
            border-top-color: transparent;
            border-bottom-color: #ff8d9e;
            border-left-color: transparent;
            border-right-color:transparent;

            transform: rotate(0deg);
        }
    </style>
</head>
<body>
    <!--
        当内容非常小的时候,
        上下左右边框重合,重合部分就会平分为两半,
        这个时候,整个边框就分为了4个三角形
    -->
    <div class="box"></div>
</body>
</html>Copy to clipboardErrorCopied

 

padding:

  • 什么是padding

    • padding的写法和margin基本一摸一样
    • padding主要撑开内容之间的距离
    • 背景颜色可以显示在padding中,也可以显示在border中
    • 背景图片的原点,其实默认在 padding的左上角
  • padding的支持性:

    • 块标签:四个方向都支持
    • 行标签:水平方向直接支持,垂直方向也支持设置,但是不能撑开元素的距离
  • padding不支持负值

  • padding也不去设置auto 不支持

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>padding的设置</title>
    <style>
        .box{
            width: 800px;
            height: 400px;
            background-color: #b51d1a;
        }
        .con{
            width: 200px;
            height: 200px;
            background-color: #5df2ff;
            padding: 10px 20px;
            background: url("../images/05.jpg");
        }
        .con span{
            padding: 20px;
            color: #fff;
            background-color: yellow;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="con">
            今天天气真好
            <span>哈哈哈</span>
        </div>

    </div>
</body>
</html>Copy to clipboardErrorCopied

 

padding扩大点击区域

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .con1{
            width: 100px;
            height: 100px;
            background-color: red;
        }
        a{
            font-size: 12px;
            padding: 20px 0;
        }
    </style>
</head>
<body>
    <div>
        <div class="con1"></div>
        <a href="###">百度两下你就直到</a>
        <div class="con1"></div>

    </div>
</body>
</html>Copy to clipboardErrorCopied

 

标准盒模型和怪异盒模型:

默认情况基本都是标准盒模型

  • 怪异盒模型:

  • 标准盒模型:

    • 元素占用的空间大小为:内容区域(content)+内边距(padding)+边框(border)+外边距(margin)

    • ex:

      一个元素 margin:20px 30px;

       padding:10px 5px;
                      border: 2px solid #000;
                      width:300px;Copy to clipboardErrorCopied

       

      求这个元素所占用的宽度空间大小是:374px

  • 怪异盒模型:

    • ie6 或者是 没有正确书写版本声明 或者是设置了box-sizing

    • 元素所占用的空间大小为:内容(content+padding+border)+外边距(margin)

    • 怪异盒模型设置的width是 content+padding+border整体的宽度

      ex:

      一个元素 margin:20px 30px;

        padding:10px 5px;
                      border: 2px solid #000;
                      width:300px;Copy to clipboardErrorCopied

       

      求这个元素所占用的宽度空间大小是:360px 求这个元素内容(content)区域的宽度是286px

生成怪异盒模型

  • 一个盒子模型中,每一个属性盒子都有自己的名字,由内向外分别是 content-box 、 padding-box、border-box、margin-box(没有官方说明)

  • 将一个元素设置盒模型显示

    • box-sizing属性:

      content-box:标准盒模型

      border-box:怪异盒模型

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>怪异盒模型</title>
    <style>
        .box{
            width: 100px;
            height: 100px;
            background-color: red;
            padding: 10px;
            margin: 15px;
            border: 2px solid #000;
            box-sizing: content-box;/*标准盒模型*/
            box-sizing: border-box;/*怪异盒模型*/
        }
    </style>
</head>
<body>
    <div class="box">

    </div>
</body>
</html>Copy to clipboardErrorCopied

 

盒子模型概念总结

  • 在html中,把每一个元素都当做成一个盒子,拥有盒子的平面外形和空间
  • 盒子模型由 内容(content)、内边距(padding)、边框(border)、外边距(margin)四个构成
  • 盒子模型分为怪异盒子模型和标准盒子模型
  • 标准盒子模型的所占用空间的计算方式是 content+padding+border+margin
  • 怪异盒子模型所占的的空间计算方式是 content+margin(content内容是包含内容内边距和边框的)
  • 使用box-sizing属性可以切换盒子模型的方式

padding和margin的使用场景

  • padding和margin的使用场景
    • padding:撑开内容与边框的距离 padding中会显示背景颜色和背景图片
    • margin:撑开元素之间距离
  • 日常使用过程中,可以按照下边方式来使用:
    • padding和margin都可以撑开元素之间的距离。
    • padding主要用来撑开父子之间的距离
    • margin主要用来撑开兄弟之间的距离

标签:盒子,color,border,模型,元素,padding,width,margin
From: https://www.cnblogs.com/z-bky/p/17038822.html

相关文章

  • R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列|附代码数据
    原文链接:http://tecdat.cn/?p=23934最近我们被客户要求撰写关于ARIMA-GARCH的研究报告,包括一些图形和统计输出。在本文中,我们将尝试为苹果公司的日收益率寻找一个合适的......
  • 目标检测模型的评价标准-AP与mAP
    前言一,精确率、召回率与F11.1,准确率1.2,精确率、召回率1.3,F1分数1.4,PR曲线1.4.1,如何理解P-R曲线1.5,ROC曲线与AUC面积二,AP与mAP2.1,AP与mAP指标......
  • 【控制】自适应控制,模型参考自适应控制,参考模型如何求取,有程序有图
    目录自适应控制的一点笔记和看法1​​【控制】自适应控制基本概念​2​​【控制】自适应控制,对参考信号跟踪,对未知参数估计的小例子,带程序有结果图​3​​【控制】自适应控......
  • TensorFlow模型保存和载入方法汇总
    目录 ​​一、TensorFlow常规模型加载方法​​​​保存模型​​​​加载模型​​​​1.不加载图结构,只加载参数​​​​ 2.加载图结构和参数​​​​ 3.简化版本​​​......
  • Model-Agnostic Meta-Learning (MAML)模型介绍及算法详解
    paper:​​​https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1703.03400.pdf​​ MAML在学术界已经是非常重要的模型了,论文Model-AgnosticMeta-LearningforFa......
  • ONNX模型分析与使用
    本文大部分内容为对ONNX官方资料的总结和翻译,部分知识点参考网上质量高的博客。一,ONNX概述深度学习算法大多通过计算数据流图来完成神经网络的深度学习过程。一些......
  • 基于颜色模型和形态学处理的车牌定位和识别matlab仿真
    up目录一、理论基础二、核心程序三、测试结果一、理论基础颜色信息提取、车牌区域定位、识别、提取、检测倾斜度、车牌校正、车牌区域2值化、擦除干扰区域、文......
  • 构建模型与模型评估
    构建模型线性模型、决策树、随机森林、朴素贝叶斯、支持向量机等机器算法适用于不同的数据类型和形态。根据输入、输出数据的不同,分为如下类别。输入分类如果数据带有......
  • 原神私服替换模型(3Dmigoto)教程
    本期教程教大家如何修改原神私服角色模型​首先下载3Dmigoto​第一次打开需要设置游戏路径​打开之后搜索loader点下一个​会跳转到这个地方,然后在我标蓝的地方输入你的游戏......
  • 常见的优先级选择模型
    整理了一些行业常见的优先级选择方法论,它们每个都有适用的场景,我们需要按需使用。符合发展战略战略方向上必备的功能,不能考虑性价比,是必须实现的。这也是老板需求为什么......