在垂直滚动时固定列,在水平滚动时取消固定。纯CSS实现。

4
我可以帮助您翻译以下内容:

我有一个居中的页面,有两列填充窗口高度。 左侧列固定的,因此在滚动时始终可见。 右侧列包裹页面内容,通常会比左侧列更大。

HTML:

<div class="main-container">
  <div class="col1">
    <p>Fixed column</p>
  </div>
  <div class="col2">
    <p>Content column</p>
  </div>
</div>

CSS:

.main-container {
  width: 300px;
  height: 100%;
  margin: 0 auto;
}

.col1 {
  position: fixed;
  width: 100px;
  height: 100%;
  background: fuchsia;
}

.col2 {
  width: 200px;
  margin-left: 100px;
  background: cyan;
}

当浏览器窗口小于页面宽度(例如在此示例中为300像素)时,将出现水平滚动条,并且固定列将保持固定并飞过内容列。我想避免这种情况
我能否仅使用CSS(无Javascript)实现仅垂直固定?
请参见完整示例Plunker澄清:垂直滚动条必须是窗口滚动条,而不是.col2中的内部滚动条。
4个回答

0

演示

css

.col1 {
    position: fixed;
    width: 100px;
    height: 100%;
    background: fuchsia;
    z-index: 1; /* z-index lower than than .col2 */
}
.col2 {
    position: relative; /* position needed for z-index to work */
    width: 200px;
    margin-left: 100px;
    background: cyan;
    z-index: 2; /* z-index higher than than .col1 */
}

1
这并没有解决“固定”列的问题,只是使流式列始终可见。 - Pieter VDE
那么你希望它如何表现? - 4dgaurav
他想要实现的是当水平滚动时,左侧列失去其固定状态。 - Pieter VDE

0
你可以在 .col2 容器上使用绝对定位和溢出来实现。这样,你仍然可以在垂直滚动时保留固定列,但不会在水平滚动时保留。

jsFiddle: http://jsfiddle.net/85fyC/

CSS:

html, body {
    height: 100%;
    overflow-y: hidden;
}

.main-container {
    position: relative;
    width: 300px;
    height: 100%;
    margin: 0 auto;
}

.col1 {
    position: absolute;
    width: 100px;
    height: 100%;
    background: fuchsia;
}

.col2 {
    width: 200px;
    height: 100%;
    margin-left: 100px;
    overflow: auto;
}

.col2 .inner {
    background: cyan;
}

.col2 .inner p {
    margin: 0;
}

它强制垂直滚动条在 .col2 中而不是窗口中。我想使用窗口滚动条,就像 Facebook 一样。它与您的建议不兼容,但无论如何感谢您 ;) - Oriol del Rio
我知道它可以做到,但你正在寻求仅基于CSS的解决方案——你可能愿意接受妥协或改用JS。 - Charles Ingalls

0

实际上,我同时使用媒体查询和Bootstrap,但它们无法解决这个具体的问题。 - Oriol del Rio

0
只需将CSS属性z-index:-1;添加到固定列.col1中,它就可以解决问题了。

然后,它飞到了 .col2 下面。我希望 .col1 保持在其“绝对”位置。 - Oriol del Rio
所以你想要的是只在 .col2 上有滚动条,对吗? - singe3
我想设置页面的最小宽度(例如920像素)。在该宽度下,将显示一个水平滚动条,然后固定列可以重叠内容列。 - Oriol del Rio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接