div自适应宽度的问题,求高手帮忙!_html/css_WEB-ITnose

在左侧做了一个可以自动伸缩的菜单栏,想让菜单栏展开时,完全展开右面带地图的div,而不是被左面的菜单遮住一部分,该怎么解决?

这是菜单展开的图:搜索

这是菜单隐藏的图:

这是body:
    
         
        
             
            
    
这是样式表:

    #common_box{
     width:280px;
     height :100%;
     position:fixed;
     left:0;
     top:40px;
     border:1px solid #789;
     background:#fff;
     z-index:99
    }
    #cli_on{
     width:10px;
     height:100%;
     float:right;
     cursor:pointer;
     background:#ccc;
     text-align:center;
     line-height:180px;
     font-size:24px;
     color:#f00;
    }
    .mydiv
    {
        position:fixed;
        top:40px;
        left:0px;
        width: 100%;
        height:650px;
        }

这是伸缩菜单的js:
    
//左侧弹出菜单
window.onload = function () {
var common_box = document.getElementById(“common_box”);
var cli_on = document.getElementById(“cli_on”);
var flag = true, r_len = 0, timer = null;
cli_on.onclick = function () {
if (flag) {
r_len = 0;
timer = setInterval(slideright, 10);

} else {
r_len = -270;
timer = setInterval(slideleft, 10);
}
}
function slideright() {
if (r_len <= -270) {
flag = !flag;
cli_on.innerHTML = “”;
clearInterval(timer);
return false;

} else {
r_len -= 5;
common_box.style.left = r_len + “px”;
}
}
function slideleft() {

if (r_len >= 0) {
clearInterval(timer);
flag = !flag;
cli_on.innerHTML = “”;
return false;
} else {
r_len += 5;
common_box.style.left = r_len + “px”;
}
}

}

就是想改成像这个网站论坛首页左面菜单栏的那种感觉。

回复讨论(解决方案)

你这个页面的布局不对啊,你看你使用的是position:fixed。在控制显示位置的,这个很明显的,就会出现覆盖这个问题了。

这个你可以这么处理:
左侧的那块,使用定位处理,而右侧的那块,不使用定位,但是使用一个margin-left来控制左侧空出来的距离

当你左侧的更改时,同时改变右侧的那个margin-left的值就行了。

我这么说,能想明白吗?

