重新认识 CSS Reset 与 CSS Normalize 的差异

在前端开发中,我们常常使用 CSS Reset 或 CSS Normalize 来消除浏览器默认样式,保证页面元素在不同浏览器中呈现一致的效果。但是,对于这两种方案的差异,我们是否真的理解得很清楚呢?

CSS Reset 与 CSS Normalize 的区别

CSS Reset

CSS Reset 的思想是将所有元素的样式重置为相同的基础样式,以消除浏览器默认样式的影响。CSS Reset 通常包含大量的样式重置和基础样式定义,但是却没有针对各个元素的个性化样式。

例如,下面是一段常见的 CSS Reset:

----- ---- --- --- --- --- --- --- --- --- --- --- --- --- ---- -----
--------- ------ --------- -- ----------- --- -- -
  ------- --
  -------- --
-

此时,所有元素的 margin 和 padding 值都被设置为 0,这将导致许多 HTML 元素的样式被大幅更改。由于 CSS Reset 并没有预定义任何元素的具体样式,开发者需要自行添加样式,以满足项目需求。

CSS Normalize

CSS Normalize 的思想则是让浏览器默认样式保留,但是使用通用的样式,来确保在各个浏览器和操作系统下,元素呈现的一致性。

CSS Normalize 对默认样式进行了优化和修正,例如,将所有元素的字体大小设置为 100%,更正了表单元素的字体大小和行高,修复了某些浏览器的 BUG 等等。同时,CSS Normalize 也为各个元素定义了一些通用的样式,如字体颜色、背景颜色、对齐方式等等。

例如,下面是一段常见的 CSS Normalize:

---- -
  ---------- -----
  ------------ ----
  ------------------------- -----
  --------------------- -----
  ---------------------------- ------------
-

---- -
  ------- --
-

--------
------
--------
-----------
-------
-------
-------
-----
-----
----
--------
------- -
  -------- ------
-

------
-------
---------
----- -
  -------- -------------
  --------------- ---------
-

---------
-------- -
  -------- -----
-

此时,所有元素都保留了浏览器默认样式,但是使用了一组统一的基础样式,确保元素在各个浏览器中显示的一致性。

如何选择?

CSS Reset 和 CSS Normalize 在功能上存在差异,但是实际的开发中,两者的使用效果是类似的。因此,选择哪种方案,需要根据项目需求来进行权衡。

如果开发者希望对所有元素的样式有着更细致的控制,那么使用 CSS Reset 是一个更好的选择。在此基础上,开发者可以逐步添加个性化的样式,根据项目需求进行自定义。

如果开发者更加注重页面在各个浏览器和操作系统下的兼容性,那么使用 CSS Normalize 是一个更好的选择。它保留了浏览器默认样式,同时使用通用的基础样式,确保元素在不同浏览器下呈现一致。

总结

CSS Reset 和 CSS Normalize 都是非常有用的前端工具,能够消除浏览器默认样式的影响,统一页面元素的样式,提高项目开发的效率。开发者应该根据项目需求,选择适合自己的方案,同时在开发过程中,逐步优化和自定义样式,以确保更好的用户体验。

示例代码

CSS Reset

-- --------- --

----- --- --- --- --- --- --- -- ----------- ----
--- --- --- --- ------- --- --------- ------ -
  ------- --
  -------- --
-

--- --- --- --- --- -- -
  ---------- -----
  ------------ -------
-

-- -
  ----------- -----
-

------- ------ ------- -------- -
  ------- --
-

---- -
  ----------- -----------
-

-- --------- ------- -
  ----------- --------
-

CSS Normalize

-- ------------- --

---- -
  ------------ -----
  ------------------------- -----
-

---- -
  ------- --
-

- -
  ----------------- ------------
  ---------------- -----
-

------------
------------------------- -
  ---------------- ----------
  ---------------- --------- -------
  ------- -----
  -------------- --
  ------------------------- -----
