带有 CSS 的 GWT Html 文件

2024-03-19

当我使用 GWT 插件创建新项目时,它会为我创建一个框架项目。在html文件中有一条注释说“考虑内联 CSS 以减少请求的文件数量”为什么我要考虑使用内联CSS?我很难将 css 放在单独的文件中而不是内联,会减少文件的大小吗?不是吗?


答案在于 GWT 的运行方式。由于 GWT 每个模块加载只有一个页面加载,因此内联缓存并没有真正发挥作用。

如果您只想得到答案:内联 CSS 减少了加载组成项目的所有文件所需的 TCP/IP 连接数量。考虑到您可能有多个 CSS 文件、高延迟和其他网络条件,这可能很重要。在我的工作(州政府)中,并不总是能保证你有一个“粗管道”。

GWT(或者至少是gwt-incubator)有一种将内联CSS的优化与信息和布局的分离相结合的机制。

输入 ImmutableResources 和 StyleInjector。这两件事(组合起来)导致了一种加载不可变(编译后)资源的方法。

要使用它们,请首先下载 gwt-incubator。然后将所需的库添加到 module.gwt.xml 中

<!-- immutable resources and injecting styles -->
<inherits name="com.google.gwt.libideas.ImmutableResources" />
<inherits name="com.google.gwt.libideas.StyleInjector" />

完成后,创建 CSS 文件:code资源。我将我的保留在源路径中,例如“org.project.client.resources.*”。您可以将它们保存在单独的段中,例如:header.css、body.css、table.css。疯狂吧,真的按照你想要的方式把事情分开。您的文件路径应类似于“/src/org/project/client/resources/header.css”。

现在,创建 CSS 界面。现在,您可以用它做一些相当特别的事情看这里 http://code.google.com/p/google-web-toolkit-incubator/wiki/CssResource。但我只是选择了基本的。

import com.google.gwt.libideas.resources.client.CssResource;

public interface Css extends CssResource {

}

现在您已经有了 CssResource 类(并且可以有不同的类),您需要创建一个包含所有 CSS 文件的不可变资源包。

import com.google.gwt.core.client.GWT;
import com.google.gwt.libideas.resources.client.ImmutableResourceBundle;

public interface ResourceBundle extends ImmutableResourceBundle {

    public static final ResourceBundle INSTANCE = GWT.create(ResourceBundle.class);

    /*
     * =============================
     * CSS
     * =============================
     */

        @Resource("org/project/client/resources/header.css")
        public Css headerCss();

        @Resource("org/project/client/resources/body.css")
        public Css bodyCss();
}

这将在编译时创建指向不可变 CSS 资源的链接。现在我们需要put以某种方式将这些 CSS 资源(插入)到模块中。这就是 StyleInjector 的用武之地。

我将类似于以下内容的代码放入入口点的“onModuleLoad”方法中。

StyleInjector.injectStylesheet(ResourceBundle.INSTANCE.headerCss().getText());
StyleInjector.injectStylesheet(ResourceBundle.INSTANCE.bodyCss().getText());

可能还有其他方法可以在 GWT 中实现相同的效果,但 CssResource 的强大功能可以用于比我在这里介绍的更多的事情。例如:在我的一个项目中,我需要对 CSS 进行一点小小的更改,以使 IE 和 Firefox 能够正确呈现我认为正确的内容。我的 global.css 中有两个特定于浏览器的小部分,如下所示:

/* fix ie floating quirk */
@if user.agent ie6 ie7 ie8 {
    #someElement {
        top: -21px;
        right: 5px;
    }
}

/* fix firefox floating quirk */
@if user.agent ff gecko mozilla firefox Gecko Mozilla moz gecko1_8 {
    #someElement {
        top: -14px;
    }
}

能够将这种逻辑从我的 JavaScript/Java 中剔除真是太好了。这里还有一个小的优化,因为 GWT 只会为需要它的浏览器进行注入。 (基于浏览器的延迟绑定是 GWT 中许多功能的工作方式。)

因此,提供内联 CSS 的机制在保持 CSS 分离的同时还提供了其他好处。

不去爱的种种?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 CSS 的 GWT Html 文件 的相关文章

