通过覆盖应用在其上的默认 css 自定义 Vaadin 详细信息展开图标

Customize Vaadin Details Expand Icon by overriding default css applied on it

我想要展开/展开功能,我使用 Vaadin Details 来实现它。

Div contentDiv = new Div();

Label label = new Label("Expand");

Details details = new Details(label, contentDiv);

它给出的输出如下:

但是,我想要的是右侧的展开图标。所以为此我使用 ThemeVariants 像这样:

details.addThemeVariants(DetailsVariant.REVERSE);

它给出的是以下输出:

文字和图标之间有很大的差距。

这是因为应用了以下默认值 css。

:host([theme~="reverse"]) [part="summary"] {
    justify-content: space-between;
}

所以,现在我需要覆盖这个 css。我所做的是在我的 css 文件中的 css 代码下方添加,并在导入中添加 themeFor="summary"。但是没有用。

:host([theme~="reverse"]) [part="summary"] {
            justify-content: normal;
        }

预期输出:

那么,在 Vaadin 中还有其他方法可以做到这一点吗?或者如何覆盖 ThemeVariants.

的默认值 css

注意:我使用的是 Vaadin 14。

问题之一,当 css 不起作用时导入错误。

检查您的 css 导入是否指定了 themeFor。

css 导入示例:

@CssImport(value = "./styles/vaadin-details.css", themeFor = "vaadin-details")

在vaadin-details.css:

:host([theme~="reverse"]) [part="summary"] {
    justify-content: normal;
} 

Link to Vaadin documentation about css styling.

这是 commit 我得到你预期结果的地方。请看我如何导入 css 文件。

此外,正如您正确指出的那样,使用 Div 而不是垂直布局时会重现此缺陷。

使用 themeFor="vaadin-details" 而不是 themeFor="summary" 应该可以。

另外,使用justify-content: start;。 属性 没有 normal 值:https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content