【发布时间】:2020-06-27 14:36:28
【问题描述】:
我目前正在开发一个自定义元素,它基本上是输入元素的略微增强版本,将其所有构建块(包括输入元素)托管在影子 DOM 中。
当内部输入元素具有焦点时,宿主元素应使用彩色轮廓和框阴影设置样式,如下所示:
因此,输入的焦点和模糊事件处理程序在宿主元素上切换属性“聚焦”,封装样式如下所示:
:host([focussed]) {
transition: outline 0.3s ease-in-out;
outline-color: var(--focus-color, var(--default-focus-color)) !important;
box-shadow: 0px 0px 3px var(--focus-color, var(--default-focus-color)) !important;
}
我不喜欢这种方法的地方:
在需要观察的主机上暴露一个自定义属性,以确保视觉表示状态的正确性(例如消费者调用setAttribute('focussed', ''))
我考虑过的替代方案:
当然,我的第一个想法是在填充宿主元素空间的容器元素上封装 shadow DOM 中的属性(甚至切换一个类),但问题是溢出的内容,例如轮廓和框-阴影似乎被宿主元素强行隐藏了——这似乎是合乎逻辑的。
我可以在宿主元素上指定一个固定的填充以确保轮廓和阴影的可见性,但这需要考虑不同的浏览器呈现框阴影的行为,并且对于消费者的自定义样式来说会感觉违反直觉。
我正在这里寻找一种最佳实践方法,非常感谢您对此的有根据的想法。
【问题讨论】:
-
能否将您的自定义元素包含在 sn-p 中,以便我们与您一起考虑解决方案?
标签: javascript html css web-component custom-element