重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、盒模型与怪异模型的设置
创新互联专注于云岩网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供云岩营销型网站建设,云岩网站制作、云岩网页设计、云岩网站官网定制、小程序制作服务,打造云岩网络公司原创品牌,更为您提供云岩网站排名全网营销落地服务。
当设置为box-sizing:content-box时,将采用标准模式解析计算(默认模式);
当设置为box-sizing:border-box时,将采用怪异模式解析计算;
2、盒模型
在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),
元素的内边距(padding),元素的边框(border),元素的外边距(margin)四个部分,
这就是盒子模型。
在标准模式下的盒模型如下图所示,盒子总宽度/高度=width/height+padding+border+margin
3、怪异盒模型
在怪异模式下,盒子的总宽度和高度是包含内边距padding和边框border宽度在内的,盒子总宽度/高度=width/height + margin = 内容区宽度/高度 + padding + border + margin;
显然,盒模型比我想象的,比我最开始在前端课程中学到的其实要复杂得多。
我将现阶段学到的内容与过去学习所留下的印象进行对比,得出了如下我以为CSS盒模型中的难点和容易被忽视的点。
它是一切开始的基础
在MDN的文章中,盒模型被分为 标准盒模型 和 替代盒模型 。
通常我们一开始学习的盒模型是标准盒模型,它的width和heigth属性所设置的是content的宽度和高度,而不是盒子部分的宽度和高度(把border和它所围起来的部分叫盒子部分)
所以在练习布局的时候,我们有时候会觉得这个width和heigth很怪,并不能很方便直接地将我们心中所想象的布局表达出来,有时甚至需要计算。
而替代盒模型更符合我们的直觉。替代盒模型中的width heigth所指即为border所包括部分的width heigth.
将浏览器默认的标准盒模型改为替代盒模型
margin可以有负数,而padding不可以为负数。
负数意味着样式会重叠入侵。
[图片上传失败...(image-b2c4e1-1642049365894)]
可以参考视频: CSS外边距塌陷 - Web前端工程师面试题讲解
折叠的规则很好理解,大的覆盖小的,长的覆盖短的。
比如A和B的外边距折叠,A的外边距为10, B的外边距为20,那么结果是AB的间距为20。
外边距重叠的情况一共有三种。
之所以是垂直方向,是因为折叠发生在block元素上,block元素并不存在水平相接的情况。
对于Inline元素,比如说两个水平相接的span标签,实测是不会折叠的。
这个有点复杂,MDN的说法如下:
举例如下:
设置了border:solid, 正常:
将border:solid设置为none后,出现了折叠。(可以理解为偏移的参照系变化了,未设置Border,参照变成了上面的divB)
更为深入的探究,等往后遇到了再说吧。
参考: MDN盒模型
盒模式是 CSS 中一个重要的概念,即元素在页面所占据的空间位置,盒模型的属性包括:内容 (content)、填充 (padding)、边框 (border)、边界 (margin),盒模型一共分为两种,一种是 W3C 标准盒模型,另一种是 IE 盒模型(又称怪异盒模型)
元素盒模型宽高 = 内容的宽高 + 内边距padding + 边框border + 外边距margin
背景颜色从 border-box 开始生效的,背景图像从 padding-box 开始生效的,CSS 3 属性 : content-box / padding-box / border-box 可以改变背景图像从盒模型的哪部分开始生效
通过盒模型的外边距 margin 拉开各元素之间的间隙、距离,使用 padding 来撑开自身的宽高
在低版本 IE 里,若不添加 !DOCTYPE html 的文档声明,就会按照 IE 盒模型进行解析
元素盒模型宽高 = 内容的宽高【元素的宽高 + padding + border】 + 外边距margin
IE 盒模型的计算方式和 W3C 的盒模型很相似,但有一点是非常不同的,这就是:内边距和边框并不被包含在计算的范围内,这就意味着,如果元素也有内边距 padding 和边框 border ,那么实际内容区域将会缩小,为它们腾出空间
在实际设计中,我们会发现,IE 盒模型更容易进行控制,我们一般先将整个容器的尺寸先确定,然后再填充具体的内容,通过 padding 来调整内容的具体位置,通过 margin 来调整容器与其他元素之间的间隙,无论如何调整,整个容器的结构是固定的,不会改变的;而在标准盒模型中,我们在调整 padding 和 margin 的同时,往往会将容器本身的结构打乱,需要重新设置内容 content 的尺寸
CSS 3 属性: box-sizing: border-box; 可以让元素按照 IE 盒模型进行解析,即设置的宽高包括了 border 以及 padding 的值
display 属性,元素的显示方式,规定元素应该生成的框的类型,这个属性用于定义建立布局时元素生成的显示框类型
注释 : inline-block 在 IE7 开始支持,在 IE6 下设置 _display:inline; 也可以实现相同效果,下划线 _ 是只针对 IE6 所设置的 CSS 样式,例: _width:100px;
我们来回顾下块元素和行元素的特点,块元素的特点: 竖直排列,可以设置宽高,宽度占满整行,即宽度 100%,另起新行 ;行元素的特点: 水平排列,设置宽高不生效,宽度由内容决定,高度由行高决定 ,这是我们之前已经了解过的,那么它们设置内外边距的特点又是什么呢?我们来尝试一下
由运行结果可以得知, 行元素在竖直方向上设置的 margin 不生效,水平方向上设置的 margin 叠加
由运行结果可以得知, 行元素在水平方向上设置的 padding 生效,竖直方向上的不生效 ,虽然元素的范围增大了,但是,由于行元素的高度是由内容决定的,所以加了上下 padding 以后会与临近行的元素产生干涉
所以,行元素建议尽量不要设置上下的内 / 外边距,即 padding-top , padding-bottom 和 margin-top , margin-bottom ,因为要么起不到效果,要么看起来有效实则容易引起布局混乱
由运行结果可以得知, 块元素在竖直方向上设置的 margin 以大的 margin 来计算 ,因为块元素宽度默认占满整行,设置内边距 padding 和水平方向上的外边距 margin 只会调整元素的位置,在这里就不再验证
行元素在竖直方向上设置的 margin / padding 不生效,水平生效
块元素在竖直方向上设置的 margin 会重叠,大的那个值生效
行元素在水平方向上设置的 margin / padding 不会重叠,水平相加
设置了 inline-block 属性之后,行元素就具有块元素的特点【可以设置宽高;竖直方向上的 padding/margin 生效】,块元素就可以水平排列
display:none; 和 visibility:hidden; 都能把网页上某个元素隐藏起来,但两者是有区别的:
display:none; 不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,不占据空间位置,完全消失
visibility:hidden; 使对象在网页上不可见,但该对象在网页上所占的空间没有改变,还占据原来的空间位置,可以理解为透明
让有宽度【非宽度100%】的 块元素水平居中 : margin:0 auto;
设置 单行文本的竖直居中 : line-height: 该元素高度;
行元素水平居中 :给行元素的父级添加 text-alingn:center;
text-align:center/left/right; 设置块元素中的内容文本、图片的对齐方式,只能设置在块元素,在行元素中设置无效
行文过程中出现错误或不妥之处在所难免,希望大家能够给予指正,以免误导更多人,最后,如果你觉得我的文章写的还不错,希望能够点一下 喜欢 和 关注 ,为了我能早日成为优秀作者献上一发助攻吧,谢谢!^ ^
盒模型有两种:
① 标准模式
② 怪异模式(quirks 模式)
---------------------------------------------分割线----------------------------------------------
在文件头使用!DOCTYPE HTML都会触发标准模式,如果DOCTYPE缺失则在ie6,ie7,ie8下将会触发怪异模式(quirks 模式)。也可以在css上加入box-sizing:content-box;
box-sizing:content-box---------标准盒模型
例:
.box {
width: 200px;
height: 200px;
border: 20px solid black;
padding: 50px;
margin: 50px;
}
盒子总宽度/高度=width/height+padding+border+margin
也就是说,如果你设定width为200px,那么文本(内容)所占的宽度就是200px。无论设置border,还是padding都会影响那个盒子的宽度,这样的话会影响其他的位置,一般用于大框架里的小东西。
---------------------------------------------分割线----------------------------------------------
box-sizing:border-box--------怪异盒模型
例:
.box {
width: 200px;
height: 200px;
border: 20px solid black;
padding: 50px;
margin: 50px;
box-sizing:border-box;
}
盒子总宽度/高度=width/height + margin = 内容区宽度/高度 + padding + border + margin;
可以说是,你设置width为200px时,那么盒子的宽度就是200px,无论设置border,还是padding都不会影响那个盒子的宽度。
在网页里设置那些大的框架会很好用。
内容 content :盒子的主要区域,盒子中的文本内容以及后代元素都显示在内容区域中。
内边距 padding :内容与盒子边界的距离。
边框 border :边框显示在盒子的边界上。
外边距 margin :盒子和相邻兄弟元素或父元素的距离。
盒子的大小=内容的大小+内边距的大小+边框的大小
元素默认 总宽度 = 父元素内容的宽度 - 元素自己的左右外边距
元素默认 内容宽度 = 父元素内容的宽度 - 元素自己的左右外边距 - 元素自己的左右边框宽度 - 元素自己的左右内边距