标准盒模型和怪异盒模型

简介: 盒子模型众所周知,这里先简单介绍一下。可以看到,在标准盒模型下,width和height是内容区域即content的width和height。而盒子总宽度为在标准模式下,一个块的总宽度= width + margin(左右) + padding(左右) + border(左右)而IE盒模型或怪异盒模型显而易见的区别就是,width和height除了content区域外,还包含padding和border。

盒子模型众所周知,这里先简单介绍一下。

可以看到,在标准盒模型下,width和height是内容区域即content的width和height。而盒子总宽度为

在标准模式下,一个块的总宽度= width + margin(左右) + padding(左右) + border(左右)

而IE盒模型或怪异盒模型显而易见的区别就是,width和height除了content区域外,还包含padding和border。盒子的总宽度为

一个块的总宽度= width + margin(左右)(即width已经包含了padding和border值)

 

当然这些大伙应该都知道,关键的是如何运用选择哪种盒模型

首先,如何运用?

只要在文档首部加了doctype申明,即使用了标准盒模型,而不加,则会由浏览器自己决定,比如,ie 浏览器中显示“ie盒子模型”,在 ff 浏览器中显示“标准 w3c 盒子模型”。

然后,选择哪种?

按理说,我们应该遵循w3c标准使用标准盒模型,但我发现很多ui框架使用的都是怪异盒模型,比如ionic,vux,和bootstrap,为什么呢?我思考了很长时间。

不知道大家有没有遇到过这种情况,本来我画了两个div,他们在flex布局下分别占50%的宽度,很简单,我们width设置为50%即可,当我们画完了,很满意的看了看页。

代码:

* {
margin: 0;
padding: 0;
box-sizing: content-box;
}
<div style="display: flex;">
<div style="width: 50%;background-color: blue;color: white;">我是左边</div>
<div style="width: 50%;background-color: red;color: white">我是右边</div>
</div>

效果:

 

这时候,一个需求来了,左边的部分要加上边框,你一想,这不简单么,立马给左边加上了一个边框。但,意外出现了,左边和右边的不相等了。因为左边加上了边框,所以宽度溢出了,这时候右边就会压缩自己,这样就导致两边不一致了

代码:

<div style="display: flex;box-sizing: content-box">
<div style="width: 50%;background-color: blue;color: white;border: 5px solid black">我是左边</div>
<div style="width: 50%;background-color: red;color: white">我是右边</div>
</div>

效果:

啊,崩溃,又得调半天,关键还不好调。因为border必须为数值,而其他的为百分比,这样就很难知道左右该设多少比例,才能让左右两边完全一致了。

而用怪异盒模型,这样的问题就迎刃而解。

代码:

* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
<div style="display: flex;">
<div style="width: 50%;background-color: blue;color: white;border: 5px solid black">我是左边</div>
<div style="width: 50%;background-color: red;color: white">我是右边</div>
</div>

 

 这样不管你边框是多宽,左右都是始终相等的。

然后,再请大家想一想,移动端都是需要自适应布局的,需要用到大量的百分数,这时候再用标准盒模型,边框进来插一脚无疑会让情况变得很复杂,对自适应布局很不友好,这大概就是很多框架都采用怪异盒子模型的原因吧。

 以上纯属个人观点,不对的地方,请大家指教。

 

相关文章
|
小程序
内网环境中ruoyi若依实现微信小程序授权登录解决办法
内网环境中ruoyi若依实现微信小程序授权登录解决办法
1259 0
|
关系型数据库 MySQL Shell
Docker从入门到精通——MySQL数据持久化
Docker从入门到精通——MySQL数据持久化
1121 0
|
JSON Java API
玩转Spring Boot之RestTemplate的使用
在java代码里想要进行restful web client服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。Spring Boot提供了一种简单便捷的内置模板类来进行操作,这就是RestTemplate。
6625 0
|
Windows
gitlab 账号注册及修改资料
填写注册信息 点击注册链接奇迹 GitLab后,可以看到以下界面,输入用户名、邮箱等信息,点击 SIGN UP 进行注册: 确认邮件 注册后邮箱会收到一封确认邮件,如果没有收到邮件,可能是被误判为垃圾邮件,请进入邮箱的垃圾箱进行查找。
11948 0
超好看的404提示页面HTML源码
超好看的404提示页面HTML源码
732 77
|
SQL 安全 测试技术
Flask表单处理的奥秘:如何让你的用户输入验证飞起来?
【8月更文挑战第31天】在Web开发中,使用Flask框架进行表单处理和用户输入验证至关重要。本文详细介绍了Flask表单处理的步骤,包括创建、渲染、处理及验证表单数据,并提供了示例代码展示如何利用`Flask-WTF`扩展实现安全的用户输入验证。通过遵循最佳实践,如使用Flask-WTF、编写测试和采取安全措施,开发者能更高效地完成表单处理任务,提升Web应用的稳定性和安全性。
258 0
|
XML Java 数据格式
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
这篇文章是Spring5框架的AOP切面编程教程,通过XML配置方式,详细讲解了如何创建被增强类和增强类,如何在Spring配置文件中定义切入点和切面,以及如何将增强逻辑应用到具体方法上。文章通过具体的代码示例和测试结果,展示了使用XML配置实现AOP的过程,并强调了虽然注解开发更为便捷,但掌握XML配置也是非常重要的。
Spring5入门到实战------11、使用XML方式实现AOP切面编程。具体代码+讲解
|
人工智能 Cloud Native 数据管理
数据+AI融合趋势洞察暨阿里云OpenLake解决方案发布
Forrester是全球领先的市场研究与咨询机构,专注于新兴技术在各领域的应用。本文探讨如何加速现代数据管理,推动人工智能与客户业务的融合创新。面对数据标准缺乏、多云环境复杂性、新兴业务场景及过多数据平台等挑战,Forrester提出构建AI就绪的数据管理基石,通过互联智能框架、全局数据管理和DataOps、端到端数据管理能力、AI赋能的数据管理以及用例驱动的策略,帮助企业实现数据和AI的深度融合,提升业务价值并降低管理成本。
|
消息中间件 Kafka 数据库
【后端面经】【消息队列】22 | 消息队列:消息队列可以用来解决什么问题?-02 超时场景+性能问题
【5月更文挑战第7天】 本文介绍了电商中订单超时取消的处理方法,通过使用消息队列实现延时消息。当订单30分钟后未支付,消息队列将触发取消操作,但需注意并发问题,如采用分布式锁或乐观锁避免并发更新订单状态。乐观锁确保只有订单状态为未支付时才允许支付。主流消息队列如RocketMQ支持延迟消息,而Kafka不支持。 使用消息队列的好处在于解耦和提高系统性能、扩展性和可用性。同步调用会导致性能下降,因为必须等待所有调用完成。并发调用虽可提升性能,但仍逊于消息队列,且无法解决扩展性和可用性问题。
463 1
|
安全
Mac 使用 rar 命令行工具解压和压缩文件
Mac 使用 rar 命令行工具解压和压缩文件
1382 1