Data+AI时代,如何打造下一代数智平台? 了解详情
写点什么

避坑指南:如何在基于组件的应用中使用 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:152439

评论

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

Metasploit Pro 4.22.7-2025051201 (Linux, Windows) - 专业渗透测试框架

sysin

Metasploit

Apple Safari 18.5 - macOS 专属浏览器 (独立安装包下载)

sysin

safari

源码交付+可控部署:用户行为分析系统的落地经验

ClkLog

开源 数据分析 埋点 用户行为分析 客户画像

天下拍-资产拍卖经典案例分享

至存网络

拍卖 拍卖系统 拍卖软件 艺术品拍卖 资产拍卖

Metasploit Framework 6.4.63 (macOS, Linux, Windows) - 开源渗透测试框架

sysin

Metasploit

WhaleTunnel 信创数据库适配能力全景图:打通国产数据生态的最后一公里

白鲸开源

数据库 大数据 信创 白鲸开源 WhaleTunnel

数安智用·科技强警|万里红依托“三大优势×五大能力”受邀参展第十二届警博会

新消费日报

Shotcut 25.05 (Linux, macOS, Windows) - 免费开源视频编辑器

sysin

视频编辑

文献解读-Sentieon DNAscope LongRead – A highly Accurate, Fast, and Efficient Pipeline for Germline Variant Calling from PacBio HiFi

INSVAST

长读长测序 Sentieon 变异分析 DNAscope LongRead 生信分析服务

AI题库软件系统的技术难点

北京木奇移动技术有限公司

软件外包公司 AI题库系统 题库软件系统

什么是区块链dapp开发?它能做什么?

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

公链开发及其配套设施:钱包与区块链浏览器

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 公链开发代币开发

博云 AIOS 通过国家工信安全中心测试,产品完整性与功能性获权威认证

BoCloud博云

博云

VMware NSX 4.2.2 发布,新增功能概览

sysin

nsx

重塑“DATA+AI“的共生范式:DataBuilder如何赋能企业数据价值跃迁

数造万象

人工智能 AI 数据 数据集 Data + AI

他为SeaTunnel写下10+高质量PR,还把开源带进了公司生产线!

白鲸开源

通义灵码入职表现实测:蔚来汽车AI 生成代码占比在 30% 以上

阿里巴巴云原生

阿里云 云原生 通义灵码

去中心化云算力重构3A云游戏,元宇宙游戏还会远吗?

PowerVerse

元宇宙 云游戏 去中心化云算力

【FAQ】HarmonyOS SDK 闭源开放能力 —Share Kit(2)

HarmonyOS SDK

harmoyos

A10 ACOS 6 - 专为现代应用程序设计的开放式云就绪操作系统

sysin

A10

A10 vThunder 6.0.5 - 虚拟化应用交付控制器 (ADC)

sysin

A10

重磅预告 | Apache SeaTunnel接入MCP,即将解锁模型上下文协议超能力!

白鲸开源

开源 AI 大模型 Apache SeaTunnel MCP

企业跨国组网怎么选?MPLS与SD-WAN方案对比

Ogcloud

企业组网 异地组网 跨国网络 国际网络专线 跨国网络专线

手把手教你抓取京东商品评论:API 接口解析与 Python 实战

tbapi

京东商品评论接口 京东API 京东商品评论API 京东评论接口 京东评论内容采集

升级遇到坑?一文带你搞定DolphinScheduler 2.0到3.0升级

白鲸开源

开源 技术 干货 Apache DolphinScheduler 版本升级

AI题库APP的开发框架

北京木奇移动技术有限公司

题库系统 软件外包公司 AI题库

AI for All,Code for All|七牛云 AI 开源项目扶持计划全面启动

七牛云

开源 AI

通义灵码入职表现实测:蔚来汽车AI 生成代码占比在 30% 以上

阿里云云效

阿里云 云原生 通义灵码

国内到美国的网络问题怎么解决?美国专线网络方案详解

Ogcloud

SD-WAN 美国专线网络 美国网络专线 美国专线 中美网络专线

A10 Thunder 6.0.5 - 应用交付与负载均衡

sysin

A10

和鲸支持!南大人工智能通识课,让每个学生都懂AI

ModelWhale

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