Vaadin-combo-box: 样式组合框项目

创建于 2019-03-28  ·  8评论  ·  资料来源: vaadin/vaadin-combo-box

我想在组合框项目中使用外部样式,但这不起作用,因为这些项目位于 shadow dom 内。

具体场景是使用flag-icon-css在语言选择组合框中显示标志图标。 对于要显示的标志,需要应用带有一些来自 flag-icon-css 样式的 CSS 类的 span 标签,但由于 shadow DOM 的原因,它们不会被选中。 组合框项目不应该像 ListBox 中那样是“插槽”吗? 对于 ListBox 项目,它可以很好地显示标志图标。

我最近在stackoverflow上开了一个问题,详情见https://stackoverflow.com/questions/55170886

所有8条评论

有可用的解决方法吗?

因为外部样式不会渗透到 shadow DOM 中,所以需要在 shadow DOM 内部导入 CSS 文件。

也许这个 StackOverflow 线程有帮助。

根据该线程中的第二个答案, <link rel="stylesheet">应该在 shadow DOM 内工作。 所以这样的事情可以在你的ComponentRenderer

Element link = new Element("link");
link.setAttribute("rel", "stylesheet");
link.setAttribute("href", "./frontend/bower_components/flag-icon-css/css/flag-icon.min.css");
item.getElement().appendChild(link);

...或使用第一个答案中建议的@import

Element style = new Element("style");
style.setProperty("innerHTML", "<strong i="15">@import</strong> \"./frontend/bower_components/flag-icon-css/css/flag-icon.min.css\"");
item.getElement().appendChild(style);

不过,我自己还没有正确测试这些片段。

@steffen-harbich-itc,您是否设法通过使用其中一种方法或其他方式使其工作? 我很想听听。 :)

我尝试了你的第二个建议,它奏效了。 我没有尝试第一种方法。 但是,我尝试将“ @import ...”添加到我的 shared-styles.html 中

 <dom-module id="my-combo-box-theme" theme-for="vaadin-combo-box">
   <template>
     <style>...

但这没有用。

因此,该问题有一个解决方法,但与 ListItems 相比,IMO 仍然存在与行为不一致的地方。

很高兴听到至少一种方法有效!

关于您的共享样式方法:您应该设置theme-for="vaadin-combo-box-item" ,因为这是样式应该注入的元素。 但是,它可能仍然无法与ComponentRenderer ,因为此渲染器在vaadin-combo-box-item和您添加的组件之间创建了额外的 Web 组件(以及 shadow-root)。

项目的样式以及它们是否应该在 shadow DOM 中与 web 组件有关(这个存储库只包含它的 Java 包装器),所以我将把这张票移到 vaadin-combo-box 存储库。

处理这个问题的正确方法是像这样创建一个dom-module

<dom-module id="my-item-css" theme-for="vaadin-combo-box-item">
  <template>
    <style>
    /* styles from flag-icons.css */
    </style>
  </template>
</dom-module>

不能保证使用@import并且不推荐使用。

这个问题没有简单的解决方法,它不是特定于vaadin-combo-box组件的。
我们应该在新的文档站点中记录 shadow DOM 和外部 CSS 的限制。

否则我们在这里无事可做。 所以让我关闭它,因为它不是一个错误。

我仍然希望组合框项目不应该放在 shadow DOM 中,而应该放在单独的插槽中。

组合框项目不应放置在 shadow DOM 中,而应放置在单独的插槽中。

我们可以将其视为下一个主要版本中潜在的重大更改。

暴露项目需要以它们与虚拟滚动组件一起工作的方式完成(这肯定会从iron-list更改为其他内容 - 必须决定)。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

sohrabtaee picture sohrabtaee  ·  4评论

osamamaruf picture osamamaruf  ·  4评论

web-padawan picture web-padawan  ·  3评论

heruan picture heruan  ·  14评论

anasmi picture anasmi  ·  18评论