【问题标题】:Vaadin, applying own theme doesn't workVaadin,应用自己的主题不起作用
【发布时间】:2013-07-12 13:11:49
【问题描述】:

我正在尝试将自定义主题添加到我的 Vaadin 7 项目中。我使用了 Vaadin 插件主题创建器,它创建了必要的文件,并在我的表格中包含了一个简单的背景颜色设置,但即使包含驯鹿主题,它似乎也不起作用。在我的 UI 类上应用带有 @Theme() 注释的主题后,我的表格消失了,我得到了这个(没有自定义主题,它看起来很好):

我阅读了 Vaadin 书中描述这一点的部分 (https://vaadin.com/book/-/page/themes.creating.html),但它仍然对我不起作用。 我读了这部分:https://vaadin.com/book/-/page/themes.html#figure.themes.theme-contents 它显示驯鹿应该在主题下,但它说我必须包含 vaadin-themes.jar 并且它会正常工作。我确实添加了它,我的文件结构如下所示:

airlinedb_customtheme.scss 文件的代码:

@import "../reindeer/reindeer.scss";
@mixin airlinedb_customtheme {
  @include reindeer;
  .v-table {
    background-color: red;
  }
}

还有我主题的styles.scss:

@import "airlinedb_customtheme.scss";
.airlinedb_customtheme {
   @include airlinedb_customtheme;
 }

我错过了什么?在我看来,驯鹿风格不包括在内,但我不知道为什么。

编辑:此外,如何为按钮和表格行提供背景颜色?

【问题讨论】:

  • 你能重新发布你的截图吗?您是在生产模式还是调试模式下运行?日志中有错误吗?
  • 日志中没有错误,我在生产模式下运行它,你的意思是哪个截图?它们不可见吗?
  • 尝试在调试模式下运行。在调试模式下,css 文件是动态生成的。如果它有效,您必须将生成过程添加到您的构建系统以用于生产模式。看到这个问题:stackoverflow.com/questions/16561633/…
  • 在调试模式下是一样的,在生产和调试模式下都不起作用
  • 如果您在浏览器中转到应用程序主题会发生什么?应该是这样的:127.0.0.1/airlinedb/VAADIN/themes/airlinedb_custometheme/…

标签: java sass vaadin


【解决方案1】:

这只是一个建议,但请尝试不带下划线的名称。我以前从未见过带下划线的 scss 名称。

像这样:

airlinedbCustomtheme

编辑:

Vaadin book-table

阅读 CSS 样式规则部分。

.v-table {}
  .v-table-header-wrap {}
    .v-table-header {}
     .v-table-header-cell {}
      .v-table-resizer {} /* Column resizer handle. */
       .v-table-caption-container {}
 .v-table-body {}
  .v-table-row-spacer {}
   .v-table-table {}
    .v-table-row {}
     .v-table-cell-content {}

要更改按钮的背景颜色,您必须先删除按钮包装器和背景图像:

.v-button .v-button-wrap { 
  background-image: none !important; 
} 
.v-button { 
  background-image: none !important; 
}

不要忘记对 CSS 使用 !important 修饰符!

.v-table { 
  background-color: red !important; 
} 

【讨论】:

  • 谢谢,成功了!现在包含驯鹿规则,一切看起来都应该如此,但是当我添加自己的规则时,它们并没有改变任何东西,我检查了源代码,我设置的规则出现在那里,但它们在 GUI 上仍然不可见(我尝试为不同的元素添加颜色,例如按钮和表格)你知道为什么会这样吗?
  • 这可能是因为.v-table.. 在@mixin 中。像这样在@mixin 之外尝试@import "../reindeer/reindeer.scss"; @mixin airlinedb_customtheme { @include reindeer; } .v-table { background-color: red; } 但在我看来,将CSS 引用到Vaadin 生成的布局是一个坏习惯名字。当您为单个 Vaadin 页面使用数千行 CSS 时,它会产生一些非常奇怪的行为。在 java 部分添加样式名称:table.addStyleName("yourStyleName"); 并在 CSS 中像这样引用:.yourStyleName{ }
  • 问题是,我可以添加规则,它们将被应用,但只有当我检查按钮的确切类名(使用 chrome 的检查元素选项)时,它才会与无论是.v-button 还是addStyleName,无论是在@mixin 内部还是外部
  • .v-table { background-color: red !important; } 哦,我忘了,!important 很重要 :) 这表明 css 编译器必须用您的设置覆盖它。
  • 好的,它似乎可以正常工作,但是如何为行添加颜色?因为背景颜色在桌子上没有做任何事情,我可以在加载时看到红色,但仅此而已,然后行与之前相同,没有任何变化,而且我用按钮尝试了它,background-colorcolor 改变实际按钮的颜色,它改变了它所在的div(红色出现在角落,因为按钮是圆形的)即使我现在使用的是addStyleName
【解决方案2】:

尝试从 vaadin jar 文件中提取 VAADIN/themes/reindeer 目录并将其添加到 WebContent 内的 VAADIN/themes/ 目录中,这样您的主题/css 将静态提供,并且您的 @import 应该按预期工作。

【讨论】:

  • 我尝试了你的建议,但还是不行,我得到了同样的结果
猜你喜欢
  • 2023-03-12
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 2020-12-31
相关资源
最近更新 更多