写点什么

避坑指南:如何在基于组件的应用中使用 CSS 架构

  • 2020-01-12
  • 本文字数:1233 字

    阅读完需:约 4 分钟

避坑指南:如何在基于组件的应用中使用CSS架构

CSS 架构是一个常被开发人员忽视的复杂问题。为简化开发人员的工作,可对每个组件封装(Encapsulate)CSS,由此避免许多 CSS 相关的坑,但这种“变通”做法是以降低可重用性和可扩展性为代价的。


一旦开发人员定义了一个 CSS 类,该类将自动作用于整个应用的范围之内,会修改所有相关元素及其子元素。对于那些结果可预测的简单应用,这种做法非常适用。但是随着应用和团队规模的增长,该做法立刻会出现问题,将导致一些不可预料的问题。


上述问题的最初解决方案是BEM(Block Element Modifier)规范。作为一种方法和命名规范,BEM 为开发人员清晰标识了每个类的行为,有助于避免产生冲突。例如,form__submit–disabled 指示开发人员正在表单内设置一个提交按钮的状态为禁用。


但作为命名规范,难以强制开发人员去遵守 BEM。此后,JavaScript 推出了一些更易于实现的解决方案,包括CSS ModulesStyled Components,并得到了开发人员的采纳。这些方法采用不同的技术路线,在单个组件中添加 CSS,同样解决了许多 BEM 所针对的问题。


解决组件化设计中缺少跨应用架构的问题,涉及三个独立的方面:


  1. UI:包括主题和一般应用行为。

  2. 布局组件(Layout Components):也常被称为“容器”或“智能组件”。布局组件确定指定组件在特定场景中的行为,通常是不可重用的。

  3. 展示组件(Presentational Components):是增强应用功能的可重用代码片段。为增加展示组件的多样性,其中应尽可能避免包含逻辑。

UI

UI 会定义在作用于整个应用的全局 CSS 文件中。主要包括两个方面:


  1. 常量类(Constant):开发人员过去会使用所有主流浏览器都支持的自定义CSS属性,最近可使用 SCSS 或 LESS 变量,


CSS 自定义属性主要有两方面优点。第一,可在运行时做修改。对于转换主题或支持夜景模式,这是一种很好的解决方案。第二,支持在布局组件中修改,开发人员更易于实现小范围内的设计调整。


  1. UI 状态(State)定义通常可分解为三方面:

  2. 修饰符(Modifier)状态:确定各元素的规格(大/小)、设计(主/次)等的变化。

  3. 行为(Behavioral)状态:包括整个应用范围的状态。例如,在线/离线、正在加载等。

  4. 伪(Pseudo)状态:启用/禁用等临时状态,以及:hover 和:focus 等 CSS 状态。

布局组件

布局组件会按指定方式在页面上组织可重用的组件。布局组件的功能可分解为两个方面,一是以设定属性和设计对可重用组件做初始化,二是使用 CSS Grid、Flexbox 等功能将其所控制区域设定为特定的布局。

可重用组件

可重用组件中几乎不包含逻辑。它们从布局组件接收数据,当布局组件执行操作时会触发相关事件(或回调)。


为确保组件的可重用性,开发人员应尽量避免在组件中添加逻辑和设计。具体而言,通常应避免添加显示、宽度、留白等属性。


这并非易事,因为可重用组件常常需要处理比其最初设计更多的场景,例如,支持多行文本的按钮,支持显示更多文本内容的标题等。但可重用组件确保了组件真正的可重用性,无需在应用下次使用时进行重写。


原文链接:


CSS Architecture for Component-Based Applications


2020-01-12 09:152304

评论

发布
暂无评论
发现更多内容

用友YonData如何刷新企业数据管理与应用新高度?

用友BIP

揭秘| 用友坚持做大模型的原因

用友BIP

谈谈Function Calling

AIGC.TWang

大模型 人工智能’ AIGC GPT Function Calling

openGauss- 索引推荐

Gauss松鼠会

opengauss

场景题:如何提升Kafka效率?

王磊

阿里巴巴商品详情API返回值中的关联商品推荐

技术冰糖葫芦

api 网关 API Explorer API 策略

In-depth analysis IPQ5332 vs IPQ9570 WiFi7 motherboard CPU

wifi6-yiyi

前波士顿咨询Platinion董事总经理陈果加入望繁信科技

望繁信科技

流程挖掘 流程资产 流程智能

关键词搜索淘宝天猫商品列表数据接口(支持价格、销量排序)

tbapi

淘宝商品列表数据接口 淘宝API

秒合约/量化合约/合约量化开发系统开发(成品案例源码)

V\TG【ch3nguang】

量化交易机器人

【vue3】详解单向数据流,大家千万不用为了某某而某某了

快乐非自愿限量之名

JavaScript vue.js 前端

如何判断全面预算和EPM软件架构是否符合技术规范?

智达方通

数字化转型 多维数据库 企业绩效管理系统 管理会计信息化 新ERP

9月7-8日,Rust China Conf 2024 来啦!

Mike Tang

开源 rust 上海 rust conf rust开发者大会

【攻略】第三届数据库大赛创新上云性能挑战赛-高性能分析型查询引擎赛道-冠军

阿里云天池

百度智能云一念:视频模型D&S-AI Video,秒级生成营销视频

爱AI的猫猫头

人工智能 音视频 大模型 办公效率 AI视频

阿里云数智服务创新挑战赛总决赛铜奖比赛攻略_NJUSME队

阿里云天池

人社大赛算法赛场解题思路分享+冠军+破灭刀锋

阿里云天池

多链钱包系统开发(开发原理)丨多链钱包开发源码模式

V\TG【ch3nguang】

免费高效!3步实现Llama3模型远程访问与协作

贝锐

AIGC Llama3 贝锐

为什么要使用TikTok直播专线?

Ogcloud

海外直播专线 tiktok直播 tiktok直播专线 tiktok直播网络 TikTok跨境直播

Oracle同一台服务器创建多个数据库

快乐非自愿限量之名

数据库 oracle 服务器

一只黔灵山猴子,溜进「智能世界」

脑极体

AI

JNPF再进化,低代码革命让数字化无处不在

不在线第一只蜗牛

低代码

Java Script网页设计案例

EquatorCoco

Java JavaScript

用实时计算释放当下企业大数据潜能

Apache Flink

大数据 flink 实时计算 大数据计算与存储

实战演练:利用京东API一键抓取商品详情

技术冰糖葫芦

api 网关 API Explorer API 策略

AI+营销:AI赋能企业大客户经营更高效、更智能

用友BIP

论低代码平台在业务系统中的多种应用形态

快乐非自愿限量之名

低代码 业务开发

Python 项目及依赖管理工具技术选型

不在线第一只蜗牛

Python 开发语言

(约230个工具)野兔在线工具箱系统最新版本V4.0.1更新

网站,小程序,APP开发定制

JNPF低代码开发平台如何助力传统制造业破茧成蝶

EquatorCoco

低代码

避坑指南:如何在基于组件的应用中使用CSS架构_大前端_Guy Nesher_InfoQ精选文章