【问题标题】:Responsive background images响应式背景图片
【发布时间】:2015-04-12 23:35:57
【问题描述】:

目前,我正在构建一个通过 JavaScript 设置响应式背景图像的解决方案。我正在使用 Picturefill 创建跨浏览器支持。

我需要什么?我的页面上有一个元素需要一张非常小的背景照片。在页面上有一个图片元素,可以有条件地加载图像。但是,如果浏览器没有适当的图片元素支持,我会指定一个默认图像源。

使用 MooTools 我检查应该在 domready 上显示的照片,在调整窗口大小时我再次检查我的图像“src”以在需要时替换我当前的图片(用更大或更小的图片)。

在 FireFox 中,图片元素替换了 DOM 中的图像“src”,效果很好!

Chrome(和 IE)不会替换图像“src”,因此我的照片将始终具有根据 MooTools 的默认照片尺寸。但是,当您通过 Chrome 开发者工具将鼠标悬停在图像“src”上时,它会显示该媒体查询的正确图像源。

我可以得到太多细节,但相信我,我真的需要像上面提到的那样做,谁愿意帮助我? :)

<script>
    var Placeholder = $('Placeholder');

    var CoverImage = $('MyCover').getElement('img').src;

    Placeholder.setStyle('background-image', 'url(' + CoverImage + ')');

    var $timer = null;

    window.addEvent('resize', function(){

        var ResponsiveImage = function(){

            var $ResponsiveImage = $('MyCover').getElement('img').src;

            $('Placeholder').setStyle('background-image', 'url(' + $ResponsiveImage + ')');
        };

        clearTimeout($timer);
        $timer = ResponsiveImage.delay(250, this);
    });
</script>

<picture>
    <source media="all and (max-width: 30em)" srcset="1.jpg">
    <source media="all and (min-width: 30.063em) and (max-width: 48em)" srcset="2.jpg">
    <source media="all and (min-width: 48.063em) and (max-width: 80em)" srcset="3.jpg">
    <source media="all and (min-width: 80.063em)" srcset="4.jpg">

    <img src="2.jpg">
</picture>

感谢可能的解决方案,非常感谢!

干杯, 斯蒂芬

【问题讨论】:

  • 你能在这个问题中添加一个 jsFiddle 吗?那么我们可以更好地帮助您。我认为picture 元素is not supported in FF or IE yet... 你不能用img 元素做到这一点吗?

标签: javascript html responsive-design mootools picturefill


【解决方案1】:

也许我不完全理解您要做什么,但与其尝试使用脚本来控制尺寸,为什么不使用 CSS 属性 background-size: cover; 来代替?这就是我一直使用的响应式背景图像,而不是浏览器广泛支持它。

【讨论】:

  • 我只想根据媒体查询加载不同的图像。这是一个图像质量问题,我确实使用了封面,但我希望我的图像尺寸更准确一点,以便根据媒体查询看起来更好。
【解决方案2】:

你真的应该看看http://foundation.zurb.com/docs/components/interchange.html

也许您可以获取脚本并根据您的情况进行调整?

【讨论】:

  • 看起来不错,但我更喜欢使用完整且有效的 HTML,我会牢记这一点。谢谢!
  • 我认为它是有效的 HTML5。
【解决方案3】:

首先是你的标记:

  1. 在图片领域,您不需要使用最小宽度和最大宽度。第一个匹配的来源是使用的媒体查询:

    <picture><source media="(max-width: 30em)" srcset="1.jpg">
    <source media="(max-width: 48em)" srcset="2.jpg">
    <source media="(max-width: 80em)" srcset="3.jpg">
    <source srcset="4.jpg">
    <img src="2.jpg"></picture>
    
  2. 1234563使用调整大小,使用load)。

幸运的是,已经有一个名为 bgset 的简单 lazySizes 插件,它完全可以满足您的需求。在这里你可以找到a demo,在这里你可以找到the documentation。当然您也可以查看源代码并自己构建。

如果你想使用插件,你的标记会变成这样:

<div class="lazyload" data-bgset="1.jpg [(max-width: 30em)] | 2.jpg [(max-width: 48em)] | 3.jpg [(max-width: 80em)] | 4.jpg"></div>

【讨论】:

  • 首先感谢您的意见!我一直认为 currentSrc 仅用于视频和音频使用。你有关于图像的例子吗?因为那将是我的解决方案! :) 关于我的标记,我知道你可以用不同的方式编写它,但我上面看到的标记是有意的,但无论如何感谢您的建议!感谢您花时间给我一些指示/方向。干杯,斯特凡
  • 只需查看上面演示的生成的 DOM。您将看到脚本正在生成此图片/img 标记(因为不显示 div 元素的子元素)。以及脚本如何使用 currentSrc:github.com/aFarkas/lazysizes/blob/gh-pages/plugins/bgset/…
【解决方案4】:

我正在使用 currentSrc 属性来获取更新的图像源,它就像一个魅力!感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 2015-08-04
    • 2013-04-21
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    相关资源
    最近更新 更多