CSS 盒式模型

盒式模型

CSS 盒子模型分为两类:W3C盒子模型(标准盒模型)和IE盒子模型(怪异盒模型)
他们都包括,content(内容区域)、padding区域、border区域、margin区域


盒子模型

他俩的不同之处在于对宽高的定义不同。

W3C盒子模型的 width = content.width , height = content.height
IE盒子模型的 width = content.width + padding * 2 + border * 2

可以通过定义 box-sizing 的值,来定义某个区域元素的盒子模型。

W3C盒子模型 box-sizing: content-box;
IE盒子模型 box-sizing: border-box;

下面通过一个实例来了解他们之间的差异:

首先在 style 中定义:

  .content-box {
    box-sizing: content-box;
    margin: 10px;
    padding: 10px;
    border: 1px solid black;
    width: 100px;
  }
  .border-box {
    box-sizing: border-box;
    margin: 10px;
    padding: 10px;
    border: 1px solid red;
    width: 100px;
  }

在页面的 html 中绘制两个 div

    <!-- width = content -->
    <div class="content-box" id="c1">
      Hello World!
    </div>
    <!-- width = border + padding + content -->
    <div class="border-box" id="c2">
      Hello World!
    </div>

比较他们之间结果的差异性:

image.png

明明定义了同样的 width、pading、margin和border 他们最后展现的结果却不同。
现在来计算一下他们各自真实的 content 宽度和总宽度到底为多少(这里暂时不考虑margin)

上面的 div 是 W3C 标准模型,content 宽度就是定义的宽度 width = 100px
总宽度 = width + padding * 2 + border * 2 = 100px + 20px + 2px = 122px

下面的 div 是 IE 盒子模型,content 宽度 = width - padding2 - border2 = 100px -20px -2px = 77px
总宽度 = width(content + padding2 + border 2) = 100px

由于模型的不同,这里就差了 22px 的宽度

获取元素 CSS 属性

dom.style.attr 可以获取元素的行内样式的属性值
windows.getComputedStyle(dom).attr 可以获取元素计算后样式的属性值
IE下
dom.currentStyle[attr]

clientWidth、scrollHeight、offsetWidth

  • offset 系列
    offsetWidth = width + 左右padding + 左右boder
    offsetTop: 当前元素上边框到最近的已定位父级(offsetParent) 上边框的距离。如果父
    级都没有定位,则是到body 顶部的距离
  • client 系列
    clientWidth = width + 左右padding
    clientTop = boder.top(上边框的宽度)
  • scroll 系列
    scrollHeight:获取指定标签内容层的真实高度(可视区域高度+被隐藏区域高度)
    scrollTop :内容层顶部到可视区域顶部的距离


    image.png

    js实例(与上一节代码关联):

    let c1 = document.getElementById('c1')
    let c2 = document.getElementById('c2')
    console.log(c1.clientWidth, c1.offsetWidth) // 120 122
    console.log(c2.clientWidth, c2.offsetWidth) // 98 100

BFC

参考:https://zhuanlan.zhihu.com/p/25321647
BFC(Block formatting context)直译为"块级格式化上下文",它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。通俗一点来讲,可以把 BFC 理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部。

BFC 的三个作用:
1)防止外边距重叠 (让两个元素不要处于同一个BFC下,给其中一个元素创建一个独立的BFC即可防止外边距重叠)
2)清除浮动影响 (让包含浮动元素的div 创建 BFC,让浮动元素参与计算宽高)
3)防止文字环绕

<div style="height: 100px;width: 100px;float: left;background: lightblue">我是一个左浮动的元素</div>
<div style="width: 200px; height: 200px;background: #eee">我是一个没有设置浮动, 
也没有触发 BFC 元素, width: 200px; height:200px; background: #eee;</div>
image.png

内容被浮动元素覆盖,但是文字在浮动元素周围环绕,给第二个 div 创建 BFC。
即加入 overflow: hidden 属性后,效果如下


image.png

如何创建 BFC(触发 BFC):
body 根元素
浮动元素:float 除 none 以外的值
绝对定位元素:position (absolute、fixed)
display 为 inline-block、table-cells、flex
overflow 除了 visible 以外的值 (hidden、auto、scroll)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容