如何使用overflow-y: auto保持X方向溢出的内容?

问题描述 投票:0回答:1

::after
伪元素用于渲染箭头:

但是,当

overflow-y: auto
添加到容器中时,箭头被切断:

X 方向溢出应该没问题(即箭头应该可见),但 Y 方向溢出应该会导致滚动条。

是否可以同时保留滚动条和箭头?

.flex {
  background-color: #eee;
  width: 100px;
  height: 160px;
  display: flex;
  flex-direction: column;
  border: 2px solid #333;
}

.item {
  background-color: #ccc;
  border-bottom: 1px solid #777;
  padding-left: 4px;
  line-height: 28px;
  position: relative;
}

.item3::after {
  content: "";
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 15px 0 15px 15px;
  border-color: transparent transparent transparent #ccc;
  position: absolute;
  left: 100%;
  top: 0;
}
<div class="flex">
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item item3">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
</div>

css overflow pseudo-element
1个回答
0
投票

这不是最优雅的解决方案,但我通过在整个事物周围添加一个宽度更宽的包装器来允许指示箭头有更多的宽度。边框在顶部添加了一个伪元素。有关溢出属性的更完整说明,请参阅此答案

.wrapper {
  width: 115px;
  height: 160px;
  position: relative;
}

.wrapper::before {
  content: "";
  width: 100px;
  height: 100%;
  box-sizing: border-box;
  background-color: #eee;
  position: absolute;
  top: 0;
  left: 0;
}


.wrapper::after {
  content: "";
  width: 100px;
  height: 100%;
  box-sizing: border-box;
  border: 2px solid #333;
  position: absolute;
  top: 0;
  left: 0;
  pointer-events: none;
}

.flex {
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  overflow-y: auto;
}



.item {
  background-color: #ccc;
  border-bottom: 1px solid #777;
  padding-left: 4px;
  line-height: 28px;
  position: relative;
  max-width: calc(100% - 15px);
  box-sizing: border-box;
}

.item3::after {
  content: "";
  width: 0;
  height: 0;
  border-style: solid;
  border-width: 15px 0 15px 15px;
  border-color: transparent transparent transparent #ccc;
  position: absolute;
  left: 100%;
  top: 0;
}
<div class="wrapper">
  <div class="flex">
    <div class="item">Item</div>
    <div class="item">Item</div>
    <div class="item item3">Item</div>
    <div class="item">Item</div>
    <div class="item">Item</div>
    <div class="item">Item</div>
    <div class="item">Item</div>
    <div class="item">Item</div>
    <div class="item">Item</div>
    <div class="item">Item</div>
    <div class="item">Item</div>
    <div class="item">Item</div>
  </div>
</div>

© www.soinside.com 2019 - 2024. All rights reserved.