如果您知道内容的尺寸,则可以改用以下内容:
position:fixed; left:800px;
而不是:
position:fixed; right:0;
如果说您的内容是 800px 宽。这意味着您的计算是从左侧进行的,如果用户窗口小于该菜单,菜单将退出屏幕。
更新
看来您的要求如下:
- 您有一个指定了最小宽度的内容区域。
- 您需要您的菜单与用户一起滚动。
- 您需要将菜单显示在右侧,直到菜单占用内容的最小宽度。
我建议使用 JavaScript 来解决这个问题,你可以在纯 CSS 中实现它,但通过将菜单放置在覆盖整个页面的固定层中。虽然这里的逻辑在现代浏览器中有效——由于 z-indexing 菜单容器上方的内容——我不想看到旧的用户代理会怎么做:
纯css版本
css
/* make sure our content doesn't collapse too small */
.content {
position: relative;
z-index: 20;
min-width: 700px;
margin-right: 200px;
}
/* place our menu container across the entire page */
.menu-container {
position: fixed;
z-index: 10;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
/* a layer that mimics what our content does */
.menu-offset {
position: relative;
min-width: 700px;
margin-right: 200px;
height: 100%;
}
/* finally the menu attached to the right of the menu offset */
.menu-content {
position: absolute;
width: 200px;
height: 100%;
left: 100%;
background: #ddd;
}
标记
<div class="content">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis
adipiscing magna sed ipsum convallis vel fringilla nibh viverra.
Nulla et ligula vel urna scelerisque imperdiet a et lectus.
Nunc commodo, nibh id blandit mollis, leo quam eleifend urna,
at rhoncus turpis justo sit amet erat. Quisque tempus nunc
vitae eros fringilla eget imperdiet neque tincidunt. Donec
ac posuere diam. Nam nibh nibh, sollicitudin non blandit ut,
auctor in dolor. Nullam lobortis condimentum consequat.
</p>
<p>
Maecenas at orci massa, quis congue mauris. Vivamus varius
tincidunt nunc, eget <a href="#canyouclickthis">pellentesque arcu
faucibus</a> ac. Suspendisse rhoncus orci eu felis consectetur
rutrum. Nullam sed mauris eros. Nunc dignissim, libero dapibus
consectetur lobortis, ante urna faucibus dui, vel luctus metus
leo id magna. Pellentesque mi ligula, commodo ac pellentesque
et, auctor sed neque. Phasellus dapibus tellus faucibus dui
vehicula hendrerit. Pellentesque habitant morbi tristique
senectus et netus et malesuada
fames ac turpis egestas.
</p>
</div>
<div class="menu-container">
<div class="menu-offset">
<nav class="menu-content">Menu</nav>
</div>
</div>
有了上述内容,我希望旧版浏览器要么呈现,因此您将无法与内容 div 中的任何内容进行交互——请参阅#canyouclickthis
链接——或者position:fixed
无论如何都不能正确支持:
http://caniuse.com/css-fixed
更新 2
啊,刚刚发现你关于80%
宽度的评论。对上述内容的修改可能适用于此,但是,当您有一个固定宽度的菜单时(尤其是在您指定的条件下),最好避免使用百分比宽度,并改用 min 和 max-width。要么使用具有百分比宽度而不是固定的菜单。
根据您拥有/希望设置标记的方式,以下可能有效。这种方法依赖于这样一个事实,即如果您不指定left
, top
,bottom
或者right
图层应该保留在它所在的位置(在旧浏览器中不是 100% 正确)。您可能会发现您必须.menu
为不太现代的 UA 定义层的尺寸。该解决方案的另一个好处是不覆盖固定层中的整个页面:)
.content { position:relative; width:80%; min-width: 800px; float:left; }
.menu-container { position:absolute; left:100%; top:0; }
.menu-content { position: fixed; width:20%; height:100%; background:#ddd; }
<div class="content">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis
adipiscing magna sed ipsum convallis vel fringilla nibh viverra.
Nulla et ligula vel urna scelerisque imperdiet a et lectus.
Nunc commodo, nibh id blandit mollis, leo quam eleifend urna,
at rhoncus turpis justo sit amet erat. Quisque tempus nunc
vitae eros fringilla eget imperdiet neque tincidunt. Donec
ac posuere diam. Nam nibh nibh, sollicitudin non blandit ut,
auctor in dolor. Nullam lobortis condimentum consequat.
</p>
<div class="menu-container">
<nav class="menu-content">Menu</nav>
</div>
</div>
同样,最好在 Internet Explorer 中测试它,因为我无法访问那个特定的用户代理 atm。