Vaadin-combo-box: Itens da caixa de combinação de estilo

Criado em 28 mar. 2019  ·  8Comentários  ·  Fonte: vaadin/vaadin-combo-box

Gostaria de usar estilos externos nos itens da caixa de combinação, mas isso não funciona, pois os itens estão dentro do shadow dom.

O cenário concreto é mostrar ícones de bandeira em uma caixa de combinação de seleção de idioma usando flag-icon-css . Para que os sinalizadores sejam mostrados, uma tag span com algumas classes CSS dos estilos flag-icon-css precisa ser aplicada, mas eles não são selecionados por causa do DOM de sombra. Um item da caixa de combinação não deveria ser "slot" como em ListBox? Para itens de ListBox, funciona bem para exibir os ícones de bandeira.

Abri uma pergunta sobre stackoverflow recentemente, consulte https://stackoverflow.com/questions/55170886 para obter detalhes.

Todos 8 comentários

Existe uma solução alternativa disponível?

Como os estilos externos não penetram no DOM da sombra, você precisa importar o arquivo CSS dentro do DOM da sombra.

Talvez este thread StackOverflow ajude.

Com base na segunda resposta desse tópico, <link rel="stylesheet"> deve funcionar dentro do DOM shadow. Portanto, algo como isso poderia funcionar em seu 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);

... ou usando @import sugerido na primeira resposta:

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);

Eu mesmo não testei adequadamente esses fragmentos.

@ steffen-harbich-itc, você conseguiu fazer funcionar usando uma dessas abordagens ou de alguma outra forma? Eu estaria interessado em ouvir. :)

Tentei sua segunda sugestão e funcionou . Não tentei a primeira abordagem. No entanto, tentei adicionar " @import ..." em meu shared-styles.html em

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

mas isso não funcionou.

Portanto, uma solução alternativa está disponível para o problema, mas IMO ainda há algo inconsistente com o comportamento de ba em contraste com ListItems.

É bom saber que pelo menos uma abordagem funciona!

Sobre sua abordagem de estilos compartilhados: você deve definir theme-for="vaadin-combo-box-item" , pois esse é o elemento no qual os estilos devem ser injetados. No entanto, ele ainda pode não funcionar com ComponentRenderer , porque este renderizador cria um componente da web adicional (e, portanto, a raiz da sombra), entre vaadin-combo-box-item e seus componentes adicionados.

A estilização dos itens e se eles devem ou não estar dentro do DOM sombra diz respeito ao componente da web (este repositório inclui apenas o wrapper Java para ele), portanto, moverei este tíquete para o repositório vaadin-combo-box.

Uma maneira correta de lidar com isso seria criar um dom-module como este:

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

Usar @import não tem garantia de funcionamento e não é recomendado.

Não existe uma solução fácil para o problema e não é específico para o componente vaadin-combo-box .
Devemos documentar as limitações do shadow DOM e CSS externo no novo site de documentos.

Caso contrário, não há nada para fazermos aqui. Então, deixe-me fechar isso porque não é um bug.

Eu ainda esperaria que os itens da caixa de combinação não fossem colocados no DOM sombra, mas em slots separados.

os itens da caixa de combinação não devem ser colocados no DOM sombra, mas em slots separados.

Podemos considerar isso como uma mudança potencial significativa no próximo lançamento principal.

A exposição dos itens precisa ser feita de forma que funcionem com o componente de rolagem virtual (que será definitivamente alterado de iron-list para outra coisa - precisa ser decidido).

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

mas4ivv picture mas4ivv  ·  16Comentários

heruan picture heruan  ·  14Comentários

silentHoo picture silentHoo  ·  3Comentários

web-padawan picture web-padawan  ·  3Comentários

sohrabtaee picture sohrabtaee  ·  4Comentários