你真的了解盒模型么

说到前端, 大家第一反应是不是都是vue、react、webpack等这些大大小小的框架或者工具, 但其实这些都是和js相关的, 真正的样式会被大家忽略。其实真正呈现给大家看到华丽的页面, 都是样式才让他们多了那份色彩。那么大家觉得简单的css样式, 真的简单么? 让我们一起来看下, 开启css的入坑之旅, 今天一起跟大家简单聊聊盒模型的相关问题......

盒模型

百度知道对此的解释, 很有意思, 在此引用一下

CSS盒子模型, 内容(CONTENT)就是盒子里装的东西; 而填充(PADDING)就是怕盒子里装的东西(贵重的)损坏而添加的泡沫或者其它抗震的辅料; 边框(BORDER)就是盒子本身了; 至于边界(MARGIN)则说明盒子摆放的时候的不能全部堆在一起,要留一定空隙保持通风,同时也为了方便取出。 —— 百度知道

这段描述很有趣, 很好的解释margin、border、padding之间的关系, 不同模式下, 盒模型的width也是不同的, 那么好, 盒模型的第一个坑来了, width的范围问题。

通常浏览器里, 盒模型的分为两种模式, 两种模式(怪异模式和标准模式)下width和height的值不同, 怪异模式的width和height包含border、padding和content, 而标准模式下的width和height只包含content, 这就是为啥有些浏览器渲染出来的dom标签排版会乱。解决也很简单, 在标签的上面, 加上doctype的设置就好了, 让浏览器统一用同一种标准去解析页面。 怪异模式(左图)和标准模式(右图)的如下:

当然, 还有用来改变盒模型width范围的一个css3的属性, box-sizing:

当设置为'border-box'时, width = border + padding + content;

当设置为'content-box'时, width = content。

  1.   <div class="wrapper z1"></div>

  2.   <div class="wrapper z2"></div>

   .wrapper{

  1.     width: 100px;

  2.     height: 50px;

  3.     padding: 10px;

  4.     background-color: #dedede;

   }

  1. .z1{

  2.     box-sizing: border-box;

  3. }

  4. .z2{

  5.     box-sizing: content-box;

     }

那么第一个div的实际宽度为100px, 第二个div的实际宽度为120px。

说完盒模型的padding和border, 那么再来吐槽下margin, 盒模型的margin的折叠(margin collapsing)问题, 有些也叫外边距合并。

通常我们说的折叠, 都是垂直方向上的折叠, 水平方向是不存在的。标准模式下, 上下两个兄弟的块级元素, margin是会重叠的, 并且以最大的那个间距为准(都为正数)。

比如下面这段代码:

   <div class="wrapper"></div>

   <div class="wrapper"></div>

   .wrapper{

  1.      width: 100px;

  2.      height: 50px;

  3.      margin: 10px;

  4.      background-color: #dedede;

  5.   }

上图灰色为重叠部分, 重叠10px的间距。

既然兄弟盒模型会有margin折叠, 那么父子呢? 答案是一定的, 父子也存在margin折叠的问题, 只不过条件稍微苛刻一点, 我们一起来看下。 父子组件的折叠触发, 要求不能有间隙, 就是父组件不能设置border或padding值, 不能有空余的内容, 且同时有margin值, 比如下面这段代码:

  1. <div class="outer">

  2.   <div class="inner"></div>

  3. </div>

   .outer{

  1.     width: 200px;

  2.     height: 100px;

  3.     margin: 10px;

  4.     background-color: #dedede;

   }

   .inner{

  1.      width: 100px;

  2.      height: 50px;

  3.      margin: 10px;

  4.      background-color: #bcbcbc;

   }

当然, 折叠后的空余部分, 也是取较大值, 且折叠触发, 只存在于垂直方向。

上图灰色为重叠部分, 重叠10px的间距。

