我目前是一个较大的GWT项目的网页设计师,我建议对CSS进行重构。我想从DOM中删除所有类的前缀和混淆,而是使用干净的级联样式来防止冲突。

我理解GWT为什么以这种方式工作,但是如果我们拥有更整洁的DOM树,那么使用我们的使用方法,它将极大地加快开发速度。

即,而不是在DOM中这样的类:
GPJVK4TDFAB-com-项目名称-项目文件夹-项目子文件夹-CSS资源实际类名

我更喜欢这样:
实际类名

理想情况下,开发人员无需在工作流程中进行任何更改。我只想全局关闭前缀。我知道在某些情况下这可能会影响以模块化方式工作的能力,但是考虑到我们的项目和工作流程,我看不到任何缺点。

交叉引用会容易得多,并且如上所述,采用干净且严格的级联方法,我认为不会有冲突的风险。

最佳答案

如果使用的是CssResource,则需要注释所有不想用@external混淆的类:

interface MyCssResource extends CssResource {
  String obfuscated();
  String legacySelectorA();
}

interface Resource extends ClientBundle {
  @Source("my.css")
  MyCssResource css();
}


@external legacySelectorA, legacySelectorB;
.obfuscated .legacySelectorA { .... }
.obfuscated .legacySelectorB { .... }


.obfuscated会被混淆,而.legacySelector不会。

有关更多信息,请参见documentation

没有“禁用混淆”全局设置,因为CssResources的整个概念是这样,您不必担心重复的类名,并且只有在GWT可以重命名您的类时才能保证。
您可能会偶然发现但可以使用的CssResource的其他“杠杆和旋钮”:


<set-configuration-property name="CssResource.obfuscationPrefix" value="empty" />仅会导致"minimal-length selector names",但仍会造成混淆。
<set-configuration-property name="CssResource.style" value="pretty"/>只会使类名...“更漂亮”,也就是说,实际的类名将包含在混淆后的名称中(您可能启用了它)。

10-06 12:01