针对 CSS Reset 进行设计系统

什么是 CSS Reset

在前端开发中,有一个非常重要的概念叫做 CSS Reset。当我们开始编写页面时,由于不同的浏览器对 HTML 和 CSS 的默认渲染方式不同,往往会导致页面出现很多奇怪的差异,因此我们需要一些方法来消除这些差异,让页面在不同的浏览器中表现基本一致。CSS Reset 就是为了解决这个问题而出现的。

CSS Reset 的基本思路就是在页面渲染之前,清除掉浏览器默认的样式,然后再自行设置一些基本的样式。

CSS Reset 的问题

但是随着前端技术的发展,CSS Reset 也出现了一些问题。在使用 CSS Reset 时,我们常常会遇到以下问题:

过于极端

某些 Reset 方案会清除掉大部分的默认样式,导致页面完全没有样式,需要重新手动添加很多基本样式,冗余代码大大增加,反而不利于开发效率。

破坏样式继承关系

如果我们在某个组件中定义了一些样式,但是在 Reset 后,这些定义就失效了,导致组件样式不符合我们的预期。例如一些全站统一样式,在 Reset 后可能失效,这对于项目的一致性也会带来负面影响。

微生态

CSS Reset 通常是一个单独的文件或者一段代码,使用时往往需要进行一些修改,这样就会产生很多个性化的 Reset 方案,导致代码的“微生态”现象,不利于维护。

设计系统解决方案

针对 CSS Reset 所存在的问题,我们可以选择一种更好的方案:设计系统。设计系统是一种以用户为中心的设计方法,目的是提高设计的效率和一致性,并能够快速实现设计想法。

在设计系统的基础上,我们可以实现以下方案:

保留重要默认样式

在设计系统中,我们可以保留默认的样式,但是只保留一些比较重要的样式,例如表单样式、文本样式等等。这样可以保证页面在不同浏览器中的呈现效果比较一致,同时也可以避免一些不必要的冗余代码。

采用样式继承的方式

在设计系统中,我们可以将一些样式定义为组件的基本样式,然后在具体的组件样式中进行继承。这样可以避免样式丢失,同时也可以提高组件的复用性。

配置化

在设计系统中,我们可以使用配置化的方式来实现样式的定义和管理。这样可以避免微生态现象,提高代码的可维护性和可扩展性。

示例代码

下面是一个简单的设计系统示例代码:

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

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

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

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

可以看到,我们在样式中定义了一个 button 组件,以及两个不同的 button 变体,分别是 primary 和 secondary。我们使用了 normalize 的方式来重置了一些默认样式,然后在设计系统中定义了一些基本样式,以及不同变体的样式,并使用继承的方式来保证样式的正确继承和复用。

总结

CSS Reset 是解决前端开发问题的一种方便但是有缺点的方案,而通过设计系统,我们可以实现基于组件的灵活,可扩展和可维护的样式定义与调用,处理更好这些问题。设计系统相对于 Reset 方案在过程中需要时间、人力以及设计思想的提高,但作为最终可维护的系统解决方案而言,是值得花费精力去实现的。

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