刚才提到一个词"间隙", 如果有间隙的话是不会触发折叠的, 比如父级元素设置了padding, 或者子元素都设置了相对定位和top值等等。如下图:

看到这里, 我想有些同学会问了, 对于这些 margin collapsing, 有没有一个统一的整理, 对于大转转的FEer, 我们当然想到了大家的前面, 请看下面:

  • Margins between a floated box and any other box do not collapse (not even between a float and its in-flow children).

  • Margins of elements that establish new block formatting contexts (such as floats and elements with 'overflow' other than 'visible') do not collapse with their in-flow children.

  • Margins of absolutely positioned boxes do not collapse (not even with their in-flow children).

  • Margins of inline-block boxes do not collapse (not even with their in-flow children).

  • The bottom margin of an in-flow block-level element always collapses with the top margin of its next in-flow block-level sibling, unless that sibling has clearance.

  • The top margin of an in-flow block element collapses with its first in-flow block-level child's top margin if the element has no top border, no top padding, and the child has no clearance.

  • The bottom margin of an in-flow block box with a 'height' of 'auto' and a 'min-height' of zero collapses with its last in-flow block-level child's bottom margin if the box has no bottom padding and no bottom border and the child's bottom margin does not collapse with a top margin that has clearance.

  • A box's own margins collapse if the 'min-height' property is zero, and it has neither top or bottom borders nor top or bottom padding, and it has a 'height' of either 0 or 'auto', and it does not contain a line box, and all of its in-flow children's margins (if any) collapse.

这是从W3C里引用的原文, 这8条规则是特殊的不折叠的情况, 简单翻译过来(仅供参考):

  • 浮动的盒模型不会margin折叠

  • 创建BFC与子不折叠

  • 设置定位的盒模型不会折叠

  • 行内块级元素的盒模型不折叠

  • 兄弟元素有间隙不折叠

  • 父子盒模型元素, 孩子元素有border、padding、有浮动就不折叠

  • height为auto、min-height为0的块级盒模型, 和它的最后一个没有border和padding的孩子盒模型底边距折叠, 且孩子的底部外边距和被清除浮动上边距有间隙不折叠。

  • 如果min-height为0, 上下border、上下padding都为0, height为0或auto, 且没有行内盒模型, 他的孩子节点都会折叠

有点晦涩难懂, 大家不妨消化一下。说到这, 再补充一下, 盒模型margin折叠的计算问题, 总结了以下几点:

  • 同为正值时, 取较大者为两者为间距

  • 一正一负时, 正负相加为间距, 若结果为负值, 则两者部分重合

  • 都为负值时, 两者重合, 且重合部分为绝对值大者

举个例子:

  1.    <div class="wrapper z-01"></div>

  2.    <div class="wrapper z-02"></div>

  1.    .wrapper{

  2.        width: 100px;

  3.        height: 50px;

  4.        background-color: #dedede;

  5.    }

  6.    .z-01{

  7.        margin: -10px;

  8.    }

  9.    .z-02{

  10.        margin: -15px;

  11.    }

两者都为负值, 两个div上下重合, 且重合间距为15px。

暂时就想到这么多, css的学习之路任重而道远, 盒模型又是重中之重。上面有描述不对的地方也欢迎各位同学批评指正, 也欢迎大家来到大转转FE做客, 一起讨论一起研究前端的技术问题。志同道合的同学, 也欢迎加入我们转转FE团队, 咱们一起打拼。

转载于:https://www.cnblogs.com/zhuanzhuanfe/p/9101936.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ios10前台收到推送_iOS 13 beta 2 推送 | iOS 13 热门疑问解答

朋友们周二早&#xff0c;今天这期分享主要是给大家解答几个 iOS 13 相关的热门问题。今天的头条推送的是 HFP 的面膜&#xff0c;靠谱产品&#xff0c;有需求的朋友可以去他们的天猫旗舰店或者小程序商场看下。是否可以直接升级 &#xff1f;今天苹果正式推送了 iOS 13 beta 2…