mydiv{margin-top:40px;background-color:#eee;height:650px;margin-left:280px;}

登录后复制登录后复制

window.onload = function () {var common_box = document.getElementById("common_box");var cli_on = document.getElementById("cli_on");var mapDiv = document.getElementById("mapDiv");//zhelivar flag = true, r_len = 0, timer = null;cli_on.onclick = function () {if (flag) {r_len = 0;timer = setInterval(slideright, 10);} else {r_len = -270;timer = setInterval(slideleft, 10);}}function slideright() {if (r_len = 0) {clearInterval(timer);flag = !flag;cli_on.innerHTML = "";return false;} else {r_len += 5;common_box.style.left = r_len + "px";mapDiv.style.marginLeft = 270 + r_len + "px";//zheli}}}

登录后复制登录后复制

在你的基础上,稍微改了一点。试试是你要的效果吗?没有测兼容性。

不过,一些效果的话,html部分的布局也是很重要的,先想好布局,之后的js和css写起来,才会更简单的。

感觉应该需要改变div的宽度。用left什么的左右移动菜单和地图,由于之前它们已经绘制完毕了,左右移动时,不是遮盖了自身的一部分(这个效果应该只是左侧菜单需要的),就是由于初始时加载的画面太小已经固定,不能动态适应宽度变化(当你向左侧移动地图时,右侧新增的部分应该不会被自动填充)。
因此,我建议应该在timer的事件中改变两侧div的宽度,同时重新填充div中的内容,使其适应宽度的变化。

nbsp;html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">#common_box{     width:15%;     height :100%;     position:fixed;     left:0;     top:40px;     border:1px solid #789;     background:#fff;     z-index:99; float:left; padding:0;    }    #cli_on{     width:10px;     height:100%;     float:right;     cursor:pointer;     background:#ccc;     text-align:center;     line-height:180px;     font-size:24px;     color:#f00;    }    .mydiv    {        position:fixed;        top:40px;        right:0px;        width: 85%;        height:650px;float: right;padding:0;        }//左侧弹出菜单        window.onload = function () {            var common_box = document.getElementById("common_box");            var cli_on = document.getElementById("cli_on");var mapDiv = document.getElementById("mapDiv");            var flag = true, r_len = 0, timer = null;var mapDiv_width = mapDiv.clientWidth;var common_box_width = common_box.clientWidth;var body_client_width = mapDiv.clientWidth + common_box.clientWidth;            cli_on.onclick = function () {                if (flag) {                    r_len = common_box_width;                    timer = setInterval(slideright, 10);                } else {                    r_len = 0;                    timer = setInterval(slideleft, 10);                }            }            function slideright() {                if (r_len = common_box_width) {                    clearInterval(timer);                    flag = !flag;common_box.style.width = common_box.clientWidth + "px";mapDiv.style.width = mapDiv_width + "px";                    cli_on.innerHTML = "菜单栏";mapDiv.innerHTML = "地图";                    return false;                } else {                    r_len += 5;                    common_box.style.width = r_len + "px";mapDiv.style.width = body_client_width - common_box.clientWidth + "px";mapDiv.innerHTML = "地图";                }            }        }
             
菜单栏
        
    
地图
     

登录后复制登录后复制登录后复制登录后复制

感觉应该需要改变div的宽度。用left什么的左右移动菜单和地图,由于之前它们已经绘制完毕了,左右移动时,不是遮盖了自身的一部分(这个效果应该只是左侧菜单需要的),就是由于初始时加载的画面太小已经固定,不能动态适应宽度变化(当你向左侧移动地图时,右侧新增的部分应该不会被自动填充)。
因此,我建议应该在timer的事件中改变两侧div的宽度,同时重新填充div中的内容,使其适应宽度的变化。

nbsp;html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">#common_box{     width:15%;     height :100%;     position:fixed;     left:0;     top:40px;     border:1px solid #789;     background:#fff;     z-index:99; float:left; padding:0;    }    #cli_on{     width:10px;     height:100%;     float:right;     cursor:pointer;     background:#ccc;     text-align:center;     line-height:180px;     font-size:24px;     color:#f00;    }    .mydiv    {        position:fixed;        top:40px;        right:0px;        width: 85%;        height:650px;float: right;padding:0;        }//左侧弹出菜单        window.onload = function () {            var common_box = document.getElementById("common_box");            var cli_on = document.getElementById("cli_on");var mapDiv = document.getElementById("mapDiv");            var flag = true, r_len = 0, timer = null;var mapDiv_width = mapDiv.clientWidth;var common_box_width = common_box.clientWidth;var body_client_width = mapDiv.clientWidth + common_box.clientWidth;            cli_on.onclick = function () {                if (flag) {                    r_len = common_box_width;                    timer = setInterval(slideright, 10);                } else {                    r_len = 0;                    timer = setInterval(slideleft, 10);                }            }            function slideright() {                if (r_len = common_box_width) {                    clearInterval(timer);                    flag = !flag;common_box.style.width = common_box.clientWidth + "px";mapDiv.style.width = mapDiv_width + "px";                    cli_on.innerHTML = "菜单栏";mapDiv.innerHTML = "地图";                    return false;                } else {                    r_len += 5;                    common_box.style.width = r_len + "px";mapDiv.style.width = body_client_width - common_box.clientWidth + "px";mapDiv.innerHTML = "地图";                }            }        }
             
菜单栏
        
    
地图
     

登录后复制登录后复制登录后复制登录后复制
嗯,按照你的帮助修改运行了一下代码,果真左面的菜单栏不会覆盖右面的地图了,但在菜单栏隐藏时,右面的地图会在右面留出15%的空白,没法被自动填充

感觉应该需要改变div的宽度。用left什么的左右移动菜单和地图,由于之前它们已经绘制完毕了,左右移动时,不是遮盖了自身的一部分(这个效果应该只是左侧菜单需要的),就是由于初始时加载的画面太小已经固定,不能动态适应宽度变化(当你向左侧移动地图时,右侧新增的部分应该不会被自动填充)。
因此,我建议应该在timer的事件中改变两侧div的宽度,同时重新填充div中的内容,使其适应宽度的变化。

nbsp;html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">#common_box{     width:15%;     height :100%;     position:fixed;     left:0;     top:40px;     border:1px solid #789;     background:#fff;     z-index:99; float:left; padding:0;    }    #cli_on{     width:10px;     height:100%;     float:right;     cursor:pointer;     background:#ccc;     text-align:center;     line-height:180px;     font-size:24px;     color:#f00;    }    .mydiv    {        position:fixed;        top:40px;        right:0px;        width: 85%;        height:650px;float: right;padding:0;        }//左侧弹出菜单        window.onload = function () {            var common_box = document.getElementById("common_box");            var cli_on = document.getElementById("cli_on");var mapDiv = document.getElementById("mapDiv");            var flag = true, r_len = 0, timer = null;var mapDiv_width = mapDiv.clientWidth;var common_box_width = common_box.clientWidth;var body_client_width = mapDiv.clientWidth + common_box.clientWidth;            cli_on.onclick = function () {                if (flag) {                    r_len = common_box_width;                    timer = setInterval(slideright, 10);                } else {                    r_len = 0;                    timer = setInterval(slideleft, 10);                }            }            function slideright() {                if (r_len = common_box_width) {                    clearInterval(timer);                    flag = !flag;common_box.style.width = common_box.clientWidth + "px";mapDiv.style.width = mapDiv_width + "px";                    cli_on.innerHTML = "菜单栏";mapDiv.innerHTML = "地图";                    return false;                } else {                    r_len += 5;                    common_box.style.width = r_len + "px";mapDiv.style.width = body_client_width - common_box.clientWidth + "px";mapDiv.innerHTML = "地图";                }            }        }
             
菜单栏
        
    
地图
     

登录后复制登录后复制登录后复制登录后复制
嗯,按照你的帮助修改运行了一下代码,果真左面的菜单栏不会覆盖右面的地图了,但在菜单栏隐藏时,右面的地图会在右面留出15%的空白,没法被自动填充
我写的效果就是需要手动重绘地图的,你需要将
mapDiv.innerHTML = “地图”;
这些地方替换成地图的加载代码,这样地图才能自动适应画面变化。

mydiv{margin-top:40px;background-color:#eee;height:650px;margin-left:280px;}

登录后复制登录后复制

window.onload = function () {var common_box = document.getElementById("common_box");var cli_on = document.getElementById("cli_on");var mapDiv = document.getElementById("mapDiv");//zhelivar flag = true, r_len = 0, timer = null;cli_on.onclick = function () {if (flag) {r_len = 0;timer = setInterval(slideright, 10);} else {r_len = -270;timer = setInterval(slideleft, 10);}}function slideright() {if (r_len = 0) {clearInterval(timer);flag = !flag;cli_on.innerHTML = "";return false;} else {r_len += 5;common_box.style.left = r_len + "px";mapDiv.style.marginLeft = 270 + r_len + "px";//zheli}}}

登录后复制登录后复制

在你的基础上,稍微改了一点。试试是你要的效果吗?没有测兼容性。

不过,一些效果的话,html部分的布局也是很重要的,先想好布局,之后的js和css写起来,才会更简单的。
试了一下,效果实现了!是不是用position:fixed;直接固定位置挺不好的?

感觉应该需要改变div的宽度。用left什么的左右移动菜单和地图,由于之前它们已经绘制完毕了,左右移动时,不是遮盖了自身的一部分(这个效果应该只是左侧菜单需要的),就是由于初始时加载的画面太小已经固定,不能动态适应宽度变化(当你向左侧移动地图时,右侧新增的部分应该不会被自动填充)。
因此,我建议应该在timer的事件中改变两侧div的宽度,同时重新填充div中的内容,使其适应宽度的变化。

nbsp;html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">#common_box{     width:15%;     height :100%;     position:fixed;     left:0;     top:40px;     border:1px solid #789;     background:#fff;     z-index:99; float:left; padding:0;    }    #cli_on{     width:10px;     height:100%;     float:right;     cursor:pointer;     background:#ccc;     text-align:center;     line-height:180px;     font-size:24px;     color:#f00;    }    .mydiv    {        position:fixed;        top:40px;        right:0px;        width: 85%;        height:650px;float: right;padding:0;        }//左侧弹出菜单        window.onload = function () {            var common_box = document.getElementById("common_box");            var cli_on = document.getElementById("cli_on");var mapDiv = document.getElementById("mapDiv");            var flag = true, r_len = 0, timer = null;var mapDiv_width = mapDiv.clientWidth;var common_box_width = common_box.clientWidth;var body_client_width = mapDiv.clientWidth + common_box.clientWidth;            cli_on.onclick = function () {                if (flag) {                    r_len = common_box_width;                    timer = setInterval(slideright, 10);                } else {                    r_len = 0;                    timer = setInterval(slideleft, 10);                }            }            function slideright() {                if (r_len = common_box_width) {                    clearInterval(timer);                    flag = !flag;common_box.style.width = common_box.clientWidth + "px";mapDiv.style.width = mapDiv_width + "px";                    cli_on.innerHTML = "菜单栏";mapDiv.innerHTML = "地图";                    return false;                } else {                    r_len += 5;                    common_box.style.width = r_len + "px";mapDiv.style.width = body_client_width - common_box.clientWidth + "px";mapDiv.innerHTML = "地图";                }            }        }
             
菜单栏
        
    
地图
     

登录后复制登录后复制登录后复制登录后复制
嗯,按照你的帮助修改运行了一下代码,果真左面的菜单栏不会覆盖右面的地图了,但在菜单栏隐藏时,右面的地图会在右面留出15%的空白,没法被自动填充
我写的效果就是需要手动重绘地图的,你需要将
mapDiv.innerHTML = “地图”;
这些地方替换成地图的加载代码,这样地图才能自动适应画面变化。
地图这个只在mapDiv里加载,想要完全加载只能靠改变div的宽度来实现了

定位浮动什么的,我会觉得,能少用,就尽量少用,如果用的太多,以后添加功能,更改样式时,都会变得更难。

当然,有时候也不得不用,只要不是把所有的布局,都用float,position这样就好了。

也算是个人习惯。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2843697.html

(0)
上一篇 2025年3月10日 06:09:49
下一篇 2025年3月10日 06:09:55

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论