css盒模型理解

算法栖澜客
• 阅读 3034

css盒模型概念

css盒子模型又称框模型 (Box Model) ,包含了元素内容(content)、内边距(padding)、边框(border)、外边距(margin)几个要素。
css盒模型理解

图中element元素是实际内容,也就是元素框,紧挨着元素框外部的是内边距padding,其次是边框(border),然后最外层是外边距(margin),整个构成了盒子模型。通常我们设置的背景显示区域,就是内容、内边距、边框这一块范围。而外边距margin是透明的,不会遮挡周边的其他元素。那么:

  • 总宽度 = 元素(element)的width + padding的左边距和右边距的值 + border的左右宽度 + margin的左边距和右边距的值;
  • 总高度 = 元素(element)的height + padding的上下边距的值 + border的上下宽度 + margin的上下边距的值。

css外边距合并(叠加)

两个上下方向相邻的元素框垂直相遇时,外边距会合并,合并后的外边距的高度等于两个发生合并的外边距中较高的那个边距值。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{
            margin:0;
            padding:0;
        }
        .top{
            width:400px;
            background: #0ff;
            height:100px;
            margin:30px 30px;
        }
        .bottom{
            width:400px;
            height:100px;
            margin:50px 30px;
            background: #ddd;
        }
    </style>
</head>
<body>
    <section class="top">
        <h1>上</h1>
        margin-bottom:30px;
    </section>
    <section class="bottom">
        <h1>下</h1>
        margin-top:50px;
    </section>

</body>
</html> 

css盒模型理解

需要注意的是:只有普通文档流中块框的垂直外边距才会发生外边距合并。

边距合并解决方案(BFC)

BFC其英文拼写为 Block Formatting Context 直译为“块级格式化上下文”

元素产生BFC的条件

  1. float属性不为none(脱离文档流)
  2. position为absolute或fixed
  3. display为inline-block,table-cell,table-caption,flex,inine-flex
  4. overflow不为visible

BFC元素所具有的特性

  1. 在BFC中,盒子从顶端开始垂直地一个接一个地排列。
  2. 盒子垂直方向的距离由margin决定。属于同一个BFC的两个相邻盒子垂直方向的margin会发生重叠。
  3. 在BFC中,每一个盒子的左外边距(margin-left)会触碰到容器的左外边缘(border-left),对于从右往左的格式来说,会触碰到右边缘。
  4. BFC不会与浮动盒子产生交集,而是紧贴浮动元素边缘。
  5. 计算BFC高度BFC时,自然也会检测浮动的子盒子高度。

应用场景

  1. 自适应两栏布局
  2. 清除内部浮动
  3. 防止垂直margin重叠

上面边距合并例子调整:

<section class="top">
        <h1>上</h1>
        margin-bottom:30px;
    </section>

 <!-- 给下面这个块添加一个父元素,在父元素上创建bfc -->
 <div style="overflow:hidden">
   <section class="bottom">
       <h1>下</h1>
         margin-top:50px;
    </section>
</div>

css盒模型理解

关于bfc的应用的案例这里就不在一一举出了,大家去网上找一些其他的文章看一下。

box-sizing属性介绍

box-sizing : content-box|border-box|inherit
  1. content-box(标准盒子),默认值,可以使设置的宽度和高度值应用到元素的内容框。盒子的宽高只包含内容。总宽度=margin+border+padding+width;总高度=margin+border+padding+height
  2. border-box(IE盒子),设置的width值其实是除margin外的border+padding+element的总宽度。盒子的width包含border+padding+内容。总宽度=margin+width; 总高度=margin+height
  3. inherit , 规定应从父元素继承 box-sizing 属性的值

偷两张图贴起来~

css盒模型理解

css盒模型理解

点赞
收藏
评论区
推荐文章
晴空闲云 晴空闲云
2年前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
秃头王路飞 秃头王路飞
2年前
总结前端元素的各种高度(上)
HTMLElement.clientHeight只读属性Element.clientHeight对于没有定义CSS或者内联布局盒子的元素为0;否则,它是元素内部的高度(以像素为单位),包含内边距,但不包括边框、外边距和水平
菜园前端 菜园前端
2年前
你真的了解的CSS3盒模型和CSS3特性知识吗
原文链接:什么是CSS3?CSS3是CSS一个新的标准,直接理解为是CSS的升级版,里面新增了很多样式(特性)。CSS3盒子模型:::warningCSS3盒子模型必须要掌握,否则你在实际开发中遇到样式错乱很难排查问题。:::旧版的IE浏览器与其它浏览器解
凯特林 凯特林
4年前
你可能不知道的10个CSS新功能(2021版)
多年来,CSS已经超越了背景颜色、边框、文本样式、边距和盒模型。现代CSS能够提供一系列的功能,而在过去,您需要JavaScript或变通方法来实现这些功能。为了庆祝它在2021年取得的成就,在这篇文章中,我们想看看一些你可能不知道的令人惊叹的CSS新特性。我们将强调web设计人员和开发人员可以用现代CSS做的很酷的事情,讨论用例,浏览器支持,并给你一个
Stella981 Stella981
3年前
Boost(1.69.0) windows入门(译)
<head<title缩进2字符</title<styletype"text/css".yindent,.yblock{padding:1em1em01em;marginright:0;}.yindent{margin:0.7em2em;border:mediumoutset;}.yblock{margin
Wesley13 Wesley13
3年前
HTML5中新增的布局标签
1.1.1  盒子模型层次盒子模型的层次遵循以下顺序:内容paddingà边框àbackgroundimageàbackgroundcoloràmargin!(https://oscimg.oschina.net/oscnet/722909c8dcfd273c73b0c6534e20f8d9bd4.gif)!(ht
Wesley13 Wesley13
3年前
2020软件工程作业03
<styletable{width:100%;/\表格宽度\/margin:auto;/\外边距\/emptycells:show;/\单元格无内容依旧绘制边框\/fontsize:18px;}table,th,td{border:2pxsolidpink;}li{fontsize:1
Wesley13 Wesley13
3年前
CSS基础知识整理
1什么是CSS?CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局等外观显示样式。CSS以HTML为基础,提供了丰富的功能,如字体、颜色、背景的控制及整体排版等,而且还可以针对不同的浏览器设置不同的样式。
Stella981 Stella981
3年前
HTML前端开发之路——弹性盒模型
弹性盒模型(FlexibleBox)是一个CSS3新增布局模块,用于实现容器里项目的对齐、方向、排序;弹性盒模型最大的特效在于,能够动态的修改子元素的宽度和高度,以满足在不同尺寸屏幕下的恰当布局;下面是弹性盒模型的元素基本概念:!(http://static.oschina.net/uploads/space/2016/0212/210
Stella981 Stella981
3年前
CSS外边距合并导致margin越界的问题
外边距合并其实经常会遇到,这里稍微总结一下,以及一些相关的术语一、什么是外边距合并?(折叠外边距)外边距合并指的是当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者;而左右外边距不合并。在CSS当中,相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外
Wesley13 Wesley13
3年前
CSS布局模型
1、流动模型(Flow)    流动(Flow)是默认的网页布局模式。也就是说网页在默认状态下的HTML网页元素都是根据流动模型来分布网页内容的。    流动布局模型具有2个比较典型的特征:      (1)块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布,因为在默认状态下,块状元素的宽度都为100%。      (2)在流动模型