GWT和CSS开发最佳实践



我想知道在外部CSS开发人员参与设计网站外观的情况下,开发应用程序的最佳实践是什么?

理想情况下,他们将创建CSS文件,我们可以通过多次迭代轻松地将其集成到网站中,开发团队不必对这些文件进行任何操作(显然,会有HTML或模板更改来指向适当的类)。

GWT文档(http://code.google.com/webtoolkit/doc/latest/DevGuideUiCss.html)列出了四种方法:

  1. 在宿主HTML页面中使用标记
  2. 使用模块XML文件中的元素
  3. 使用ClientBundle中包含的CssResource
  4. 在UiBinder模板中使用内联元素

文档表明,现代应用程序倾向于使用方法3和4,但这些方法似乎会干扰开发过程,因为我们不想每次迭代都不断更新CSSRource接口并更改CSS(在方法3中),也不想将CSS文件切碎并拆分以将其内联到我们的ui.xml文件中(在方法4中)。

我们正在考虑使用方法2,并手动编码CSS类。这将使我们能够轻松地放入CSS文件更新,而不需要开发人员触摸它们。我们将失去混淆,并且将有一些工作来管理CSS名称的更改,尽管不会比其他方法更多。我还缺少其他考虑因素吗?

在外部CSS设计者参与的情况下,是否有构建GWT应用程序的最佳实践?

如果您的团队不熟悉HTML/CSS/JS&GWT/Java。让我们假设你有一个良好的开端,你应该努力做到这一点。然后您想要获得以下CSSGWT的好处:

  • 没有字符串文字类名引用
  • 没有CSS命名空间冲突/污染
  • 最小化CSS类(压缩选择器和属性)
  • CSS规则的编译器优化(组合类似规则),排除未使用的规则
  • CSS有效性和缺失类的编译器时间检查
  • 没有外部CSS文件堆
  • 在远程模式下运行DevMode时没有问题(否则浏览器会提取远程CSS,而不是您正在处理的新CSS)

我发现最好的方法是使用UiBinder&该UiBinder的Java类,全部放在一个地方。请参阅以下示例。根据我的经验,这将产生尽可能强大、压缩、最快、可靠的应用程序,并且不添加额外的文件。

一切都在一个地方:

  • 在使用CSS的UiBinder中定义的CSS
  • Java文件中定义的CSS接口,它们的使用位置

小工具

class MyClass extends Widget {
    ... // jave UI binder class
    public interface MyStyle extends CSSBundle {
        String someClassName();
    }
    @UiField
    MyStyle style;
    ...
    something.setClassName(style.someClassName());
    ...
}

UiBinder

<!-- UiBinder File -->
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'>
    <ui:style type='com.my.app.MyFoo.MyStyle'>
        .someClassName { background-color:pink; }
    </ui:style>
    <div class='{style.someClassName}'>Sample text.</div>
</ui:UiBinder>

我以前问过这个问题,请在这里查看。

这里很难有"最佳实践",因为四种不同的方法在不同的情况下都能很好地工作。根据您使用GWT的方式,将确定使用的最佳选项。

如果您的团队由A)仅Java和B)仅CSS/HTML组成,选项1或2将起作用。但是,如果您的用户体验角色了解GWT和CSS/HTML/XML的集成点(阅读:UiBinder)。此人可能了解如何最好地设置UiBinder,以便最大限度地发挥仅Java角色的功能。

UiBinder+ClientBundle为您的项目增加了一层额外的复杂性。这样做有很多好处,但如果你的团队不适合你,你可能会造成太大的伤害。

"最佳实践"可能包括组织一个主CSS文件(通过ClientBundle或选项1或2使用),该文件的组织方式可以提供整体应用程序的一致性,同时在UiBinders中为本地内容使用特定的样式

如果你想全力以赴,我认为你应该把重点放在最大限度地使用UiBinder和CssSource/ClientBundle(Externs CssResource/ClientBundel的东西)上,并通过提供对UyBinder样式的编程访问

使用外部的东西进行重用+添加一致性

最新更新