认知科学顶刊:挑战过去50年神经科学观点,人类智力的优势或来自于记忆储存方式...

来源&#xff1a;brainnews莱斯特大学的神经科学专家发表了一篇文章&#xff0c;打破了过去50年神经科学的观点&#xff0c;认为人类储存记忆的方式是其智力优于动物的关键因素。该文章发表在Trends in Cognitive Sciences杂志。先前的研究认为&#xff0c;海马体&#xff08;大…

专业文化计算机艺考生,专业课和文化课都优秀?那艺考生的你不知道这个就损失大了...

原标题&#xff1a;专业课和文化课都优秀&#xff1f;那艺考生的你不知道这个就损失大了高水平艺术团招生作为高考特殊类型招生中的一种&#xff0c;很多人一直把它和艺术类招生傻傻分不清楚。简单来说&#xff0c;高水平艺术团招生和艺术类招生是两种不同的招生类别。详细说&a…

linux发送邮件的功能总结

使用linux系统服务器发送邮件的功能在平时工作中也是经常需要用到的&#xff0c;在这里总结一下&#xff0c;供以后参考&#xff1a; 1、直接使用管道发送邮件 echo "hello,this is the content of mail.welcome to www.mzone.cc" | mail -s "Hello from mzone.…

雷赛运动控制卡能不能用c语言_基于PMAC控制卡的三坐标测量机控制系统

三坐标测量机控制原理三坐标测量机获取测头触碰点相对于系统原点的三坐标值&#xff0c;然后经特定算法处理&#xff0c;得到尺寸公差或形位公差。测头在X、Y&#xff0c;Z三个相互垂直的导轨上进行复合运动&#xff0c;实现逐点测量&#xff1b;或按一定运动轨迹&#xff0c;实…

计算机综合应用实验,计算机综合应用实验二WORD应用.doc

文档介绍&#xff1a;第二章 WORD 应用设置文档打印为“横向”文档的“纵向”和“横向”可以满足不通纸张, 和不同用户的不同需求。在打印时可以根据情况进行调整选择, 方法如下: 点击菜单“文件”→“页面设置”命令, 在页边距选项卡中的“方向”选择“横向”,如图: 如何将网页…

如何结合因果与强化学习?看最新《因果强化学习:动机,概念,挑战与应用》报告,85页ppt...

来源&#xff1a;专知强化学习(RL)[17]和因果推理[10]都是机器学习不可缺少的组成部分&#xff0c;在人工智能中都发挥着至关重要的作用。最初促使我整合这两者的是机器学习在医疗保健和医学领域的最新发展。回顾过去&#xff0c;人类自出生以来就不可避免地伴随着疾病&#xf…

Leetcode--75. 颜色分类

给定一个包含红色、白色和蓝色&#xff0c;一共 n 个元素的数组&#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 此题中&#xff0c;我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码…

boot druid 长时间不连接 异常_Spring Boot学习:如何使用Druid数据源

Druid概述Druid是阿里巴巴开源的一款非常优秀的数据库连接池。在Java应用程序开发中&#xff0c;常用的连接池还有DBCP、C3P0、Proxool等。SpringBoot2.X 版本开始默认的是HikariCP(号称性能最好的数据库连接池),Druid性能好而且监控也比较方便。刚兴趣的同学可以读一下,GitHub…

演讲实录丨中科大陈小平教授《从封闭性到非封闭性:2020到2035年智能机器的机遇和挑战》...

来源&#xff1a;中国人工智能学会陈小平中国科学技术大学机器人实验室主任、教授以下是陈小平教授的演讲实录&#xff1a;非常高兴有这个机会进行中、新学术交流。本报告包括四方面内容。第一&#xff0c;关于人工智能&#xff08;简称AI&#xff09;的两种类型&#xff0c;一…

充电电流用软件测试准吗,实验:1A与2.1A对手机充电电流一样的,小伙伴再也不用担心咯...

