Der*_*rek 5 html javascript css
假设我在浏览器窗口中有一个右侧菜单:
___________________________
| Right |
content | Menu |
| |
| |
| |
| |
| |
| |
| |
___________________|_______|
Run Code Online (Sandbox Code Playgroud)
我希望修复菜单,以便用户向下滚动时看到相同的内容。所以我为右侧菜单设置了position:fixed。
但是,我也希望如果窗口太小,就看不到菜单。即窗口应在右侧菜单之前显示完整内容。
像这样:
_________________________
| Ri |
content | Me |
| |
| |
| |
| |
| |
| |
| |
___________________|____|
Run Code Online (Sandbox Code Playgroud)
有没有办法在纯CSS中做到这一点?如果没有,一个非常简单的js修复?
编辑:
我有一个相关的问题,所以我觉得没有必要创建另一个问题:
我的右侧菜单有固定宽度,但我需要左侧内容相应地自动调整其宽度(填充左侧)。有没有办法在 css 中做到这一点并保留上述功能?
如果您知道内容的尺寸,则可以使用以下内容:
position:fixed; left:800px;
Run Code Online (Sandbox Code Playgroud)
而不是:
position:fixed; right:0;
Run Code Online (Sandbox Code Playgroud)
如果说你的内容是 800px 宽。这意味着您的计算是从左侧开始的,如果用户窗口小于该值,菜单将推出屏幕。
看来您的要求如下:
我建议使用 JavaScript 来解决这个问题,你可以用纯 CSS 来实现它,但是将菜单放置到覆盖整个页面的固定层中。虽然这里的逻辑在现代浏览器中有效 - 由于对菜单容器上方的内容进行 z 索引 - 我不想看到旧的用户代理会如何处理它:
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;
}
Run Code Online (Sandbox Code Playgroud)
标记
<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>
Run Code Online (Sandbox Code Playgroud)
通过上述内容,我希望旧版浏览器要么进行渲染,以便您无法与内容 div 中的任何内容进行交互(请参阅链接),要么无论如何都#canyouclickthis无法正确支持:position:fixed
啊,刚刚发现你关于80%宽度的评论。对上述内容进行修改可以解决此问题,但是,当您有固定宽度的菜单时,最好避免使用百分比宽度(尤其是在您指定的条件下),而是依赖最小和最大宽度。要么使用具有百分比宽度而不是固定宽度的菜单。
根据您如何/希望如何设置标记,以下方法可能有效。这种方法依赖于这样一个事实:如果您不指定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>
Run Code Online (Sandbox Code Playgroud)
同样,最好在 Internet Explorer 等中进行测试,因为我无权访问该特定的用户代理 atm。
| 归档时间: |
|
| 查看次数: |
709 次 |
| 最近记录: |