【问题标题】:Vaadin component styling confusionVaadin 组件样式混乱
【发布时间】:2018-04-08 20:24:58
【问题描述】:

我正在尝试访问必须通过影子 DOM 的元素的各个部分。我一直在尝试像本指南中那样做:https://github.com/vaadin/vaadin-themable-mixin/wiki/1.-Style-Scopes

将此代码添加到我的 shared-styles.html 文件中可以正常工作:

vaadin-text-field {
  border: 1px solid gray;
}

然后为了访问元素的特定部分来设置样式,它显示访问它像这样:

#shadow-root (open)
  <style>
    :host {
      border: 1px solid gray;
    }
  </style>

您可以像这样访问特定部分(在这种情况下为输入字段):

#shadow-root
  <style>
    [part="input-field"] {
      border: 1px solid gray;
    }
  </style>

我只是不明白最后 2 个代码块应该如何识别它们正在更改“vaadin-text-field”,因为它在代码 sn-p 中无处可寻。单独添加那些 sn-ps 当然是行不通的。我觉得这很简单,我忽略了。非常感谢,感谢您为 Vaadin 提供的所有大力帮助!

【问题讨论】:

标签: java css vaadin styling


【解决方案1】:

查看文档的Stylable Shadow Parts 部分。它提供了一些有用的示例。

简而言之,要设置 Vaadin 组件的样式(例如 &lt;vaadin-text-field&gt;),您需要将样式添加到组件的影子 DOM 中。为了做到这一点,定义一个带有theme-for="vaadin-text-field" 属性的样式模块并将您的自定义样式放在那里。在第一次渲染 Vaadin 组件之前,寻找具有 theme-for 属性的样式模块并从中挑选样式。

<dom-module id="my-input-theme" theme-for="vaadin-text-field">
  <template>
    <style>
      [part="input-field"] {
        border: 1px solid gray;
      }
    </style>
  </template>
</dom-module>

<vaadin-text-field label="Username"></vaadin-text-field>

这是一个活生生的例子:https://glitch.com/edit/#!/theming-vaadin-components-npm-p3?path=custom-theme.js:4:0

上面的例子会改变应用中all &lt;vaadin-text-field&gt;s 的样式。如果您只想设置某些文本字段的样式,请使用主题或属性选择器:

<dom-module id="my-input-theme" theme-for="vaadin-text-field">
  <template>
    <style>
      :host([theme~="bordered"]) [part="input-field"] {
        border: 3px solid hotpink;
      }
    </style>
  </template>
</dom-module>

<vaadin-text-field label="Themed" theme="bordered"></vaadin-text-field>

【讨论】:

  • 谢谢!我试图让最后一部分工作,但我正在用所有 Java 编写它,并且没有方法可以将“主题”设置为特定按钮。第一个示例适用于所有按钮,但是如何在 java 中设置特定的按钮主题?感谢您的帮助!
  • Vaadin 10 具有用于从服务器端 Java 进行几乎任何类型 DOM 操作的 API。要在TextField 组件上设置属性,首先使用getElement() 方法访问其对应的DOM 元素,然后使用Element API 设置属性:textField.getElement().setAttribute("theme", "bordered"); 更多详细信息请参阅文档:working with UI componentsthe Element API.
  • 非常感谢,这正是我所需要的。如果您不介意回答另一个问题,有没有办法根据其中的内容以编程方式设置 vaadin-grid 行的背景颜色?比如如果一个值为正,将其设置为绿色,如果为负,将行背景设置为红色。不知道我会怎么做
  • 乐于助人!您介意将您的其他问题与此问题分开发布吗?
  • 非常感谢维克多!我在这里添加了问题stackoverflow.com/questions/49747059/…
【解决方案2】:

最后一个示例需要您实际编辑组件内的样式标签的内容。

在该页面的底部,您会发现 阅读下一篇: Adding Styles to Local Scope.

【讨论】:

  • 上述“将样式添加到本地范围”链接的更新 URL 为:github.com/vaadin/…。内容已从 wiki 移至自述文件。目前旧的 wiki 页面仍然链接到自述文件,但 wiki 页面将来可能会被删除。
猜你喜欢
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多