浏览器默认样式整理

在css属性计算过程中,环节之一,是从浏览器默认样式表中取值,如果对css属性计算过程不太熟悉,推荐这篇文章《CSS 属性计算过程》

由此可见,浏览器默认样式对网页布局的影响是巨大的,如果没有这些默认样式,网页中各种盒子的排列将会乱成一团!

所以,本文帮助梳理了一下各大浏览器的默认样式,相信大家在看完后,对css布局和浏览器兼容性会有更深刻的理解。

让我们先来看看有哪些主流浏览器,以及这些主流浏览器对应的引擎是什么:

  1. Google Chrome(谷歌浏览器):Blink引擎
  2. Mozilla Firefox(火狐浏览器):Gecko引擎
  3. Apple Safari:WebKit引擎
  4. Opera:Blink引擎
  5. Microsoft Edge:EdgeHTML引擎

想必大家对这些浏览器应该都不陌生,这里就只介绍一下Microsoft Edge浏览器 吧,它是微软公司开发的Web浏览器,是IE浏览器的继承者

而说起IE浏览器,它在市场领域一直备受争议

它曾经是全球市场份额最大 的浏览器,也曾经被指控滥用微软公司在操作系统市场上的垄断地位,以压制其他浏览器的发展,导致了微软公司在欧盟和美国等地被罚款。

后来,随着其他浏览器的崛起,IE浏览器的市场份额逐渐下降,微软公司也放弃IE浏览器的开发,转而推出新的浏览器Edge。

现今,除了企业和政府等领域,基本用不到IE浏览器了

IE浏览器的衰败跟它的一些特性是分不开的,比如下面的这几点:

  • 兼容性:IE浏览器存在很多兼容性问题,而其他浏览器则更加符合Web标准,因此在兼容性方面更加优秀
  • 速度:IE浏览器速度较慢,而其他浏览器则采用了更加先进的技术和算法,速度更快
  • 安全性:IE浏览器存在很多安全漏洞,而其他浏览器则更加注重安全性,采用了更加严格的安全策略和机制
  • 用户体验:其他浏览器在用户体验方面更加注重细节和用户需求,提供了更加丰富的功能和扩展,而IE浏览器则相对较为简单
  • 开发者支持:其他浏览器提供了更加完善的开发者支持,包括更好的调试工具、更丰富的API和更好的文档,方便开发者进行开发和调试

而更新迭代后的Edge浏览器,采用全新的EdgeHTML内核几乎抛弃了所有IE特性 ,它的技术架构和开发标准也尽量与火狐、谷歌等主流浏览器保持一致

在简单的了解了五款主流的浏览器之后,再来看一下它们使用的四种引擎,它们分别是Blink引擎Gecko引擎WebKit引擎EdgeHTML引擎

以下是它们的源码的默认样式地址:

需要说明一下的是,EdgeHTML引擎原本是在微软的GitHub上托管,但自2020年3月起,微软停止了对EdgeHTML的更新和维护,因此,目前EdgeHTML引擎源码已不再公开发布。

然后,重点来看一下这些默认样式的内容,它们是啥样的呢?

通过观察,我们可以看到,所有引擎的默认样式代码中,较大篇幅都是对各种html元素的display属性的重新赋值

我猜测,这种共性的形成,起源可能是html5提出的新规范:HTML只规定元素的语义,而元素的样式部分,包括它是属于块级元素或者行内元素等,统一交给css处理

也就是说,在html5以前,每个html元素是块级元素还是行级元素都是规定好的 ,这是能找到的关于html4的默认样式文档(现在已作废了):www.w3.org/TR/CSS21/sa...

所以,在html5规范出来后,元素的样式定义,由原来的html自带的规范,变成了由浏览器的默认样式提供

严格意义上来说,现在不能再用"块级元素"、"行级元素"去称呼html元素了 ,因为本质上,元素没有块级和行级的区别了,只有css的display属性值的不同

所以,现在可以这样问,某个元素,它的盒模型(属于css部分),是块盒、行盒,还是行块盒呢?

最后,我还想说明的是,不同浏览器的默认样式之间,它们也是有差异的。

因为可想而知,虽然浏览器们经过长时间的发展,都会向着web规范靠拢,导致越来越兼容,但是不管如何,毕竟也还会有差异。

如果我们希望自己的网页能在所有的浏览器保持一模一样,则可以通过CSS重置 进行处理,一些流行的CSS重置库包括reset.cssNormalize.css

总结

浏览器们会针对某些css属性,重新定义了它们的默认值,这样的css属性主要是display,当然也包含其它的。

经过长期发展,特别是在html5规范出现后,浏览器默认样式的规范偏向统一,但目前在细节上还有较大差异性。

相关推荐
儒雅的烤地瓜11 分钟前
CSS | 如何来避免 FOUC(无样式内容闪烁)现象的发生?
css·fouc·无样式内容闪烁问题·css预加载
yery25 分钟前
Ubuntu24.04中安装Electron
前端·javascript·electron
小夏同学呀30 分钟前
使用elementplus中的分页器,后端一次性返100条数据,前端自己做分页处理,vue3写法
前端·javascript·vue.js
Mr.Lee082132 分钟前
electron-vite使用vue-i18n,ts 检查报错上不存在属性“$t”
前端·javascript·vue.js·typescript·electron
你的Maya1 小时前
使用 Vite 打包工具库并使用 GitHub Actions 自动化发布npm流程
前端·npm·github
zzzzzzzziu1 小时前
vue3基础
前端·javascript·vue.js
Jasonakeke1 小时前
【JavaWeb】二、HTML 入门
前端·html
2301_796143792 小时前
Vue的指令v-model的原理
前端·javascript·vue.js
anyup_前端梦工厂2 小时前
探索 Web Speech API:实现浏览器语音识别与合成
前端·javascript·html
xgq2 小时前
Wake Lock API:保持设备唤醒的利器
前端·javascript·面试