【问题标题】:Vaadin ComboBox set text-field width to 0 (CSS shadow dom)Vaadin ComboBox 将文本字段宽度设置为 0 (CSS shadow dom)
【发布时间】:2021-08-27 09:33:51
【问题描述】:

我使用 Vaadin ComboBox 创建一个下拉菜单,用户可以在其中设置将在网页的另一个元素中显示的状态。所以我真的不需要 ComboBox 的文本字段部分(图像中的蓝线)。

在浏览器中手动将宽度设置为 0 可以获得完美的结果(没有可见的线条,没有可用于焦点的文本输入区域),但是我无法使用代码实现这一点。请帮帮我。

我使用了this tutorial 中的示例(请参阅 vaadin-text-field-styles.css),它更改了我网页上的所有 ComboBox。当前状态如下:

//Java-code:
comboBox.addClassName("RemoveTextField");

/* CSS-File */
:host([class="RemoveTextField"]) [part="input-field"] {
    width: 0px;
}

没有使用 CSS 规则,我想问题是 .host-selector 没有像我想的那样工作。由于我是一个 CSS 菜鸟,请告诉我如何使用选择器作为 shadow dom 之外的元素。

【问题讨论】:

    标签: java css vaadin vaadin-flow


    【解决方案1】:

    请参阅末尾的替代解决方案。

    在处理嵌套的阴影根时,样式有点棘手。 input-field 部分在vaadin-text-field 的影子根内,它在vaadin-combo-box 的影子根内。因此,它不能从组合框中设置样式。

    您可以为文本字段创建一些样式,例如 text-styles.css:

    [part="input-field"] {
        width: 0;
    }
    

    接下来,您可以通过将此注释添加到流视图来将其应用于所有文本字段:

    @CssImport(value = "text-styles.css", themeFor = "vaadin-text-field")

    现在所有输入字段的宽度都为零。为了让它只应用于组合框中的文本字段,您可以在其上设置主题属性:

    myComboBox.getElement().setAttribute("theme", "my-combo");

    然后你可以更新你的text-styles.css:

    :host([theme="my-combo"]) [part="input-field"] {
        width: 0;
    }
    

    那么这是如何工作的呢?

    所有 Vaadin Web 组件都实现了 ThemableMixin,它做了几件事:

    1. 它使您可以使用 @CssImport 中的 themeFor="..." 将样式注入 Vaadin 组件的影子根。
    2. 它将您在组件上设置的任何theme 属性传播到影子根内的任何子组件。

    在浏览器开发者工具中,您会看到theme 属性已传播到vaadin-text-field,因此我们可以使用它来限制样式的范围。 仅传播主题属性,它不适用于类、ID 等。

    如果您要查看突出显示的 style 标记,您还会发现 text-styles.css 的内容已被注入那里(尽管内容可能太长而无法显示开发工具)。

    替代解决方案

    组合框可能不是最好的组件。看看MenuBar 或ContextMenu。

    【讨论】:

    • 完美答案,非常感谢!所以“主题”是通过 shadow-doms 获得超然属性的方式,很高兴知道。并感谢您提供替代解决方案。在我的情况下,我必须使用 ComboBox(否则我必须将所有样式从 ComboBox 复制到例如 ContextMenu),但对于其他人来说,您的建议应该是更简单的解决方案。
    • 我正在尝试使用 vaadin-login-form:stackoverflow.com/questions/69841944/… 来实现类似的效果,并且我已经到了可以使用上面的方法为名称为“label”的所有部分设置样式的地步方法。但是,我不能只为 内的标签设置样式。在java中,我正在做this.login.getElement().setAttribute("theme", "my-login");,它将主题属性推送到<vaadin-login-form-wrapper>,但不会在树的下方。
    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 2021-01-28
    • 2012-12-03
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多