CSS盒模型

记忆:

常用的 border-box 是IE盒模型,padding/border 的变化会修改其 width 内在盒子。

盒模型

页面就是由一个个盒模型堆砌起来的, 每个HTML元素 都可以叫做 盒模型,盒模型由外而内包括:边距(margin)、边框(border)、填充(padding)、内容(content)。

补充:
每个元素的盒子由内容两层组成:外在盒子容器盒子(内在盒子)

平时:
display: inline-block实际是display: inline-block的简写
display: block实际是display: block-block的简写
display: table实际是display: block-table的简写

问:width/height 作用在哪个盒子上?
答:内在盒子,也就是 content

20190302-12:54于文二路博库书城:
暂时理解盒模型由: margin + 外在盒子 + 容器盒子组成
应该不对吧?

20190302-15:48:
"内在盒子" 又被分成了 4 个盒子,分别是 content boxpadding boxborder boxmargin box

屏幕快照 2019-03-02 下午3.55.19.png
屏幕快照 2019-03-02 下午3.56.11.png

“margin 的背景永远是透明的”!!!

对于块状元素,如果设置width:
1)流动性丢失
对于块状元素,如果 width:auto,则元素会如水流般充满整个容器,而一旦设定了 width
具体数值,则元素的流动性就会被阻断,因为元素给定宽度就像河流中间竖了两个大闸一样, 就没有了流动性。尤其宽度作用在 content box 上,更是内外流动性全无,如图 3-21 所示。
这世界上任何事物,一旦限死了,就丧失了灵活性,其发展潜力及作用范围就会大大 受限。
长江为何生机勃勃数千年,就是因为滔滔江水,奔流不息。CSS 的流动性也是其生机蓬勃 之本,如果直接宽度设死,流动性丢失,在我看来,就是江河变死水,手机变板砖。这就是我 提出 “无宽度准则”的原因— 布局会更灵活,容错性会更强。

屏幕快照 2019-03-02 下午4.06.49.png

(2)与现实世界表现不一致的困扰。
包含 padding 或 border 会让元素宽度变大的这种 CSS 表现往往会让 CSS 使用者困惑: 我设置宽度为 100 像素,其实是希望整个最终的宽度是 100 像素,这样才符合现实理解嘛。

或许是因为 CSS 2.1 是面向内容(图文信息)设计的,所以,width 设计成了直接作用在 content box 上。

屏幕快照 2019-03-02 下午4.22.39.png

问:为何没有box-sizing: margin-box?
答:

  • margin-box本身不会改变元素尺寸,其本身没有存在的意义。而borderpadding 不一样
  • 另外一个原因牵扯到语义。如果 box-sizing 开了先河支持了 margin-boxmargin box就变 成 了 一 个“ 显 式 的 盒 子 ”,你 让 background-origin 等 属 性 何 去 何 从 ,支 持 还 是 不 支 持 呢 ?“ margin 的背景永远是透明的”这几个大字可是在规范写得清清楚楚,难道让背景色在所谓的 margin box 中也 显示?

关于“流”的重点:CSS 的默认流是水平方向的,宽度是稀缺的,高度是无限的。

分类

标准盒模型(W3C)
内容大小就是content

image.png

IE盒模型
内容大小是:padding+border+content

image.png

切换

使用box-sizing可以切换两者类型的模型content-boxborder-box

JS如何获取和设置Box宽高

1、
兼容性好(非IE):window.getComputedStyle(dom).width/height
仅限IE:dom.currentStyle.width/height

var obj = document.getElementById("test");

if(window.getComputedStyle){
  // window.getComputedStyle(obj).width
}else{
  // obj.currentStyle.width
}

2、dom.style.width/height(只能用于行内元素)

3、dom.offsetWidth/height(box-sizing:border-box;下)

4、dom.getBoundingClientRect().width/height !!!!!
这个方法返回一个矩形对象,包含四个属性:left、top、right和bottom。分别表示元素各边与页面上边和左边的距离。

ps:能获取元素在页面可视区域的坐标

这些盒子如何摆放呢?

根据:块级格式化上下文和行内格式化上下文
盒子在摆放过程中,会通过盒的类型生成格式化上下文。

块级格式化上下文:Block Formtting Content(BFC)
规定了内部的块级盒如何布局,并且使该盒子在页面上形成一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然。

margin塌陷的解释

所谓的塌陷其实是两个BFC的相邻盒或者父子盒相互作用时产生的。
在形成BFC的两个盒子会取两个盒子相邻边的最大margin作为相邻边的共用margin

BFC块级格式化上下文如何产生

属性值为下面时,box会产生BFC:

  • overflow: auto/ hidden;
  • position: absolute/ fixed;
  • float: left/ right;
  • display: inline-block/ table-cell/ table-caption/ flex/ inline-flex

元素浮动时BFC的应用

浮动元素会从正常文档流中删除,这也是为什么其它正常元素会看不见浮动的原因,也是为什么有父级塌陷的原因
清除浮动一种方法是使用overflow:auto/hidden,使用后整体形成了BFC,相当于清除了浮动。

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

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,737评论 1 92
  • css盒模型是前端开发中非常基础和重要的知识,它是元素大小的呈现方式,它包括margin、border、paddi...
    zhiqiangx阅读 713评论 1 1
  • 课程目标 掌握盒模型相关知识点 了解IE盒模型和W3C 盒模型区别 学习建议 视频未覆盖的知识点会提供详细的文档资...
    饥人谷_江君阅读 592评论 0 3
  • 盒模型 盒模型的特点: 每个盒子都有:边界、边框、填充、内容四个属性;每个属性都包括四个部分:上、右、下、左;这四...
    xiaolizhenzhen阅读 1,307评论 0 0
  • 你有因为想要深入理解一首歌而懊恼自己是个“没有故事的女同学”吗? 在听陈医生的那些经典备胎之歌时,心想当备胎...
    南方的偶像派歌手阅读 323评论 0 1