使用新的苹果MacBook Pro带视网膜屏幕,如果在您的网站上提供“标准”图像,则会有点模糊。因此,您必须提供retina图像。
是否有一种自动切换到像iOS(使用Objective-C)那样的@2x
图像的方法?我发现的是:移动和视网膜显示器上高分辨率图像的CSS,但我希望我能找到一个自动处理所有图像的过程,不使用CSS或JavaScript。
这可能吗?
更新
我想强调这篇有趣的文章,它由@Paul D. Waite推荐,并且有一个有趣的讨论与之相关,由Sebastian链接。
使用新的苹果MacBook Pro带视网膜屏幕,如果在您的网站上提供“标准”图像,则会有点模糊。因此,您必须提供retina图像。
是否有一种自动切换到像iOS(使用Objective-C)那样的@2x
图像的方法?我发现的是:移动和视网膜显示器上高分辨率图像的CSS,但我希望我能找到一个自动处理所有图像的过程,不使用CSS或JavaScript。
这可能吗?
更新
我想强调这篇有趣的文章,它由@Paul D. Waite推荐,并且有一个有趣的讨论与之相关,由Sebastian链接。
<img src="low-res.jpg" srcset="high-res.jpg 2x">
浏览器支持:http://caniuse.com/#search=srcset
其他资源:
src
中提供了x2,这样IE / Opera将始终请求更高分辨率的版本。 - Ricky Boyce<picture>
标签可能成为一个由W3C工作组甚至苹果公司支持的解决方案。由于目前没有人提及显而易见的选择,我想说:在可能的情况下,尽量使用SVG。它们以完美的视网膜分辨率出现,毫不费力。
支持它的浏览器很好,只需要担心IE8这个主要的过时浏览器。压缩后的文件大小通常比位图(png/jpg)格式更小,而且图像更加灵活;您可以在不同的分辨率下重复使用它们并在必要时重新设计样式,这既节省了开发时间又减少了下载带宽。
svg
唯一的问题是在老旧的浏览器上。 - jacoz.retina-background-image( @path, @filename,@extension, @size )
{
.background-size( cover );
background-image: url( "@{path}@{filename}@{extension}" );
@media only screen and ( -webkit-min-device-pixel-ratio: 2 ),
only screen and ( -moz-min-device-pixel-ratio: 2 ),
only screen and ( -o-min-device-pixel-ratio: 2/1 ),
only screen and ( min-device-pixel-ratio: 2 )
{
background-image:url( "@{path}@{filename}@x2@{extension}" );
background-size:@size @size;
}
}
使用示例:
.retina-background-image( "../references/Images/", "start_grey-97_12", ".png", 12px );
这需要你拥有两个文件:
start_grey-97_12.png
start_grey-97_12@2x.png
2x
文件是为视网膜屏幕设计的双倍分辨率文件。
<img src="img.jpg" width="200px" height="200px" />
2x
显示时,JPG压缩的痕迹可能不会被看到。详情请参见:http://blog.netvlies.nl/design-interactie/retina-revolution/。width
/height
属性中没有长度单位。http://www.w3.org/TR/html-markup/img.html#img.attrs.width - Volker E. #image { background: url(image.png); }
@media only screen and (-webkit-min-device-pixel-ratio: 2),
only screen and (-moz-min-device-pixel-ratio: 2),
only screen and (-o-min-device-pixel-ratio: 2/1),
only screen and (min-device-pixel-ratio: 2) {
#image { background: url(image@2x.png); background-size: 50%; }
}
另一种简单的方法是使用以下方法:
只需替换:
<img src="image.jpg" alt="" width="200" height="100" />
使用
<img src="image@2x.jpg" alt="" width="200" height="100" />
image-set
。header {
background: -webkit-image-set( url(images/header.jpg) 1x,
url(images/header_2x.jpg) 2x);
height: 150px; /* height in CSS pixels */
width: 800px; /* width in CSS pixels */
}
我还想分享这两个链接:
使用JSF,您可以创建一个自定义Facelets标签,以免每个图像都需要添加srcset
的繁琐操作。
在您的taglib.xml
中,您可以编写以下内容:
<tag>
<tag-name>img</tag-name>
<source>tags/img.xhtml</source>
<attribute>
<name>src2x</name>
<required>true</required>
<type>java.lang.String</type>
</attribute>
</tag>
而你的标签可能看起来像这样:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<img src="#{fn:replace(src2x, '@2x', '')}"
srcset="#{src2x} 2x"/>
</ui:composition>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:myTag="http://your.com/namespace-of-taglib">
<myTag:src2x="image@2x.jpg"/>
</html>
并将呈现:
<img src="image.jpg"
srcset="image@2x.jpg 2x"/>
<img onload="getImgSrc(this,'image_x1.png')" width="100" height="100" />
JS:
/* RETINA READY IMG SRC */
function getImgSrc(img, src) {
var srcResult = src;
// if high-res screen then change _x1 on _x2
if (window.devicePixelRatio > 1 &&
src.indexOf("_x1.")>=0) {
srcResult = src.replace("_x1.", "_x2.");
}
img.onload = null; //protect from second rasing
img.src = srcResult;
}
$(document).ready(function(){
// fire onload trigger on IMG tags that have empty SRC attribute
var images = $('img:not([src=""])');
images.each(function(i) {
$(this).trigger('onload');
});
});