apprat / sober

Material You Design Web Component UI Library
https://soberjs.com
MIT License
50 stars 4 forks source link

为什么把 shadowRoot mode 设为 closed #1

Closed cubxx closed 4 months ago

cubxx commented 4 months ago

感谢你们的工作

我尝试设置 Snackbar 的背景色,发现无法访问 shadowRoot,这可能不利于对组件进行更高程度的自定义

或者有其他替代方案吗?

apprat commented 4 months ago

感谢你的反馈,最初的考虑是开放 shadowRoot 可能会增加开发者的心智负担。下一个版本中会在所有组件增加 part,届时你可以通过CSS ::part(选择器) 来选择 shadowRoot 的内部元素 ,(下一个版本预计会这两天更新)。

cubxx commented 4 months ago

@apprat 我认为从社区的角度来看,开放是有必要的,开发者应该对组件具有完全控制权

参考同类组件库: https://github.com/XboxYan/xy-ui https://github.com/zdhxiong/mdui https://github.com/FriedRiceNoodles/banana-ui

从开源作者的角度来看,封闭也是不值得的,因为这种防御很容易被绕过:

const _attachShadow = Element.prototype.attachShadow;
Element.prototype.attachShadow = function () {
    return _attachShadow.call(this, { mode: "open" });
};

https://blog.revillweb.com/open-vs-closed-shadow-dom-9f3d7427d1af?gi=c57da418b74c

itpleb commented 4 months ago

我更是希望的就是组件可以有单独开关