为什么 WinJS Navigation 应用程序将 css 应用到任何已访问的页面?
Why does WinJS Navigation app apply css to any visited page?
我开发了 WinJS 导航应用程序 (Windows 8.1/WP 8.1),但有一个问题:我已将 .css 文件link编辑为只有一个 .html 文件,但是当我转到任何其他 .html 页面时,如果它有任何相同的 class 然后应用程序应用 .css 我从第一页开始 !
- 我不 link .css 来主持 (default.html).
- 这与我使用的 Visual Studio 无关。
- 我在 WinJS 2.0、3.0 和 4.4.0 中有同样的错误。
有个问题:WinJS为什么要这样做?有任何解决方案或解决方法吗?
您可以在 VS2013 或 VS2015 上重现我的问题:zip(调试 Windows 项目,而不是 WindowsPhone)。
使用 WinJS 导航和页面控件时,"navigations" 发生在 default.html 的单个上下文或任何根应用程序页面内的 DOM 替换,而不是通过转储default.html(以及所有已加载的 CSS/JS)并初始化了一个新的页面上下文。
这种单页导航模型有几个好处:它保留了全局 JavaScript 上下文,并允许您 animations/transitions 将元素移入和移出页面。如果您真的完全导航到一个新页面,您将重置 JS 上下文并且将始终在空白页面中导航。
如您所见,副作用是在页面导航过程中加载的所有 CSS 都是累积的。也就是说,WinJS 中的 "navigation" 不会重置任何上下文,包括 CSS,这可能很难管理。
有几种解决方法:
- 使用全局 CSS 文件并避免使用特定于页面的 CSS 除非您知道某个页面是独一无二的。
- 确保每个页面都有一个顶级 div,其页面名称 class 如
<div class="page1">
,然后在您的 CSS 中确定该页面的所有样式范围使用 .page1 选择器。
- 具体通过修改页眉中的
<link>
标签加载和卸载CSS文件。这确实是卸载 CSS 的唯一方法,但也意味着重新加载和重新解析 CSS 文件,这将导致页面重新呈现。
总的来说,我认为选项 2 是最好的,也是最便携的。
有关更长的文章,请参阅我的免费电子书 Programming Windows Store Apps with HTML, CSS, and JavaScript, 2nd Edition, and I've written up similar material on my blog, http://www.kraigbrockschmidt.com/2013/05/02/css-loading-behaviors-winjs-page-controls/ 第 3 章中的 "Page-Specific Styling" 部分。
我开发了 WinJS 导航应用程序 (Windows 8.1/WP 8.1),但有一个问题:我已将 .css 文件link编辑为只有一个 .html 文件,但是当我转到任何其他 .html 页面时,如果它有任何相同的 class 然后应用程序应用 .css 我从第一页开始 !
- 我不 link .css 来主持 (default.html).
- 这与我使用的 Visual Studio 无关。
- 我在 WinJS 2.0、3.0 和 4.4.0 中有同样的错误。
有个问题:WinJS为什么要这样做?有任何解决方案或解决方法吗?
您可以在 VS2013 或 VS2015 上重现我的问题:zip(调试 Windows 项目,而不是 WindowsPhone)。
使用 WinJS 导航和页面控件时,"navigations" 发生在 default.html 的单个上下文或任何根应用程序页面内的 DOM 替换,而不是通过转储default.html(以及所有已加载的 CSS/JS)并初始化了一个新的页面上下文。
这种单页导航模型有几个好处:它保留了全局 JavaScript 上下文,并允许您 animations/transitions 将元素移入和移出页面。如果您真的完全导航到一个新页面,您将重置 JS 上下文并且将始终在空白页面中导航。
如您所见,副作用是在页面导航过程中加载的所有 CSS 都是累积的。也就是说,WinJS 中的 "navigation" 不会重置任何上下文,包括 CSS,这可能很难管理。 有几种解决方法:
- 使用全局 CSS 文件并避免使用特定于页面的 CSS 除非您知道某个页面是独一无二的。
- 确保每个页面都有一个顶级 div,其页面名称 class 如
<div class="page1">
,然后在您的 CSS 中确定该页面的所有样式范围使用 .page1 选择器。 - 具体通过修改页眉中的
<link>
标签加载和卸载CSS文件。这确实是卸载 CSS 的唯一方法,但也意味着重新加载和重新解析 CSS 文件,这将导致页面重新呈现。
总的来说,我认为选项 2 是最好的,也是最便携的。
有关更长的文章,请参阅我的免费电子书 Programming Windows Store Apps with HTML, CSS, and JavaScript, 2nd Edition, and I've written up similar material on my blog, http://www.kraigbrockschmidt.com/2013/05/02/css-loading-behaviors-winjs-page-controls/ 第 3 章中的 "Page-Specific Styling" 部分。