Jos*_*ing 3 vaadin vaadin-flow
我已经浪费了数小时和数天试图设计 Vaadin Upload 组件的样式。目标很简单:
现在问题来了,我永远无法使用@CssImport 和 themeFor=vaadin-upload 和 themeFor=vaadin-upload-file 让它始终如一地工作。Vaadin 似乎编译了 shadow dom,最终结果各不相同,它混合了两个选项,以最后一个得到应用。
然后我想也许是因为 @CssImport 在 @Route 组件中。因此,我创建了两个自定义上传组件,它们扩展了 vaadin-upload 组件,不同之处在于不同的 @CssImport(见下文)。那(令人沮丧地)仍然不起作用。我检查了文档,发现 shadow-dom 内部包含两者,即使我从未在同一页面上使用它们。
@CssImport(value = "./css/vaadin-upload-show.css", themeFor = "vaadin-upload")
public class UploadShowFiles extends Upload {
private static final long serialVersionUID = -9198630843136885092L;
public UploadShowFiles(Receiver receiver) {
super(receiver);
}
}
@CssImport(value = "./css/vaadin-upload-hidefile.css", themeFor = "vaadin-upload")
public class UploadHideFiles extends Upload {
private static final long serialVersionUID = 2344860066834705807L;
public UploadHideFiles(Receiver receiver) {
super(receiver);
setClassName("hide-upload");
}
}
Run Code Online (Sandbox Code Playgroud)
下面的css会出现在shadow dom中。我希望只显示:无或其他,而不是两者。
[name="file-list"] {
display: none !important;
height: 0px !important;
}
[name="file-list"] div[part="file-list"] {
display: none !important;
}
[name="file-list"] {
display: block !important;
height: 1.5rem !important;
}
[name="file-list"] div[part="file-list"] {
display: block !important;
}
Run Code Online (Sandbox Code Playgroud)
p/s:这是我第一次在项目中使用 Vaadin 的体验,我可能再也不会使用它了。在 Vaadin 中自定义任何东西都非常耗时且痛苦。
在 shadow DOM 中设置样式确实很棘手。Vaadin 19 中的简化主题有所帮助。
当@CssImport
被放置注释影响,如果CSS应包含在文档中,而不是它影响的组件。使用themeFor
,它将始终应用于所有匹配的组件。
您可以做的是使用:host
选择器来限制它适用于哪些上传组件。在这里,我使用基于类的方法:
:host(.no-file-list) [name="file-list"] {
display: none !important;
height: 0px !important;
}
:host(.no-file-list) [name="file-list"] div[part="file-list"] {
display: none !important;
}
Run Code Online (Sandbox Code Playgroud)
然后我可以通过添加一个类来隐藏上传组件中的文件列表:
@Route
@CssImport(value = "./styles/upload-style.css", themeFor = "vaadin-upload")
public class FileUploadTest extends VerticalLayout {
public FileUploadTest() {
Upload uploadWithFileList = new Upload();
Upload uploadWithoutFileList = new Upload();
uploadWithoutFileList.addClassName("no-file-list");
add(uploadWithFileList, uploadWithoutFileList);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
49 次 |
最近记录: |