【问题标题】:CSS - how to scroll a list in a divCSS - 如何在 div 中滚动列表
【发布时间】:2017-11-21 03:33:50
【问题描述】:

如何只滚动列表?我希望修复.text.link-item,并且只在容器内的列表上滚动。

.container {
  position: relative;
  float: right;
  width: 74.4%;
  height: 150px;
  background-color: rgb(230, 230, 233);
  margin-top: 30px;
  box-shadow: 2px 2px 2px 0px rgba(0, 0, 0, 0.1), 0 4px 4px 0 rgba(0, 0, 0, 0.15);
  text-align: left;
  border-radius: 4px;
}

.text {
  position: fixed;
  font-size: 12px;
  font-weight: 600;
  font-family: 'Open Sans', sans-serif;
  color: rgb(116, 124, 142);
  float: left;
  padding: 10px 0px 0px 40px;
}

.box {
  position: absolute;
  padding: 20px 50px 0px 30px;
  color: rgb(116, 124, 142);
  font-size: 15px;
}

.link-item {
  position: absolute;
  top: 15px;
  width: 100%;
  font-weight: 400;
  font-size: 12px;
  font-family: 'Open Sans', sans-serif;
  color: rgb(87, 135, 253);
  text-align: right;
  padding-right: 40px;
  text-decoration: none;
}
<div class="container">
  <div class="text">ACTION ITEMS</div>
  <div class="box">
    <ul>
      <li>something</li>
      <li>something</li>
      <li>something</li>
      <li>something</li>
      <li>something</li>
      <li>something</li>
      <li>something</li>
      <li>something</li>
      <li>something</li>
    </ul>
  </div>
  <a href="www.something.com" class="link-item">GO TO THE LAST ITEM</a>
</div>

【问题讨论】:

  • 请参阅jsfiddle.net/htwL2rxc 以获得有效的小提琴。
  • 嘿,丽兹。我因回答“转到最后一项”部分而被否决了两次。不确定我是否应该投反对票。另外,我也正确地使用了滚动部分。如果我在这种情况下错了,你能澄清一下吗?谢谢。

标签: html css scroll css-position


【解决方案1】:

注意:除了CSS部分,我还回复了GO TO THE LAST ITEM。不知道为什么这只是可以通过单独使用 CSS 来完成,因为 GO TO THE LAST ITEM 需要 JavaScript。我只是担心,因为我的回答被否决了,所以添加了这个注释。

您不能只使用 CSS 来实现 GO TO THE LAST ITEM。添加overflow CSS,你需要使用 JavaScript 让它滚动到底部:

document.querySelector('.box').scrollTop = 1000;

.container {
  position: relative;
  float: right;
  width: 74.4%;
  height: 150px;
  background-color: rgb(230, 230, 233);
  margin-top: 30px;
  box-shadow: 2px 2px 2px 0px rgba(0, 0, 0, 0.1), 0 4px 4px 0 rgba(0, 0, 0, 0.15);
  text-align: left;
  border-radius: 4px;
}

.text {
  position: fixed;
  font-size: 12px;
  font-weight: 600;
  font-family: 'Open Sans', sans-serif;
  color: rgb(116, 124, 142);
  float: left;
  padding: 10px 0px 0px 40px;
}

.box {
  position: absolute;
  padding: 20px 50px 0px 30px;
  color: rgb(116, 124, 142);
  font-size: 15px;
  overflow: auto;
  height: 100px;
}

.link-item {
  position: absolute;
  top: 15px;
  width: 100%;
  font-weight: 400;
  font-size: 12px;
  font-family: 'Open Sans', sans-serif;
  color: rgb(87, 135, 253);
  text-align: right;
  padding-right: 40px;
  text-decoration: none;
}
<div class="container">
  <div class="text">ACTION ITEMS</div>
  <div class="box">
    <ul>
      <li>something</li>
      <li>something</li>
      <li>something</li>
      <li>something</li>
      <li>something</li>
      <li>something</li>
      <li>something</li>
      <li>something</li>
      <li>something</li>
    </ul>
  </div>
  <a href="www.something.com" class="link-item" onclick="document.querySelector('.box').scrollTop = 10000; return false;">GO TO THE LAST ITEM</a>
</div>

【讨论】:

  • CSS 属性 overflow-y: scroll 就是为了做到这一点,不需要 JavaScript。
  • @Soolie 哦,对不起,我没有看到过去的最后一项。这确实需要 JavaScript。很抱歉疏忽了。
  • 好的,我明白了。我撤回了我的投票。就像this 的兴趣点一样吗?我不擅长 JavaScript,所以我可能错了。
  • 我也撤回了投票。误解了这个问题:)
  • 想一想没问题。
【解决方案2】:

您需要为包含列表的 DIV 提供固定大小,然后应用溢出声明。见下文:

 .box {
    position: absolute;
    padding: 20px 50px 0px 30px;
    color: rgb(116,124,142);
    font-size: 15px;
    overflow-y: scroll;height: 120px;
  }

