我创建了一个包含多个不同页面的 Bootstrap 3.2.0 网站。每个不同的页面都有自己的全身背景图像。我现在已经走了最简单的路线,为每个页面制作不同的CSS文件bodycssforthispage.css
。 bodycssforthispage.css
仅包含以下代码,然后覆盖Bootstraps原始正文定义:
html,body {
height:100%;
background-color: #333;
background-image: url(../img/bg-image.jpg);
background-repeat:no-repeat;
background-size:cover;
background-position:center;
background-attachment: fixed;
}
现在我想要做的是预加载所有其他网站相关的CSS文件,这样当我从index.html
转到page1.html
时,所有都需要的文件(CSS-已经预先加载到浏览器缓存的背景和图像文件,并且转换到下一页是顺利的。重要的是要注意,我想要预加载整个CSS文件及其内容。
我可以通过将这个简单的代码放在索引页的底部来预加载JavaScript所需的所有图像:
<script type="text/javascript">
if (document.images) {
img1 = new Image();
img1.src = "img/bg1.jpg";
img2 = new Image();
img2.src = "img/bg2.jpg";
}
</script>
</body>
</html>
然后只为每个不同的页面创建bgforthisandthatpage.css
,仅包含:
html,body {
height:100%;
background-color: #777;
background-image: url(../img/bg-imageforthispage.jpg);
background-repeat:no-repeat;
background-size:cover;
background-position:center;
background-attachment: fixed;
}
这将是一个简单的解决方案,但它包含许多不同的.css-files
。预加载5-10个CSS文件应该在页面底部完成,这样页面本身就可以顺利加载(就像在带有许多其他脚本的Bootstrap中一样)。
据我所知(正确,如果我错了)预加载整个CSS文件(即通过JavaScript)可能会导致级联样式相互覆盖,这样页面就会使用最底层的CSS文件(s)数据(在我的情况下是bg-image等)。
在我看来,仅为变化的背景图像预加载许多不同的CSS文件并不方便。
为每个页面赋予它自己的类:
<html class="contactpage-bg-image">
然后为每个页面创建自己的类到原始的css文件中,如下所示:
html.contactpage-bg-image {
/* styling */
}
html.indexpage-bg-image {
/* styling */
}
如果图片尺寸较大且图片很多,则会对index.html
加载时间产生很大影响,因为它会加载.css file
中提到的所有图片(如您所知, .css的代码位于页面顶部和标签之间。)
最好的方法是:
a)使用一些时髦的预加载功能更改不同页面的背景图像(请注意,bg-image 已在主体中,因为我的网站中有一些fadeloader.js内容),以及;
b)有没有更好的方法可以为每个网站制作thispagesbg-image.css
文件;
c)随意提出自己的想法来做到这一点!
解决方案更适合在Javascript,jQuery或与css的某些混合(或者最适合最有效地完成此任务)中完成。
经过2个小时的理解谷歌搜索后,我只想出了什么。我发现了这个Pre-loading external files (CSS, JavaScript) for other pages,但我认为这会在我的页面加载之前加载所有内容。我现在为<html>
上的每个页面mypagesCustomCSS.css
创建了一个类(并根据需要复制它):
html.page1ClassH, html.page1ClassHere body {
background-image:url(../img/bg-for-page1.jpg);
}
html.page2ClassHere, html.page2ClassHere body {
background-image:url(../img/bg-for-page2.jpg);
}
然后我在index.html
之前将图片预加载 JavaScript放在</body> tag
的底部:
<script>
$(window).on('load', function() {
if (document.images) {
img1 = new Image();
img1.src = "img/bg-for-page1.jpg";
img2 = new Image();
img2.src = "img/bg-for-page2.jpg";
}
});
</script>
这就是现在的诀窍!正如我之前提到的,我通过iPhone 4使用此页面并缓慢连接3G,因此预加载至关重要。
我的网站仍然遇到一些问题,因为它滞后很多。也许我应该调整那些超大尺寸的图像,然后再试一次。试试:http://www.kolumbus.fi/~g636221/jano/index.html
答案 0 :(得分:2)
解决方案2看起来不错,因为您不需要创建多个css文件+将在第一个请求时缓存。但有一点澄清,只有页面上使用的css类的图像才会在这里下载。
所以现在,唯一的任务仍然是为用户即将浏览的其他页面预加载资源。为此,您可以创建一个javascript文件或jQuery代码,在完全加载当前页面后下载资源。
jQuery文件(代码)
var pages = ["class1", "class2", "class3"]; //Declare all pages here
window.onload = windowloaded();
function windowloaded()
{
for(i=0; i < pages.length; i++)
{
$("div#preloader").append("<div class='" + pages[i] + "'></div>"); //This will load all other resources automatically as css classes are already present on the current page.
}
}
HTML代码(在页面的任何位置添加到所有页面。这仍然不可见,并负责预加载其他页面的资源。)
<div id="preloader"></div>
CSS修改(所有网页的单个CSS)
div#preloader { display : none; }
替换它:
html.contactpage-bg-image {
/* styling */
}
with:
.contactpage-bg-image {
/* styling */
}
删除html
会使该课程适用于div
,用于预加载图片。
答案 1 :(得分:0)
您可以将所有单独的CSS背景放入整个网站中使用的单个CSS文件中。
为每个背景提供一个类选择器。类似的东西:
CSS
html.backgroundOne, html.backgroundOne body {
/*styles*/
}
html.backgroundTwo, html.backgroundTwo body {
/*styles*/
}
然后在开头<html>
上为每个页面提供相应的课程:
HTML
<html class="backgroundOne">
这样你的CSS就已经可以缓存了。