【发布时间】:2019-03-24 08:37:12
【问题描述】:
这是“我们应该怎么做”的问题之一。如您所知,Web 组件应该是小型的包含网站的应用程序。但是,有时需要根据嵌入的网站来设置这些样式。
示例:“注册我们的时事通讯”-组件。这个组件将有几个关键项目:
- 一个输入框
- 一个按钮
- 也许会重新验证
- 按下按钮后与您的服务对话的方法(传递电子邮件)
我们将使用 Google 和 YouTube 作为示例。 Google 的配色方案是蓝色(让我们想象一下),YouTube 的配色方案是红色。然后,该组件将类似于您要嵌入的页面上的<newsletter-signup></newsletter-signup>。Google 和 YouTube 都有这个。
当组件需要从 Google 和 YouTube 继承样式时,问题就来了。 A few deprecated CSS selectors 对此非常有用,因为 Google 和 YouTube 的样式表可以简单地为 Shadow DOM 启用颜色,因此我们不必复制/粘贴样式。该组件理论上应该不知道来自主机的样式,因为我们希望它从主机(Google 和 YouTube)继承。
目前,我正在使用 Angular 6 创建一个 Web 组件,它有很多样式,因为它有很多元素。我从主机站点复制/粘贴样式、Bootstrap、图标等,然后根据<newsletter-signup brand="google"></newsletter-signup> 设置它们的样式。所以如果品牌是谷歌,颜色应该是红色的,例如。
这真的很糟糕,有几个原因:
- 必须在 Web 组件和主机上更新样式
- 重复代码绝不是个好主意
- 如果所有样式都按 1:1 复制,样式所需的字节数会加倍
作为开发人员,我将如何考虑这一点?如何在主机上创建样式,然后将它们应用到我的 Web 组件(称为继承)?我确定有人遇到过与我遇到的 Shadow DOM 完全相同的问题。感谢阅读。
【问题讨论】:
标签: css angular angular6 web-component