Css 有没有可能;“淡色”;JavaFX2中的一个按钮

Css 有没有可能;“淡色”;JavaFX2中的一个按钮,css,javafx-2,Css,Javafx 2,我有一个JavaFX2应用程序,其中所有按钮都使用默认样式(灰色渐变)。在应用程序的某些特殊区域,背景色为红色、黄色或绿色。在这些区域,我也有按钮 我不想在所有三种颜色中重新设置按钮的所有不同状态(正常、悬停、按下),我只想给按钮添加背景色调。这有可能吗?怎么可能 如果没有,是否有一种方法可以轻松地重新设置基本按钮样式,并自动从该样式派生悬停和按下状态(伪选择器) 如果那不可能,我愿意听取建议。。我最重要的目标是避免冗余/重复声明(尤其是渐变),以防以后有人想添加不同的颜色面板,或者只是更改背景

我有一个JavaFX2应用程序,其中所有按钮都使用默认样式(灰色渐变)。在应用程序的某些特殊区域,背景色为红色、黄色或绿色。在这些区域,我也有按钮

我不想在所有三种颜色中重新设置按钮的所有不同状态(正常、悬停、按下),我只想给按钮添加背景色调。这有可能吗?怎么可能

如果没有,是否有一种方法可以轻松地重新设置基本按钮样式,并自动从该样式派生悬停和按下状态(伪选择器)

如果那不可能,我愿意听取建议。。我最重要的目标是避免冗余/重复声明(尤其是渐变),以防以后有人想添加不同的颜色面板,或者只是更改背景颜色之一的阴影

红色面板/按钮的CSS:

#my-red-panel {
    -fx-border-width: 1;
    -fx-border-radius: 5;
    -fx-background-radius: 5;
    -fx-smooth: true;
    -fx-border-color: rgb(209, 65, 42);
    -fx-background-color: rgba(255, 78, 50, 0.89);
}

#my-red-panel .button {
  -fx-background: rgba(0, 0, 0, 0); /* Now borders look good, but button is still grey*/
}
到目前为止,我的最佳选择是使用半透明渐变,如下所示:

#my-red-panel .button {
    -fx-background-color: linear-gradient(rgba(255, 255, 255, 0.3), rgba(0, 0, 0, 0.2));
}

我仍然必须声明每个状态,但至少我可以在不修改每个状态的情况下更改基础颜色。主要的问题是,这覆盖了按钮的整个外观,所以我希望有更好的…:-/

未测试,但请尝试使用:

#my-red-panel {
  -fx-base: rgba(255, 78, 50, 0.89);
}
或许:

#my-red-panel .button {
  -fx-base: ... ;
}
取决于您想要的确切效果


这里的诀窍是默认css(JavaFX2.2的caspian.css或JavaFX8的modena.css)使用一些预定义的查找颜色。你可以找出它们的来源,看看它们是如何使用的。如果为场景图中的节点重新定义这些查找,则新定义将传播到所有子节点。

是否可以将按钮变为白色并使用alpha百分比?还没有测试过,但可能会得到预期的结果。类似于rgba(255255255.80)谢谢,@Perneel!我已经想到了这一点(更新了这个问题),虽然没有我所希望的那么优雅,但它还是起了作用。在面板上设置
-fx base
-fx background
的组合起了作用!现在它看起来和我想要的一模一样,没有多余的CSS,谢谢!:-)嗯。这里的诀窍是默认css(JavaFX2.2的caspian.css或JavaFX8的modena.css)使用一些预定义的查找颜色。你可以找出它们的来源,看看它们是如何使用的。如果为场景图中的节点重新定义这些查找,则新定义将传播到所有子节点。酷。谢谢你的额外解释!您可能希望将其添加到您的答案中以供将来参考。:-)