繁体   English   中英

如何使固定位置菜单旁边的内容在较小的分辨率下不重叠

[英]How to make content next to a fixed-position menu not overlap in smaller resolutions

我正在尝试弄清楚如何做到这一点,如果用户的浏览器窗口小于1024px(网站没有以1024px +的水平滚动),并且用户确实向右滚动以查看更多主要内容,不会被左侧的固定位置菜单重叠/混乱。

我做了一个JS小提琴,它重新创建了我面临的基本问题: http : //jsfiddle.net/YE7ZZ/1/

CSS

#wrap {
    width:100%;
    background-image:url('../images/Imagine/bg_image44.png');
    background-attachment:fixed;
} 

#top {

}

#left {
    position:fixed;
    border:1px solid red;
    background:pink;
    width:250px;
}
#positioner {
    margin-left:250px;
    width:auto;
}
#content {
    border:1px solid green;
    width:700px;
    margin:auto;
        background:grey;

}

HTML

    <div id="wrap">
    <div id="top"></div>
    <div id="left">menu item~~~~~<br /><br /><br />menu item~~~~~<br /><br /><br />menu item~~~~~<br /><br /><br />menu item~~~~~<br /><br /><br />menu item~~~~~<br /><br /><br />menu item~~~~~<br /><br /><br /></div>
    <div id="positioner">
        <div id="content">asdf content that should be lower-resolution browser friendly and not be overlapped by the menu<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />

            asdf content that should be lower-resolution browser friendly and not be overlapped by the menu<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
            asdf content that should be lower-resolution browser friendly and not be overlapped by the menu<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
            asdf content that should be lower-resolution browser friendly and not be overlapped by the menu<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
        </div>
    </div>
</div>

在过去的六个星期中,我尝试了大约三个不同的时间来解决此问题,但未能找到解决方法,因此,我们将不胜感激。

感谢您的时间。

编辑-我的理想解决方案是在内容部分显示一个水平滚动条,以便他们可以滚动浏览内容本身,而不必:1)重叠左侧菜单; 或2)切断可见内容的数量; 或3)缩小左侧菜单的大小

求助:非常感谢@Gaby aka G. Petrioli

我使用了以下javascript解决方案:

$(document).ready(function(){
var lastLeft = -1,
    menu = $('.left_, .top_');

$(window).on('scroll resize', function(){
    var left = $(window).scrollLeft();
    if (left >= 0 && left!==lastLeft){
        lastLeft = left;
        menu.css('left',-left+'px');
    }
});

});

并按照他的概述更改了CSS,在我的实时版本中,不得不将某些顶级菜单元素的位置从固定更改为绝对。 谢谢大家!谢谢!

不确定您的特定需求,但是可以从.content规则中删除width:700px ,以便该元素将像视口一样缩小。

演示在 http://jsfiddle.net/YE7ZZ/2/


另一方面,如果您需要维护布局,并且只想将fixed应用于垂直滚动,则必须使用一些jquery( 纯CSS不能实现

var lastLeft = -1,
    menu = $('#left');
$(window).on('scroll resize', function(){
    var left = $(window).scrollLeft();
    if (left >= 0 && left!==lastLeft){
        lastLeft = left;
        menu.css('left',-left+'px');
    }
});

演示在 http://jsfiddle.net/YE7ZZ/3/

根据屏幕/视口的宽度更改CSS。

将此添加到您的头上:

<meta name="viewport" content="initial-scale=1">

根据大小更改css规则:

@media screen and (min-width : ###px) and (max-width : ###px) {
   .your-css-here{
   }
}

http://css-tricks.com/snippets/css/media-queries-for-standard-devices/

为此,您可以将固定的导航菜单更改为不同的显示方式。

IE:

@media screen and (max-width : 1024px) {
   nav{
      position:relative;
      etc...:...;
   }
 }

编辑--具有max/min-device-width 需要为max/min-width

不确定是否正是您想要/需要的,但是您也可以使用id =“ positioner”为div使用绝对定位。 只需将您的margin-left:250px替换为

position: absolute;
left: 250px;
right: 0;
overflow: auto;

我对小提琴做了一些修改。 您可以在这里找到新版本

您可以使用浮点数执行此操作。 如果希望容器(#wrap)抬起高度,则可能需要使用clearfix。

这里有一个小提琴: http : //jsfiddle.net/EqXBp/

CSS:

#left {
    float: left;
    border:1px solid red;
    background:pink;
    width:250px;
}

#content {
    border:1px solid green;
    float: right;
    width: calc(100% - 4px);
    margin:auto;
    background:grey;
}

现在,我知道您想要的是一个非常简单的修复程序。 只需将positioner器包装器设为绝对,并设置其标记并告诉其滚动即可。

 #positioner {
     position: absolute;
     top: 0px;
     left: 250px;
     right: 0px;
     bottom: 0px;
     overflow: auto;
 }

首先,您必须了解固定位置的工作原理。 它是相对于屏幕视口的位置,并且在滚动时不会移动。

以下解决方案相对地设置了左框的样式,但使其表现为固定的。

将以下内容添加到您的CSS中:

#wrapp {
  min-width: 955px;
}
#left {
  position: relative;
  float: left;
  width: 250px;
  top: 0;
}
#positioner {
  position: relative;
  float: left;
  margin-left: 0;
}

使用此Javascript程序将左侧菜单保持在顶部:

<script>
function scrollTop() { return document.body.scrollTop || document.documentElement.scrollTop; }

$( document ).ready(function() {
    $(window).scroll(function() {    
        $("#left").css({ top: scrollTop() + 'px' });
    });    
});
<script/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM