我想知道在外部CSS开发人员参与设计网站外观的情况下,开发应用程序的最佳实践是什么?
理想情况下,他们将创建CSS文件,我们可以通过多次迭代轻松地将其集成到网站中,开发团队不必对这些文件进行任何操作(显然,会有HTML或模板更改来指向适当的类)。
GWT文档(http://code.google.com/webtoolkit/doc/latest/DevGuideUiCss.html)列出了四种方法:
- 在宿主HTML页面中使用标记
- 使用模块XML文件中的元素
- 使用ClientBundle中包含的CssResource
- 在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样式的编程访问
使用外部的东西进行重用+添加一致性