Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单个GWT列表框不接受CSS,但覆盖所有GWT列表框是可行的_Java_Css_Gwt_Listbox_Uibinder - Fatal编程技术网

Java 单个GWT列表框不接受CSS,但覆盖所有GWT列表框是可行的

Java 单个GWT列表框不接受CSS,但覆盖所有GWT列表框是可行的,java,css,gwt,listbox,uibinder,Java,Css,Gwt,Listbox,Uibinder,我正在使用GWT开发一个web应用程序,其中几个列表框用于各种事情。我想更改特定列表框的背景色,以表明它是使用CSS类的用户的必填字段。这很简单,直到我发现我根本无法让listbox采用我的CSS类为止。我想指出的是,我正在使用UiBinder以及XML和Java的混合来创建和使用应用程序控件,在我试图解决这个问题时,我禁用了Google的标准主题。以下是我迄今为止在Java代码中尝试的内容: @UiField ListBox knownIssuesCombo; ... public Know

我正在使用GWT开发一个web应用程序,其中几个列表框用于各种事情。我想更改特定列表框的背景色,以表明它是使用CSS类的用户的必填字段。这很简单,直到我发现我根本无法让listbox采用我的CSS类为止。我想指出的是,我正在使用UiBinder以及XML和Java的混合来创建和使用应用程序控件,在我试图解决这个问题时,我禁用了Google的标准主题。以下是我迄今为止在Java代码中尝试的内容:

@UiField
ListBox knownIssuesCombo;
...

public KnownIssuesPanel() {
  ...
  knownIssuesCombo = new ListBox();
  knownIssuesCombo.addStyleName("requiredField"); //This should work!!!
  //knownIssuesCombo.addStyleDependentName("-requiredField");
  //knownIssuesCombo.setStyleName("requiredField", true);
  //knownIssuesCombo.setStyleDependentName("-requiredField", true);
}
以及匹配的CSS:

.requiredField {
    background-color: Green;
}

.gwt-ListBox-requiredField {
    background-color: Green;
}
通过覆盖GWT的CSS,我实际上可以更改应用程序中所有列表框的外观,如下所示:

.gwt-Listbox {
    background-color: Green;
}
但我不想让我所有的列表框都变成绿色;我只想影响一个单一的,具体的。对此问题的任何帮助或见解都将不胜感激

试试这个:

background: green !important;
可能是一个基本的特殊性问题,您的浏览器开发工具应该可以帮助您找到它;基本上,您可能在同一CSS文件中定义了.gwt ListBox的背景色,或者在包含.requiredField的文件之后加载的第二个文件中定义了.gwt ListBox的背景色,并且由于.gwt ListBox和.requiredField选择器具有相同的背景色,因此后者获胜

解决方案:

确保.gwt列表框之后显示/加载.requiredField 或者使用比.gwt ListBox更具体的选择器,例如.gwt-ListBox.requiredField 或者使用addStyleDependentNamerequired和.gwt ListBox required选择器
注:!重要的是会起作用,但不好的实践原因在于可访问性,而用户选择特定于用户的样式表

我认为listbox在默认情况下会获得gwt listbox类。当您添加名称而不是设置主样式名称时,新类将使用空格而不是连字符连接

所以不是

.gwt-ListBox-requiredField {
    background-color: Green;
}
试一试

我想


我相信您也可以只设置PrimaryStyleName,然后您最初的requiredField标记就可以工作了,但我还没有使用这个标记。试试它们,让我知道什么是有效的。

我想我应该提到,我也已经尝试了我最初发布的所有代码的变体,这意味着我弄乱了背景、背景色、颜色,并添加和删除了!重要的旗帜。我使用addStyleName再次尝试了这个变体,但没有效果。谢谢你的尝试,虽然这不是问题的确切答案,但它足够接近,我会接受它作为答案。本质上,我认为这是一个应用样式的顺序问题,这是您的解决方案在第一个要点中提到的。我最后做的是在CSS文件中定义一个CSS类,然后将CSSResource extender与我的ClientBundle一起使用,并使用UiBinder XML文件中的addStyleNames属性/方法将样式实际应用于组件。我希望这对任何遇到这个问题并找到答案的人都有意义!我在第一段中描述了应用样式的顺序问题。当选择器具有相同的特异性时,规则将按照它们在同一样式表中出现的顺序应用,样式表在单独样式表中出现的顺序应用;因此,您的.gwt列表框的背景色覆盖了.requiredField的背景色。在不知道样式表是如何通过CssResource加载的情况下,很难回答更具体的问题?第一个建议使用空格而不是a-与addStyleName方法以及可能所有其他方法都不起作用,因为到目前为止,在我的经验中,它们的行为都是相同的;第二个建议是通过使用谷歌的标准主题来改变我得到的和仍然想要的风格。谢谢
.gwt-ListBox requiredField {
    background-color: Green;
}