如何固定元素的位置但相对于容器

How to have fixed position of element but relative to container

我有一个容器,左右各有 2 个按钮,中间有文本。我希望文本滚动,同时 2 个按钮固定在容器底部,如下图所示。

但我希望卷轴在外容器上。附上下面的 html 和 css 代码。

此外,当线条小于容器的高度时,按钮仍应贴在容器的底部..

请帮忙。

PS: 标记和 css 都可以更改。

.container {
  width: 400px;
  height:200px;
  border: 1px solid;
  position:relative;
  overflow:auto;
  margin-bottom:4rem;
}

.line {
  height:8px;
  width:100%;
  background-color: grey;
  border-radius: 8px;
  margin-bottom:20px;
}

.text{
  padding: 5px 50px;
}

.button-wrapper{
    position: absolute;
    bottom: 4px;
}

.button{
  width:32px;
  height:32px;
  background-color:orange;
}

.left {
  left:4px;
}

.right{
  right:4px;
}
<div class="container">
   <div class="button-wrapper left">
    <div class="button "></div>
   </div>
   <div class="text">
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
   </div>
   <div class="button-wrapper right">
    <div class="button "></div>
   </div>
 </div>

如果允许您更改标记,这里有一个解决方案:

将两个按钮放在包装器中:

   <div class="button-wrapper">
    <div class="button left"></div>   
    <div class="button right"></div>
   </div>

position: sticky 添加到您的 .button-wrapper

.container {
  width: 400px;
  height:200px;
  border: 1px solid;
  position:relative;
  overflow:auto;
  margin-bottom:4rem;
}

.line {
  height:8px;
  width:100%;
  background-color: grey;
  border-radius: 8px;
  margin-bottom:20px;
}

.text{
  padding: 5px 50px;
}

.button-wrapper{
    position: sticky;
    bottom: 4px;
}
.button-wrapper:after {
  content:'';
  display: table;
  clear: both;
  height: 0;
}

.button{
  width:32px;
  height:32px;
  background-color:orange;
}

.left {
  float: left;
  margin-left: 4px;
}

.right{
  float: right;
  margin-right: 4px;
}
<div class="container">
   <div class="text">
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
   </div>
   <div class="button-wrapper">
    <div class="button left"></div>   
    <div class="button right"></div>
   </div>
 </div>

将您的内容包装在 div 中并修改 css 对我有用。 Working example

.container {
  width: 400px;
  height: 200px;
  border: 1px solid;
  position: relative;
  overflow: hidden;
  margin-bottom: 4rem;
}

.line {
  height: 8px;
  width: 100%;
  background-color: grey;
  border-radius: 8px;
  margin-bottom: 20px;
}

.text {
  max-height: 190px;
  overflow: auto;
  position: relative;
}

.content-div {
  width: 334px;
  margin: 0 auto;
}

.button {
  width: 32px;
  height: 32px;
  background-color: orange;
  display: inline-block;
  position: absolute;
  bottom: 0;
}

.left {
  left: 0;
}

.right {
  right: 0;
}
<div class="container">
  <div class="text">
    <div class="content-div">
      <div class="line"></div>
      <div class="line"></div>
      <div class="line"></div>
      <div class="line"></div>
      <div class="line"></div>
      <div class="line"></div>
      <div class="line"></div>
      <div class="line"></div>
      <div class="line"></div>
      <div class="line"></div>
    </div>
  </div>
  <div class="button-wrapper">
    <div class="button left"></div>
    <div class="button right"></div>
  </div>
</div>

这是使用 CSS 网格和 position:sticky 的想法,您可以在其中保留标记

.container {
  width: 400px;
  height:200px;
  border: 1px solid;
  overflow:auto;
  display:grid;
  grid-template-columns:auto 1fr auto; /* 3 columns */
  margin-bottom:4rem;
}

.line {
  height:8px;
  background-color: grey;
  border-radius: 8px;
  margin-bottom:20px;
}

.text{
  padding: 5px 50px;
}

.button-wrapper{
   position:sticky;
   bottom:5px; 
   margin: auto 5px 5px; /* auto will push the element to the bottom*/
}

.button{
  width:32px;
  height:32px;
  background-color:orange;
}
<div class="container">
   <div class="button-wrapper">
    <div class="button "></div>
   </div>
   <div class="text">
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
   </div>
   <div class="button-wrapper ">
    <div class="button "></div>
   </div>
 </div>
 
 <div class="container">
   <div class="button-wrapper">
    <div class="button "></div>
   </div>
   <div class="text">
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
     <div class="line"></div>
   </div>
   <div class="button-wrapper ">
    <div class="button "></div>
   </div>
 </div>