猜你喜欢

  • PM2 如何实现应用的自动回退和重启

    前言 近年来,Node.js 成为了一个备受欢迎的开发语言,其在 Web 开发、命令行脚本等方面有着广泛应用。而在 Node.js 的应用部署方面,PM2 已成为了一个不可避免且优秀的选择。

    1 年前
  • Kubernetes 上部署 Elasticsearch 和 Kibana 的最佳实践

    在现代的应用程序开发中,Elasticsearch 和 Kibana 是非常重要的工具。它们可以帮助我们轻松地搜索、分析和可视化海量数据。然而,在实际情况中,要将 Elasticsearch 和 Ki...

    1 年前
  • 如何使用 ES6 的 Class 实现面向对象编程的小技巧

    随着前端技术的不断发展,JavaScript 的应用范围越来越广泛,前端面向对象编程也变得越来越重要。ES6 中的 Class 提供了一种更加优雅的方式来实现面向对象编程,本文将介绍如何使用 ES6 ...

    1 年前
  • PWA 应用中如何实现推荐引擎

    在以往的 Web 应用中,往往需要依赖服务器端的推荐系统来生成推荐列表,但是由于 PWA 应用在客户端上实现了 Cache 等近似于本地存储的功能,我们可以尝试将一部分推荐算法放到前端中进行实现,从而...

    1 年前
  • 在 Node.js 项目中使用 Enzyme 和 Chai 进行测试

    在 Node.js 项目中使用 Enzyme 和 Chai 进行测试 随着前端技术的日益发展,JavaScript 开发越来越需要一种高效的测试方案,以有效保障代码的质量和稳定性。

    1 年前
  • 解密 Angular HttpClient:使用 RxJS Operators 让数据处理更简单

    Angular HttpClient 是一个强大的 HTTP 客户端,它提供了许多功能,方便我们进行数据交互。但是,我们通常需要对返回的数据进行处理,以便从服务器获取正确的数据,并在前端进行展示和操作...

    1 年前
  • Cypress 自动化测试:如何处理进度条组件

    在前端开发过程中,我们经常需要测试网站的功能,而自动化测试是一种高效的测试方式。Cypress 是一个基于 JavaScript 的自动化测试工具,它可以帮助我们快速便捷地完成测试任务。

    1 年前
  • React Native 热更新技术实现

    React Native 是一款能够使用 JavaScript 构建原生移动应用的框架。与传统的原生开发相比,React Native 的优势在于开发成本低、开发效率高、跨平台兼容性强等。

    1 年前
  • Node.js 中一些常见的错误和解决方案

    Node.js 是一个非常流行的 JavaScript 运行时。它在前端和后端开发中都有广泛的应用。然而,Node.js 也存在一些常见的错误。本文将讨论一些常见的错误和它们的解决方案。

    1 年前
  • 解决 LESS 中使用自定义函数时出现调用时自动执行的问题

    在 LESS 中使用自定义函数可以极大地提高开发效率和代码可读性,但是有时候会出现调用时自动执行的问题,而不是按照我们想要的顺序执行。这个问题一般是因为函数和变量安装了相同的顺序处理导致的,但是解决起...

    1 年前
  • Mongoose 中的 Projection 方式实现字段选择

    在 Node.js 开发中,使用 MongoDB 数据库是很常见的,而且在 MongoDB 中,使用 Projection 可以只选择需要的字段,而不必选择整个文档,这样可以节省网络带宽,提高查询效率...

    1 年前
  • Vaadin Web Components - 开发更快,部署更快

    近年来,随着Web技术的日益成熟和前端框架的不断涌现,Web前端开发已经变得越来越复杂。针对这种情况,Vaadin推出了Web Components,用于简化前端开发过程,提高开发效率。

    1 年前
  • Socket.io 如何处理客户端并发连接问题

    在现代 web 应用程序中,经常需要实时通信。它可以是聊天室、多人游戏、股票报价或其他需要高实时性的场景。Socket.io 是一种流行的库,可用于实现此类应用程序。

    1 年前
  • Next.js 项目中使用 Clipboard.js 进行复制操作

    前言 在我们的开发项目中,经常会遇到需要复制某个文本或是代码的需求,但是 JavaScript 中并没有原生的复制文本功能,这时候就需要使用第三方工具库或是插件来实现该功能。

    1 年前
  • 深入理解 RESTful API 的 Hypermedia

    RESTful API 是一种常用的 Web API 设计理念,在前端开发中有很高的使用率。RESTful API 的核心原则是资源的表现层状态转换(Representational State Tr...

    1 年前
  • ECMAScript 2019:使用 new.target 在 ES6 构造函数中获得类的名称

    在 ES6 中,引入了类(class)这一新的语法特性,使得 JavaScript 可以更加方便地实现面向对象编程。而在 ES2019 中,又增加了一个新特性:new.target。

    1 年前
  • 响应式设计中常见的 Flex 布局实现方法

    1. 什么是 Flex 布局? Flex 布局是一种 CSS3 的新特性,它的全称是 Flexible Box Layout,意为“伸缩盒子布局”,是一种更加灵活、高效的布局方式。

    1 年前
  • # ES6 的运算符重载,如何让你的代码更加优雅可读

    ES6 的运算符重载,如何让你的代码更加优雅可读 在编程语言中,运算符是非常常见和重要的一种操作符号。在 ES6 中,我们可以通过运算符重载的方式来自定义某些运算符的行为。

    1 年前
  • 解决 Docker daemon 无法启动的问题

    Docker 是一个开源的容器化平台,能够帮助开发者快速构建、打包和部署应用程序。在使用 Docker 时,有时候会遭遇 Docker daemon 无法启动的问题,这往往会对我们的工作造成一定的影响...

    1 年前
  • squlize-cli migrate 使用遇到的坑

    引言 随着前后端分离的普及,前端领域的内容也越来越丰富。我们在使用 Sequelize-cli 做数据库迁移时,经常遇到一些坑。本文就聚焦于 Sequelize-cli migrate 的使用,分享一...

    1 年前

相关推荐

    暂无文章