随机推荐

  • 提取元素并插入空格

    我在 python 中使用 BeautifulSoup 解析 html 我不知道如何在提取文本元素时插入空格 这是代码 import BeautifulSoup soup BeautifulSoup BeautifulSoup this b
  • c3p0 ResultSet.unwrap 抛出 AbstractMethodError

    我有一个 ResultSet 对象 需要将其转换为 OracleResultSet 以便我可以对其调用 getOPAQUE String 方法 我使用 c3p0 作为我的连接池 问题在于 c3p0 将 ResultSet 包装在 NewPr
  • 如何让 sphinx 在构建 html 时查找 virtualenv 中的模块?

    我想使用 virtualenv 而不是我机器上的本机环境来构建 html 文档 我已经进入 virtualenv 但当我运行时make html我收到错误消息 提示模块无法导入 Iknow这些错误是由于该模块在我的本机环境中不可用造成的 如
  • 我可以为 Istio 预置的经典 AWS ELB 定义子域吗?

    我将 Istio 部署在 AWS EKS 托管的 Kubernetes 集群中 这创建了一个名为 istio ingressgateway 的 LoadBalancer 类型的 Kubernetes 服务 其外部主机名为 redacted
  • 未找到基表或视图:1146 表

    Error 照亮 数据库 QueryException 42S02 SQLSTATE 42S02 未找到基表或视图 1146 表 mmictltd admins 不存在 SQL select fromadmins where email 电
  • 当我尝试更新实体框架中的模型时,为什么会出现“无法更新实体集,因为它有 DefiningQuery...”异常?

    使用实体框架借助 LINQ to SQL 进行更新时 会引发异常 System Data UpdateException Unable to update the EntitySet t emp because it has a Defin
  • Java 中有类似 PHP 的三元运算符的简短版本吗?

    在 PHP 中 三元运算符有一个简短的版本 expr1 expr2 expr3 变成 expr1 expr3 简短版本返回 true 时 expr1 的结果和 false 时 expr3 的结果 这允许很酷的代码可以根据自己的当前状态填充变
  • 用两个 CGPoints SpriteKit Swift 创建一条线

    我正在尝试制作一个简单的应用程序 您触摸一个点 无论您触摸哪里 精灵都会沿着一条线穿过该点到达屏幕边缘 我想绘制连接精灵原点 它的起点 和您触摸的点的线段 以及精灵原点和屏幕边缘终点之间的线段 这样我就可以可视化路径精灵以及原点 触摸点和终
  • 如何防止 Visual Studio 2012 扩展 MSBuild 4 通配符?

    我最近将我们的构建平台从基于 rake 的古老构建 别问 认真的 迁移到使用 msbuild 的构建平台 因为我们的许多团队成员不使用 Visual Studio 再次强调 不要问 他们习惯于将 cs 文件放入项目文件夹中 然后让它神奇地作
  • 带参数导航返回的 React Router 需要双击

    简单的问题 当我处于例如 dashboard路由器 我点击路由器并尝试返回 dashboard它对葡萄酒有效 但是从什么时候开始 users userID我导航到另一个路由器 users userID路由器并尝试返回我需要单击后退按钮两次
  • R:在数据框或矩阵中使用 t.test 函数[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 询问代码的问题必须对所解决的问题表现出最低限度的了解 包括尝试的解决方案 为什么它们不起作用以及预期结果 也可以看看 Stack Over
  • c# httpwebrequest getResponse() 冻结并挂起我的程序

    我试图使用 httpwebrequest 在远程服务器上使用类似于休息的服务 从第一次执行本身开始 我的代码就挂起了程序 然后我尝试将它作为控制台应用程序 以确保它与程序本身无关 但没有运气 string credentialsJson u
  • TreeView — 选定的节点样式不会出现在选定的节点上

    我的代码是
  • Java 项目的 SLOC

    我需要一个免费工具来计算 Java 项目的 SLOC 我只需要以下指标 SLOC 注释行数 可选地javadoc 指标 可选地按文件类型 java js css html xml 等 对统计信息进行排序 Bonus 100 Java 我不喜
  • Python Base 36 编码

    如何在 Python 中以 36 为基数对整数进行编码 然后再次解码 您尝试过维基百科的示例代码吗 def base36encode number alphabet 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • Django TypeError:没有主键值的模型实例是不可散列的

    我有我的models py如下 class Article models Model date models DateTimeField null True blank True title models TextField default
  • 如何根据用户摘要生成随机 5 位数字

    大家好 我尝试根据用户总摘要生成 50 个 5 位数字 例如 用户给出 500000 然后我需要随机数 5 位乘 50 个数字等于 500000 我尝试了这个 但它不是 5 位数字 int balane 500000 int nums 50
  • 双向git镜像

    我有兴趣将本地 git 存储库设置为远程存储库的镜像 我读过一些可能相关的帖子 但主要区别是我需要对两个存储库具有读写访问权限 大多数时候 用户将针对 Repo A 进行工作 但有时他们会针对 Repo B 进行工作 并且这些需要通过服务器
  • 统计某个时间段之前和之后存在的值

    我有以下简单的表格 您也可以在SQL Fiddle here http www sqlfiddle com 9 74d8fb 3 CREATE TABLE Orders Customer TEXT Order Date DATE INSER
  • 带有 CSS 的 GWT Html 文件

    当我使用 GWT 插件创建新项目时 它会为我创建一个框架项目 在html文件中有一条注释说 考虑内联 CSS 以减少请求的文件数量 为什么我要考虑使用内联CSS 我很难将 css 放在单独的文件中而不是内联 会减少文件的大小吗 不是吗 答案