1

我已经创建了我要解决的问题的简化版本。请看一下

HTML:

<div class="container">
<div class="bg-left">
<div class="content">
        Some content here
</div>
</div>
</div>

CSS:

.container {
   display: block;
   height: 200px;
   width: 100%;
   background-color: #e2e2e2;
}

.bg-left {
   background-image: url('http://i.imgur.com/hDheuGJ.png');
   background-repeat:no-repeat;
   background-position: 0px 0px;
   width: 100%;
   height: 100%;
}

.content {
   width: 960px;
   margin: 0 auto;
   font-size: 20px;
}

JSFiddle:http: //jsfiddle.net/gnPC6/

此代码包含:

1) 100% 宽度的 DIV,其中包含位于左上角的背景图像(即黑色三角形)

2) 在这个 div 中有另一个 div,例如 960px 宽和居中。一些内容会放在这里。

问题:如果调整浏览器窗口的宽度,左上角的黑色三角形仍然可见,结果是这张图片遮住了前景内容。

因此,我想要实现的是:

1)如果用户的浏览器被调整到1050px或以下,那么黑色三角形的背景位置会调整,使得浏览器调整得越多,黑色三角形就越不明显(即背景图像动态滑出屏幕向左转)...

如果用户窗口为 1051px 或以上,背景位置应保持为 0px 0px;

如果用户窗口是 1050px,background-position 应该是 0px -1px;

如果用户窗口为 1049px,则 background-position 应为 0px -2px;

如果用户窗口是 1048px,background-position 应该是 0px -3px;等等

这本质上是我想要实现的目标,但我不知道从哪里开始使用 Javascript 来解决这个问题。

如果您有任何建议,请告诉我,非常感谢!

编辑我知道媒体查询,但我不相信他们能有效地解决这个问题。我不想仅仅根据浏览器的宽度更改 CSS,我希望背景位置随着浏览器大小的调整而动态变化。为此,我确信需要一个 javscript 解决方案,而不是数百个 @media 声明

4

3 回答 3

1

一旦你找到了发生重叠的断点,你可以使用这样的东西来覆盖更窄的浏览器视口:

http://jsfiddle.net/gnPC6/21/

.container {
    background-color: #e2e2e2;
    display: block;
    width: 100%;
    overflow: hidden;
}
.content {
    width: 300px;
    margin: 0 auto;
    font-size: 20px;
    position: relative;
}

.content:before {
    background-image: url('http://i.imgur.com/hDheuGJ.png');
    background-repeat:no-repeat;
    background-position: 0px 0px;
    width: 150px;
    height: 150px;
    content: '';
    display: block;
    position: absolute;
    left: -125px;
}
于 2013-10-18T16:51:44.337 回答
1

你可以做这样的事情(使用jquery):http: //jsfiddle.net/spacebean/gnPC6/18/

显然,您需要拉伸浏览器才能以正确的尺寸查看它。

<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
function debouncer(func) 
{   
    var timeoutID, timeout = 100;
    return function () 
    {
        var scope = this, args = arguments;
        clearTimeout(timeoutID);
        timeoutID = setTimeout(function () 
        {
            func.apply(scope, Array.prototype.slice.call(args));
        }, timeout);
    };
}

$(window).resize(debouncer(function () 
{
    bgResize($(document));

}));

     function bgResize(){

    var thisWidth = $(document).width(),
        offSet = thisWidth - 1051;

    if(offSet < 0) {
        $('.bg-left').css({'background-position': offSet+'px 0px'});   
    }     
}    

$( document ).ready(bgResize);

</script>

超时/去抖动是为了防止脚本在浏览器移动的每个像素处触发,而是在触发前将其限制为十分之一秒。如果您不关心一次创建可能数百个函数调用,您可以这样做:

   $(window).resize(bgResize);

     function bgResize(){

    var thisWidth = $(document).width(),
        offSet = thisWidth - 1051;

    if(offSet < 0) {
        $('.bg-left').css({'background-position': offSet+'px 0px'});   
    }     
}    

$( document ).ready(bgResize);
于 2013-10-18T16:02:45.723 回答
0

最简单的方法是使用我主要用来根据窗口大小调整字体大小的少量 jQuery。每次都能完美运行...

  1. 检查窗口宽度
  2. 为宽度创建一个 var
  3. 根据整体宽度的一小部分更改css

您可以轻松地从我的小提琴中修改代码以更改背景位置的 css。您还可以根据需要添加任意多行的 css 来更改其他 css 元素:

   $(document).ready(function() {
function checkWidth() {
var windowSize = $(window).width();
$('#num').css( "font-size", windowSize / 4 );

等等在小提琴...

http://jsfiddle.net/insitemobile/xhP8k

于 2013-10-23T12:56:06.137 回答