我有一个包含两个窗格的侧边栏.垂直调整窗口大小时,我希望顶部窗格动态调整大小,底部窗格保持固定大小.当侧边栏的总高度小于两个窗格时,我希望顶部窗格缩小到比其内容小,并可滚动.

预期行为与VS代码的侧边栏相同.

当前,调整大小时,顶部窗格会向下"推"底部窗格.

document.addEventListener("DOMContentLoaded", () => {
  const listItem = document.querySelector(".top-panel .list-item");
  for (let i = 0; i < 25; i++) {
    listItem.parentNode.appendChild(listItem.cloneNode(true));
  }
});
html,
body {
  margin: 0;
}

.main {
  margin-left: 12rem;
}

.sidebar {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  width: 12rem;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  border-right: 1px solid #454545;
}

.top-panel {
  flex-shrink: 1;
  display: flex;
  flex-direction: column;
}

.bottom-panel {
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
}

.header {
  background-color: #ababbc;
  font-weight: 700;
}

.panel-top .list {
  flex-shrink: 1;
  overflow-y: auto;
}

.panel-bottom .list {
  flex-shrink: 0;
}

.list-item {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
<aside class="sidebar">
  <div class="top-panel">
    <div class="header">Top panel</div>
    <div class="list">
      <div class="list-item"><span>https://example.com/users/helloworld</span></div>
      <!-- copied 25 times in the JS -->
    </div>
  </div>
  <div class="bottom-panel">
    <div class="header">Bottom panel</div>
    <div class="list">
      <div class="list-item"><span>Lorem</span></div>
      <div class="list-item"><span>Ipsum</span></div>
    </div>
  </div>
</aside>
<main class="main">Main content</main>

在代码段中使用"整页"可查看调整大小的行为.

推荐答案

您可以将overflow-y: auto添加到顶部面板,以便仅在必要时显示滚动条.

例如,您还可以通过添加height: 100px将固定大小添加到底部面板.顶部面板将自动收缩以适应剩余空间.

document.addEventListener("DOMContentLoaded", () => {
  const listItem = document.querySelector(".top-panel .list-item");
  for (let i = 0; i < 25; i++) {
    listItem.parentNode.appendChild(listItem.cloneNode(true));
  }
});
html,
body {
  margin: 0;
}

.main {
  margin-left: 12rem;
}

.sidebar {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  width: 12rem;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  border-right: 1px solid #454545;
}

.top-panel {
  overflow-y: auto;
  flex-shrink: 1;
  display: flex;
  flex-direction: column;
}

.bottom-panel {
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
}

.header {
  background-color: #ababbc;
  font-weight: 700;
}

.panel-top .list {
  flex-shrink: 1;
  overflow-y: auto;
}

.panel-bottom .list {
  flex-shrink: 0;
}

.list-item {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
<aside class="sidebar">
  <div class="top-panel">
    <div class="header">Top panel</div>
    <div class="list">
      <div class="list-item"><span>https://example.com/users/helloworld</span></div>
      <!-- copied 25 times in the JS -->
    </div>
  </div>
  <div class="bottom-panel">
    <div class="header">Bottom panel</div>
    <div class="list">
      <div class="list-item"><span>Lorem</span></div>
      <div class="list-item"><span>Ipsum</span></div>
    </div>
  </div>
</aside>
<main class="main">Main content</main>

Html相关问答推荐

我已经在我的网站上创建了按钮,但我不能让它们正确排列.'

如何将grid—template—column应用于元素中的子元素

如何获得一个背景图像,不是模糊的内部容器,但模糊的外部'

Angular 滑块问题

使用css第n个子元素,如何迭代Y组中的X个元素?

创建带有弯曲边框的水平时间线

我怎样才能有一个div,在其中放置一个消息,打破和不go 的div?

在WooCommerce单一产品页面上使产品图片库粘滞(固定)

如何使用CSS创建文件夹选项卡的形状?

将精选选项的价格合并为一个价格HTML、PHP和JQuery

带下划线的文本应该有延长的下划线,以使其图像悬停

如何使用多边形制作如图所示的背景

如何在悬停时更改同级元素 CSS

停止 Bootstrap 5 输入调整 CSS 网格单元的高度

Django 如何从文件系统下载文件?

CSS "overflow"不能显示整个单词

不完整的悬停

Mediawiki css/html 信息框创建空白行

CSS 变量不适用于自定义属性回退值

html tailwindcss 给 li 标签添加边框