-

--
------ -
  ------------ -------
-

-----
----
-----
--- -
  ------------ ---------- ----------
  ---------- ----
-

----- -
  ---------- ----
-

----
--- -
  --------- ---------
  ---------- ----
  ------------ --
  --------------- ---------
-

--- -
  ------- --------
-

--- -
  ---- -------
-

--- -
  ------------- -----
-

-------
------
---------
-------
-------- -
  ------------ --------
  ---------- -----
  ------------ -----
  ------- --
  --------------- -----
-

-------
----- -
  --------- --------
-

-------
------ -
  --------------- -----
-

------ -
  ---------- -------
-

-------
----------------
---------------
--------------- -
  ------------------- -------
-

----------------------
-------------------------------
------------------------------
------------------------------ -
  ------- --------
-

------------------ -
  ------------- -----
  -------- --
-

--------------- -
  -------- --- ------ -----------
-

---------------- -
  ----------- -----
-

------ -
  ------ --------
  -------- ------
  ---------- -----
  ------------ -------
-

-------- -
  --------------- ---------
-

----------------------------
--------------------------- -
  ------- -----
-

--------------- -
  ------------------- ----------
  --------------- -----
-

--------------------------- -
  ------------------- -----
-

---------------------------- -
  ------------------- -------
  ----- --------
-

------- -
  -------- ------
-

------- -
  -------- ----------
-

-------- -
  -------- -----
-

-------- -
  -------- -----
-

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64d38842b5eee0b525b2bc22


