Ing*_*nix 21 html css responsive-design
我正在尝试在将其输出到客户端时优化我的网站的大小.缓存时,我降至1.9MB和29KB.问题是第一个负载包含的图像对于移动设备来说是非常不优化的; 它具有1080p分辨率.
所以我正在寻找一种方法,允许我首先加载低分辨率版本(min.bg.jpg),一旦网站加载,使用高分辨率版本 - 或甚至一个分辨率接近正在使用的设备(NNNxNNN.bg.jpg或只是bg.jpg) .
使用CSS设置背景就像每个人都期望的那样.它应用于正文,整个语句如下所示:
body {
background: url("/cdn/theme/images/bg.jpg");
color: white;
height: 100%;
width: 100%;
background-repeat: no-repeat;
background-position: 50% 50%;
background-attachment: fixed;
}
Run Code Online (Sandbox Code Playgroud)
现在,我想改变它来min.bg.jpg代替第一次加载,然后像这样:
jQuery(function(){
jQuery("body").[...]
});
Run Code Online (Sandbox Code Playgroud)
我以哪种方式异步下载新背景,然后将其作为新的CSS背景图像插入?
为了显示一些差异,这里是我用于测试的主要和迷你版本的示例:
Ingwie@Ingwies-Macbook-Pro.local ~/Work/BIRD3/cdn/theme/images $ file *.jpg
bg.jpg: JPEG image data, EXIF standard
min.bg.jpg: JPEG image data, JFIF standard 1.01
Ingwie@Ingwies-Macbook-Pro.local ~/Work/BIRD3/cdn/theme/images $ du -h *.jpg
1,0M bg.jpg
620K min.bg.jpg
Run Code Online (Sandbox Code Playgroud)
Mil*_*ern 26
我们试试一个基本的:
<img border="0"
style="background:url(http://i.stack.imgur.com/zWfJ5.jpg) no-repeat;
width:1920px;
height:1200px"
src="http://i.stack.imgur.com/XOYra.jpg" width="1920" height="1200" />
Run Code Online (Sandbox Code Playgroud)
zWfJ5.jpg是低分辨率版本,XOYra.jpg是高分辨率版本.
如果有办法安排加载,那么首先显示背景图像,这可能是我能想到的最简单的.
结果:
jsFiddled here(这需要一个更大的图像来加载比较.)
小智 16
有点晚了,但你可以使用这个非常简单的解决方案:你可以将两个图像放在css背景中:
background-image: url("high-res.jpg"),url("low-res.jpg");
Run Code Online (Sandbox Code Playgroud)
浏览器将显示低分辨率图像,然后在加载时显示低分辨率的高分辨率.
Ala*_* M. 15
这是我用的方法......
CSS:
#div_whatever {
position: whatever;
background-repeat: no-repeat;
background-position: whatever whatever;
background-image: url(dir/image.jpg);
/* image.jpg is a low-resolution at 30% quality. */
}
#img_highQuality {
display: none;
}
Run Code Online (Sandbox Code Playgroud)
HTML:
<img id="img_highQuality" src="dir/image.png">
<!-- img.png is a full-resolution image. -->
<div id="div_whatever"></div>
Run Code Online (Sandbox Code Playgroud)
JQUERY:
$("#img_highQuality").off().on("load", function() {
$("#div_whatever").css({
"background-image" : "url(dir/image.png)"
});
});
// Side note: I usually define CSS arrays because
// I inevitably want to go back and add another
// property at some point.
Run Code Online (Sandbox Code Playgroud)
怎么了:
PURE JS VERSION
这个例子对于改变一个元素到多个元素是有效的.
CSS:
.hidden {
display: none;
}
#div_whatever {
position: whatever;
background-repeat: no-repeat;
background-position: whatever whatever;
background-image: url(dir/image.jpg);
/* image.jpg is a low-resolution at 30% quality. */
}
Run Code Online (Sandbox Code Playgroud)
HTML:
<div id="div_whatever"></div>
<img id="img_whatever" class="hidden" src="dir/image.png" onload="upgradeImage(this);">
Run Code Online (Sandbox Code Playgroud)
JAVASCRIPT:
function upgradeImage(object) {
var id = object.id;
var target = "div_" + id.substring(4);
document.getElementById(target).style.backgroundImage = "url(" + object.src + ")";
}
Run Code Online (Sandbox Code Playgroud)
更新/增强(1/31/2017)
这个增强的灵感来自gdbj的优点,即我的解决方案导致在三个位置指定图像路径.虽然我没有使用gdbj的addClass()技术,但是修改了以下jQuery代码以提取图像路径(而不是将其硬连线到jQuery代码中).更重要的是,该版本允许多个低分辨率到高分辨率的图像替换.
CSS
.img_highres {
display: none;
}
#div_whatever1 {
width: 100px;
height: 100px;
background-repeat: no-repeat;
background-position: center center;
background-image: url(PATH_TO_LOW_RES_PHOTO_1);
}
#div_whatever2 {
width: 200px;
height: 200px;
background-repeat: no-repeat;
background-position: center center;
background-image: url(PATH_TO_LOW_RES_PHOTO_2);
}
Run Code Online (Sandbox Code Playgroud)
HTML
<div id="div_whatever1"></div>
<img id="img_whatever1" class="img_highres" src="PATH_TO_HIGH_RES_PHOTO_1">
<div id="div_whatever2"></div>
<img id="img_whatever2" class="img_highres" src="PATH_TO_HIGH_RES_PHOTO_2">
Run Code Online (Sandbox Code Playgroud)
JQUERY
$(function() {
$(".img_highres").off().on("load", function() {
var id = $(this).attr("id");
var highres = $(this).attr("src").toString();
var target = "#div_" + id.substring(4);
$(target).css("background-image", "url(" + highres + ")");
});
});
Run Code Online (Sandbox Code Playgroud)
发生什么事:
| 归档时间: |
|
| 查看次数: |
22652 次 |
| 最近记录: |