【问题标题】:Get XY coords & Height/Width of div background image, when using background-size:contain使用 background-size:contain 时,获取 div 背景图像的 XY 坐标和高度/宽度
【发布时间】:2013-01-30 01:46:49
【问题描述】:

我正在设计一个网页,其中包含一张主页背景图片的照片。 图片必须覆盖尽可能多的可用窗口大小,同时保持正确的纵横比。

为此,我有一个带有以下 CSS 的“容器”div:

div.background {
    background-image: url('/Content/Images/Home/main-bg.png');
    background-repeat:no-repeat;
    background-size:contain;
    background-position:center;    
    float:left;
    width:100%;
}

效果很好。

但是,我现在需要在图像上的特定位置放置额外的 dom 元素,这些元素也被缩放到与背景图像相同。

我最初认为使用 JQuery 并读取“background-image-x”、“background-image-y”、“background-image-x”、“background-position-x”和“background-position- y" CSS 属性可能会给我定位附加元素所需的信息。

但是,这些并没有返回所需的信息(例如,image-x 和 image-y 都返回“50%”)。

是否有一些不错且简单(ish)的方法来实现我所需要的......或者我将不得不求助于使用 Javascript 和数学来手动设置背景图像的位置和大小(从而给我我需要的答案)?

我讨厌数学。请不要让我使用它:)

【问题讨论】:

    标签: javascript html css math


    【解决方案1】:

    您可以通过一些非常简单的比较比率来解决这个问题,即图像宽度与图像高度与容器宽度与容器高度的比较。确定图像是水平缩放还是垂直缩放。

    img_ratio = img_width / img_height;
    container_ratio = $(elm).width() / $(elm).height();
    

    接下来,您可以非常简单地计算出偏移量,因为您可以计算出图像缩放的百分比。并将其应用于相反的测量,并将其与容器进行比较。

    if(container_ratio > img_ratio){
        //centered x height 100%
            var scale_percent = $(elm).height() / img_height;
            var scaled_width = img_width * scale_percent;
            var x_offset = ($(elm).width() - scaled_width) / 2;
            offset = [x_offset, 0];
    }else{
        //centered y width 100%
            var scale_percent = $(elm).width() / img_width;
            var scaled_height = img_height * scale_percent;
            var y_offset = ($(elm).height() - scaled_height) / 2;
            offset = [0, y_offset];
    }
    

    我已将其包含在一个示例小提琴中:http://jsfiddle.net/y2LE4/

    【讨论】:

    • 我昨晚在远离互联网的时候自己想出了一个答案。你给出的内容几乎是逐字逐句的,所以我接受了你的回复作为正确答案。赞成包含一个例子:)
    • 做得很好。感谢您仍然接受答案。
    【解决方案2】:

    希望能帮到你。

    尝试:

    $(document).ready(function(){
    
    var something = background.offset();
    
     }
    

    $(document).ready(function(){
          var something = $('.background').outerWidth(true);
    }
    

    或者只是宽度特征:http://api.jquery.com/width/

    【讨论】:

    • .offset() 将返回容器 div 的位置,而不是该 div 的缩放背景图像。 .outerWidth() 也是如此。
    猜你喜欢
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多