猜你喜欢

  • ES7 中的 Array.prototype.reduce() 方法详解与使用示例

    在 ES7 中,Array.prototype.reduce() 方法得到了增强。这个方法可以帮助我们更加方便快捷地处理数组数据。这篇文章将带你深入了解 reduce() 方法的使用方法和应用场景,并...

    1 年前
  • Kubernetes 部署 Kafka 的方法与优化

    随着云原生时代的到来,Kubernetes 成为了最受欢迎的容器编排工具之一。在 K8S 中,我们可以使用 Kafka 来构建可扩展、高可靠性的消息系统。本文将详细介绍 Kubernetes 部署 K...

    1 年前
  • TypeScript:如何防范类中 private 变量被继承的问题?

    TypeScript:如何防范类中 private 变量被继承的问题? 在面向对象编程中,类的继承是一种非常常见且有用的机制。然而,继承也会带来一些问题,例如类中 private 变量可能被继承子类直...

    1 年前
  • SPA 应用缓存及离线化解决方案探究

    前言 伴随着互联网的高速发展,应用越来越多,应用的体量也越来越大,用户对应用的响应速度和稳定性的要求也越来越高。而单页应用(SPA)应运而生,它具有极佳的用户体验与响应速度,在前端领域中也越来越受到重...

    1 年前
  • 用 ES12 中的 Array.prototype.at 方法访问数组元素,不用再处理数组越界问题!

    JavaScript 中的数组是一种非常强大的数据结构,用来存储一组有序的值。在访问数组元素时,我们常常需要考虑越界问题,以避免引发程序错误。不过,从 ECMAScript 2021 开始,JavaS...

    1 年前
  • SSE 与 CORS 请求的实现方式

    在 Web 开发中,服务器与客户端之间的交互变得越来越重要。服务端推送技术和跨域资源共享(CORS)是一些传输数据的方式,向开发人员提供了更多的选择来实现这种交互。

    1 年前
  • PWA 的核心知识点:Service Worker 详解

    前言 在当前 Web 应用快速发展的背景下,PWA(Progressive Web App,即渐进式 Web 应用)逐渐成为了移动 Web 开发领域中的热门话题。而 Service Worker 则是...

    1 年前
  • 使用 Fastify 构建高并发 Node.js Web 应用程序

    Fastify 是一个快速,低开销且提供了简单 API 的 Node.js Web 框架。它可用于构建高性能的 Web 应用程序,并支持高并发。本文将介绍如何使用 Fastify 构建高并发的 Nod...

    1 年前
  • Mocha 测试 Webpack 打包后的代码

    在现代的前端开发中,打包工具已经成为了重要的一环。其中,Webpack 是目前最为流行和实用的打包工具之一。但是,在打包后的代码中,我们需要进行一些测试,以确保代码的质量和正确性。

    1 年前
  • Cypress 自动化测试实战:实现 A/B 测试

    在前端开发中,我们经常需要对不同版本的页面进行 A/B 测试来决定用户体验和页面效果的最终选择。而为了保证测试的准确性和效率,我们需要进行自动化测试。本文将介绍如何使用 Cypress 实现 A/B ...

    1 年前
  • Serverless 架构的弹性伸缩与 SLA 保障

    前言 近年来,Serverless 架构已经逐渐成为了前端开发领域的一种热门技术。与传统架构相比,Serverless 架构具有很多优势,例如更快的响应速度、更低的运维成本、更高的可扩展性和更好的 S...

    1 年前
  • 如何使用 GraphQL 实现 Webhook?

    简介 一个 Webhook 是一种让用户持续接受服务器端事件的方式,允许用户将一个 URL 注册到任何对应事件的监听器中。当事件触发时,服务器会将信息 POST 到 URL。

    1 年前
  • Redux 实现 WebSocket 的实践指南

    本文将介绍如何使用 Redux 和 WebSocket 实现前端实时通讯,并提供相关的代码示例。通过本文的学习,你将深入了解 Redux 和 WebSocket 的工作原理,以及如何在实际项目中应用。

    1 年前
  • CSS Flexbox 布局中 order 详解

    CSS Flexbox 布局已经成为了现代 web 开发的常用技术之一,它可以简化前端布局的实现,使得我们可以更轻松地创建复杂的布局。而其中的 order 属性则是实现 Flexbox 布局重要的一部...

    1 年前
  • ES7 中的 Math 对象新增的一些方法及其使用示例

    在 ES7 中,Math 对象新增了一些方法,这些方法可以帮助我们更方便地进行数学计算。本文将详细介绍这些方法及其使用示例。 Math.trunc() Math.trunc() 方法返回一个数字的整数...

    1 年前
  • ECMAScript 2018 中的 Proxy 的实现及应用

    ECMAScript 2018 中的 Proxy 的实现及应用 在 ECMAScript 2018 中,Proxy 是一个非常强大的对象,它允许我们对对象的默认行为进行自定义。

    1 年前
  • RESTful API 与 GraphQL 的比较和选择方法

    在传统的前后端应用架构中,前端通过向服务器发送请求并接收响应来获取数据。而随着互联网的不断发展和前端技术的迅速发展,RESTful API 和 GraphQL 成为了两个主流的前端数据获取方式。

    1 年前
  • 使用 TypeScript 来检测 React 中的 ESLint 错误

    在前端开发中,使用 TypeScript 和 ESLint 已经成为了必备技能。尤其在开发 React 应用时,这两个工具经常会被同时使用。在项目中,我们经常会碰到一些 ESLint 的错误,如未定义...

    1 年前
  • 基于 Webpack 的 Vue2.x 前端工程化实践总结

    前言 在现代 Web 开发中,前端工程化已成为必不可少的一环。而 Webpack 作为目前最流行的前端打包工具之一,其在 Vue 2.x 工程化实践中也有着广泛的应用。

    1 年前
  • 如何在 React Native 中使用 Babel 集成深度链接捆绑

    随着移动互联网的迅猛发展,深度链接在移动应用开发中变得越来越重要。深度链接可以将用户引导到特定的页面,提升用户体验和转换率。而在 React Native 中使用深度链接,可以帮助我们更好地引导用户,...

    1 年前

相关推荐

    暂无文章