【讨论】:

    【解决方案3】:

    您的 .container 元素:

    设置父容器 (.container) 大小和显示类型,然后为容器设置overflow-y:scroll; 属性。我也一直喜欢设置max-height,但我认为这不是必需的。

    .container {
        position: relative;
        float: right;
        width: 74.4%;
        height: 150px;
        background-color: rgb(230,230,233);
        margin-top: 30px;
        box-shadow: 2px 2px 2px 0px rgba(0, 0, 0, 0.1), 0 4px 4px 0 rgba(0, 0, 0, 0.15);
        text-align: left;
        border-radius: 4px;
        box-sizing: border-box; /****** NEW *****/
        max-height: 150px;   /****** NEW *****/
        overflow-y: scroll;  /****** NEW *****/
        overflow-x: hidden; /****** NEW *****/
     }
    

    注意你的.container div 应该inline 类型的显示,因为手动设置高度不会影响内联元素(默认情况下divs 是@987654329 @type 这样你就没事了)。

    你的 .text 元素:

    你说:

    我希望 .text 和 .link-item 被固定,并且只在容器内的列表上滚动。

    因为您的文本框被标记为position: fixed,所以它永远不会从页面上的起点滚动。删除您的 position: fixed 或将此值更改为适合您需要但允许此文本框根据需要滚动的其他值。

    转到列表底部:

    虽然没有在问题中具体说明,但outlined by Soolie in their answer (以前被否决)还有一个锚代码说明:

     <a href="www.something.com" class="link-item">GO TO THE LAST ITEM</a>
    

    这可以通过锚链接轻松完成(至少,在使用 Firefox 的代码 sn-p 上它很有效):

    <a href="#bottom" class="link-item">GO TO THE LAST ITEM</a>
    

    以及最后&lt;li&gt;上的对应链接:

    <li id='bottom'>
    

    完整代码:

    .container {
        position: relative;
        float: right;
        width: 74.4%;
        height: 150px;
        background-color: rgb(230,230,233);
        margin-top: 30px;
        box-shadow: 2px 2px 2px 0px rgba(0, 0, 0, 0.1), 0 4px 4px 0 rgba(0, 0, 0, 0.15);
        text-align: left;
        border-radius: 4px;
        box-sizing: border-box; /****** NEW *****/
        max-height: 150px;   /****** NEW *****/
        overflow-y: scroll;  /****** NEW *****/
        overflow-x : hidden; /****** NEW *****/
     }
     
     .text {
        /** position: fixed **/
        font-size: 12px;
        font-weight: 600;
        font-family: 'Open Sans', sans-serif;
        color: rgb(116,124,142);
        float: left;
        padding: 10px 0px 0px 40px;
      }
      
    
    .box {
       position: absolute;
       padding: 20px 50px 0px 30px;
       color: rgb(116,124,142);
       font-size: 15px;
      }
      
      .link-item {
        position: absolute;
        top: 15px;
        width: 100%;
        font-weight: 400;
        font-size: 12px;
        font-family: 'Open Sans', sans-serif;
        color: rgb(87,135,253);
        text-align: right;
        padding-right: 40px;
        text-decoration: none;
        right: 0;   /*** Right align the absolute position ***/
      }
    <div class="container">
      <div class="text">ACTION ITEMS</div>
        <div class="box">
          <ul>
            <li>something</li>
            <li>something</li>
            <li>something</li>
            <li>something</li>
            <li>something</li>
            <li>something</li>
            <li>something</li>
            <li>something</li>
            <li id='bottom'>something</li>
          </ul>
        </div>
        <a href="#bottom" class="link-item">GO TO THE LAST ITEM</a>
    </div>

    【讨论】:

    • 不知道为什么这可以单独使用 CSS 来完成,因为 GO TO THE LAST ITEM 需要 JavaScript。我只是担心,因为我的回答被否决了,只是想向社区寻求帮助。\
    • @Soolie 虽然感谢您的关注,但我会觉得在比它们小的容器中有一组 &lt;ul&gt; 元素很奇怪,并且希望默认开始位于底部ul 列表中的。虽然我看到您对措辞的误解,但我认为逻辑会规定,如果这 预期的愿望,那么这种 HTML 结构(在问题中提供而不是在答案中寻求)是完全错误的甚至试图实现它的方式。
    • 谢谢马丁。我现在更新了我的答案以澄清事情。希望我不值得那些反对票(我不是在指责你,不要这么觉得)。只是想知道我现在的答案是否可以?
    • 这很好。但我的方法是通用的。只需将 div 滚动到末尾。这也很好。你有我的赞成票! :D
    • @Soolie 你提出了一个很好的观点,很多人(包括我自己)都没有注意到,因为它没有被特别询问。我很高兴看到您现在重新获得 + 票!好转:-)
    【解决方案4】:

    给 .box div 溢出-y: auto;以及用于滚动的 div 的首选高度大小。

    .box {
      height: 200px;
      overflow-y: auto;
      background-color: #333;
      color: #fff;
    }
    <h1>Some Text</h1>
    <div class="box">
      <ul>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
      </ul>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多