新福克斯舒适&#xff0c;USB在手套箱(不方便啊&#xff0c;郁闷)&#xff0c;插U盘放MP3&#xff0c;一个行车记录仪&#xff0c;插在点烟器里&#xff0c;平时没事也够用&#xff0c;要跑一次长途&#xff0c;用iPhone 5C高德导航&#xff0c;靠&#xff0c;问题来&#…

关于线性代数的理解

自从大学学了线性代数以来, 对线性代数的概念一直很迷惑. 感觉中间像是隔了一层布一样, 怎么都理解不了线性代数是个什么东西. 读了人工智能以后, 发现没有线性代数的扎实基础根本学不了人工智能, 特别是在图像处理还是自然语言处理的过程中, 线性代数是 一个非常重要的基础, 可…

Leetcode--31. 下一个排列

实现获取下一个排列的函数&#xff0c;算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列&#xff0c;则将数字重新排列成最小的排列&#xff08;即升序排列&#xff09;。 必须原地修改&#xff0c;只允许使用额外常数空间。 以下是…

python 结尾回车_理解不了Python正则表达式?我帮你搞定

点击蓝字“python教程”关注我们哟&#xff01;在学习Python的过程中&#xff0c;我们难免会遇到比较晦涩、难以理解的内容&#xff0c;比如Python中的正则表达式、面向对象等内容&#xff0c;为了更好地帮助大家理解&#xff0c;我们今天就先为大家详细解读Python正则表达式&a…

怎么设置班级文件服务器,如何开设论坛如题下学期老师组织学生开一个班级论坛有专用服务器接下 爱问知识人...

很多朋友都希望有一个自己的论坛&#xff0c;但是做论坛又谈何容易&#xff1f;这个问题很大&#xff0c;如果自己编程开发的话&#xff0c;至少需要半个月不睡觉甚至好几个月、好几年的时间。一个好的论坛&#xff0c;便于网友浏览、占用服务器资源少、运行速度快是最重要的。…

陈左宁院士:人工智能模型和算法的七大发展趋势

来源&#xff1a;C114通信网、北京物联网智能技术应用协会在近日举行的“第十六届CCF全过高性能计算学术年会”上&#xff0c;中国工程院副院长、中国科协副主席、中国工程院院士陈左宁发表了题为《人工智能进展对算力需求分析》的演讲。在演讲中&#xff0c;她阐述了人工智能模…

ABAP术语-World Wide Web

World Wide Web原文&#xff1a;http://www.cnblogs.com/qiangsheng/archive/2008/03/21/1115728.htmlInternet service. The World Wide Web generates documents and presents them to Internet users in a standard format known as HTML. These documents can be linked to…

Leetcode--169. 求众数

给定一个大小为 n 的数组&#xff0c;找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在众数。 示例 1: 输入: [3,2,3] 输出: 3 示例 2: 输入: [2,2,1,1,1,2,2] 输出: 2 排序之后遍历一次即可 …

模板引擎工作原理_广州seo了解下搜索引擎的工作原理是什么

一、搜索引擎工作的基本原理搜索引擎是根据以下原则计算的&#xff1a;首先&#xff0c;我们知道在web浏览器、百度浏览器、google浏览器、360浏览器中都配置了不同的搜索引擎。它们都有一个共同点&#xff0c;一开始捕获一个模块&#xff0c;然后这个模块就像一个软件程序一样…

浪潮服务器无线网卡驱动,浪潮服务器网卡驱动安装.doc

文档介绍&#xff1a;蚃服务器安装redhat5.2系统无法识别网卡的情况下肂罿进入linux命令终端界面,使用命令袄蒂[******wapdbrac1~]#kudzu--probe--work膂莀界面上就会显示网卡的型号以及机器上都有几个网卡薆蒅第一步:在网上下载这个网卡型号的linux版本驱动程序节薇第二步:使用…