2010-08-30 67 views
0

这是我的问题,我有一个div,里面有2个div,一个居中,另一个固定在左边,问题是当我调整屏幕大小时,居中的div与固定的div重叠,我想要做的是检测当居中的div与其他div重叠并用javascript更改其左侧值时,但没有工作,有什么想法?用javascript移动div

这是我的设计:

<div id="content-wrap"> 
    <div id="content"> 
    </div> 
    <div id="leftbar"> 
    </div> 
</div> 

和CSS:

#content-wrap 
{ 
    clear: both; 
    float: left; 
    width: 100%; 
} 
#content 
{ 
    text-align: left; 
    padding: 0; 
    margin: 0 auto; 
    height: 470px; 
    width: 760px; 
    overflow: auto; 
} 
#leftbar 
{ 
    background-color: transparent; 
    width: 200px; 
    height: 470px; 
    position: absolute; 
    top: 185px; 
    left: 50px; 
} 

,这是javascript代码:

window.onload = function Centrar() { 
    var leftBar = $get("leftbar"); 

    if (leftBar != null) { 
     var content = $get("content"); 
     var size = leftBar.offsetLeft + leftBar.offsetWidth; 
     if (content.offsetLeft < size) {    
      content.style.left = size + 20 + 'px'; 
      }    
    } 
} 

预先感谢任何帮助。

+0

你不需要追加'px'。 – Fosco 2010-08-30 12:18:42

+0

如果我不添加'px',div的属性“left”不会被修改。 – Argons 2010-08-30 12:23:31

+0

Fosco,左侧的CSS值需要px,除非值为0. – Lekensteyn 2010-08-30 12:26:28

回答

1

最简单的解决将是应用min-width#content-wrap容器防止发生重叠:

#content-wrap { 
    clear: both; 
    float: left; 
    width: 100%; 

    /* #leftbar width x 2 + #content width */ 
    min-width: 1160px; 
} 

但是,如果你想使用JavaScript,你需要将代码附加到窗口负载和调整事件:

$(window).bind('load resize', function() { 
    var content = $('#content'); 
    var leftbar = $('#leftbar'); 

    // get the right edge of the #leftbar 
    var leftbarEdge = leftbar.width() + leftbar.offset().left; 

    // check if an overlap has occured and adjust #content left position if yes 
    if (leftbarEdge > content.offset().left) { 
     content.css({ 
      left: leftbarEdge - content.offset().left 
     }); 
    } 
}); 

你需要申请得到这个工作是设置#contentposition: relative在CSS所以它尊重left属性哟最后改变你用Javascript设置:

#content { 
    position: relative; 
    /* remaining css */ 
} 

你可以看到它in action here

+0

OP似乎没有使用jQuery。 – lincolnk 2010-08-30 13:35:20

+1

我注意到在OP的代码片段中,但问题是用jQuery标记的,所以我想了解为什么不。最终,他们应该通过在他们的'#content' CSS中增加'position:relative'来工作。 – Pat 2010-08-30 13:56:15