本文仅涉及IE浏览器。以下代码的最后一行引起了问题。
int width = 200;
int height = 200;
int overHeight = 40;
AbsolutePanel absPanel = new AbsolutePanel();
absPanel.setSize(width + "px", height + "px");
SimplePanel underPanel = new SimplePanel();
underPanel.setWidth(width + "px");
underPanel.setHeight(height + "px");
underPanel.getElement().getStyle().setBackgroundColor("red");
SimplePanel overPanel = new SimplePanel();
overPanel.setWidth(width + "px");
overPanel.setHeight(overHeight + "px");
overPanel.getElement().getStyle().setBackgroundColor("black");
//Setting the IE opacity to 20% on the black element in order to obtain the see through effect.
overPanel.getElement().getStyle().setProperty("filter", "alpha(opacity=20)");
absPanel.add(underPanel, 0, 0);
absPanel.add(overPanel, 0, 0);
RootPanel.get("test").add(absPanel);
//The next line causes the problem.
absPanel.getElement().getStyle().setProperty("filter", "alpha(opacity=100)");
所以基本上这段代码应该显示一个 200px x 200px 的红色正方形(请查看代码中的“underPanel”),在它的上面是一个 200px x 40px 的黑色矩形(请查看代码中的“overPanel”)。然而,黑色矩形部分透明,透明度设置为20%,因此它应该出现为红色,但比下面坐着的矩形要暗些,因为它实际上是一个褪色的黑色物品。
由于代码的最后一行设置了包含 AbsolutePanel 的不透明度为100%,因此会出现某些渲染问题(理论上不应影响视觉效果)。确实,在这种情况下,上方的面板仍然保持半透明,但直接穿过页面的背景颜色!就好像下面的面板根本不存在...
有什么想法吗?
这是在GWT 2.0和IE7下完成的。