GWT CssResource中的基本算法

时间:2010-06-18 14:07:11

标签: css gwt math cssresource

我正在寻找一种方法来做这样的事情:

// style.css
@def borderSize '2px';

.style {
  width: borderSize + 2;
  height: borderSize + 2;
}

其中width和height属性的值最终为4px。

4 个答案:

答案 0 :(得分:14)

有时我会使用以下内容:

@eval BORDER_SIZE_PLUS_2 2+2+"px"; /* GWT evaluates this at compile time! */

奇怪的是,只有在+运算符和操作数之间没有任何空格时,这才有效。此外,在@eval中,您不能使用之前由@def定义的常量。但是,您可以在一个Java类中使用定义为静态字段的常量:

@eval BORDER_SIZE_PLUS_2 com.example.MyCssConstants.BORDER_SIZE+2+"px";

或者您可以让Java完全执行计算:

@eval WIDTH com.example.MyCssCalculations.width(); /* static function, 
                                                      no parameters! */
@eval HEIGHT com.example.MyCssCalculations.height();
.style {
    width: WIDTH;
    height: HEIGHT;
}

但我真正想做的事情与你的建议非常相似:

@def BORDER_SIZE 2;
.style {
    width: value(BORDER_SIZE + 2, 'px'); /* not possible */
    height: value(BORDER_SIZE + 3, 'px');
}

我认为在GWT 2.0中不可能。也许你找到了一个更好的解决方案 - 这是关于这个主题的Dev Guide页面。

答案 1 :(得分:1)

使用它的CSS calc()函数,Mozilla并不真正支持它。

这个例子从Ajaxian

无耻地被盗(有归属!)
/*
* Two divs aligned, split up by a 1em margin
*/
#a {
  width:75%;
  margin-right: 1em;
}
#b {
  width: -moz-calc(25% - 1em);
}

它不是跨浏览器,它甚至可能只有最新版本的Firefox几乎不支持,但至少在这方面取得了进展。

答案 2 :(得分:0)

如果在函数中添加参数,也可以在提供者方法中计算:

@eval baseFontSize com.myexample.CssSettingsProvider.getBaseFontSize(0)+"pt";

@eval baseFontSize_plus_1 com.myexample.CssSettingsProvider.getBaseFontSize(1)+"pt";

com.myexample.CssSettingsProvider看起来像这样:

public static int getBaseFontSize(int sizeToAdd) {
    if (true) {
        return 9 + sizeToAdd;
    }
    return baseFontSize;
}

答案 3 :(得分:-3)

我也喜欢这样的事情,但这是不可能的。 即使在CSS 3中,他们也没有这样的计划。

如果你真的想做出类似的东西,一种可能性就是使用 php并配置你的web服务器,以便php解析.css文件。

所以你可以做类似

的事情
<?
  $borderSize = 2;
?>

.style {
  width: <? borderSize+2 ?>px;
  height: <? borderSize+2 ?>px;
}

但由于这不是“标准”方式,我认为最好不要这样做。