如何以布局引擎友好的方式更改vaadin中标签的字体大小?

如何以布局引擎友好的方式更改vaadin中标签的字体大小?,vaadin,Vaadin,假设我有一个标签: Label myLabel = new Label(_("I am smaller than normal text")); myLabel.setSizeUndefined(); (其中是您最喜欢的本地化功能) 我希望它比平时小一些。由于没有专门的标签方法来实现这一点,我必须求助于添加“原始”CSS规则,例如: CSSInject cssSmall = new CSSInject(".small { font-size: small; }"); myPage.addCom

假设我有一个标签:

Label myLabel = new Label(_("I am smaller than normal text"));
myLabel.setSizeUndefined();
(其中
是您最喜欢的本地化功能)

我希望它比平时小一些。由于没有专门的标签方法来实现这一点,我必须求助于添加“原始”CSS规则,例如:

CSSInject cssSmall = new CSSInject(".small { font-size: small; }");
myPage.addComponent(cssSmall);
myLabel.addStyleName("small");
myPage.addComponent(myLabel);
那是唯一可行的办法。是的,文本较小,但在第一次构建页面时,Vaadin将标签的大小设置为常规字体大小。当有东西导致页面被重新绘制/重新绘制时,Vaadin意识到发生了什么,并为标签提供了正确的大小

当标签变短而不是变高时,这会导致页面明显“跳跃”


如何解决这个问题?

既然您的情况看起来很危急,而且主题也没有选择余地,您可以将标签的内容包装成HTML格式(如果您多次需要,可以将其作为一个类)

它看起来像这样(这是Groovy,但很容易翻译成Java或您正在使用的任何东西:

new Label("<span style='font-size:small'>${StringEscapeUtils.escapeHtml4('&somesmalltext')}<span>").with{
    contentMode = ContentMode.HTML
    it
}
然后在标签上设置样式:

  myLabel.addStyleName("small")

为什么不使用主题?你可以确定样式在那里,并且浏览器中不应该有恶意的小插曲。@cfrick如果使用主题意味着这不会发生,那么我将接受它作为一个答案,即使我无法使用特定的方法。也许可以在你的问题中将其作为一个编辑(你不能使用主题(为什么不顺便说一下?),所以可以为您的问题发布一些有效的答案,在您进行此操作时,还可以添加您的vaadin版本,如果这是liferay或not@cfrick现在在移动设备上。是的,我们正在使用liferay和websphere。我不记得是哪个版本的vaadin。我们没有编写vaadin项目。我们正在使用的专有体系结构有一个vaadin项目这定义了一个通用portlet,并在运行时使用spring加载实际代码。我们必须手工编写所有管道代码,并且没有明显的方法将我们自己的CSS添加到全局规则集。(通常更改意味着服务器重新启动。)大多数现有代码将包含HTML片段的字符串连接在一起(哦,嗨,XSS)。第一个代码块中的“it”行是关于什么的?忽略它。它只返回标签“it”本身。
with
是groovy中的某个
映射。
  myLabel.addStyleName("small")