代码之家  ›  专栏  ›  技术社区  ›  Liz Parody

CSS-如何在div中滚动列表

  •  3
  • Liz Parody  · 技术社区  · 7 年前

    如何仅滚动列表?我想要 .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>
    4 回复  |  直到 7 年前
        1
  •  5
  •   Soolie    7 年前

    注: 除了CSS部分,我还回答了 GO TO THE LAST ITEM . 不确定为什么可以这样做 只是 通过单独使用CSS,作为 转到最后一项 需要JavaScript。我只是担心,因为我的答案被否决了,所以添加了这个注释。

    您不能仅使用CSS来实现 转到最后一项 . 添加 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>
        2
  •  3
  •   Nkole Evans    7 年前

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

     .box {
        position: absolute;
        padding: 20px 50px 0px 30px;
        color: rgb(116,124,142);
        font-size: 15px;
        overflow-y: scroll;height: 120px;
      }
    
        3
  •  2
  •   Community CDub    4 年前

    你的容器元素:

    设置父容器( .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 *****/
     }
    

    小心你的 .容器 div应 成为一名 inline 键入display,因为手动设置高度对内联元素没有影响( 默认情况下 divs block 输入这样你就可以了 ).

    你的文本元素:

    您声明:

    我想要这个。文本和。要修复的链接项,仅在容器内的列表上滚动。

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

    转到列表底部:

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

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

    这很容易做到( 至少,在Firefox的代码片段上,它很有魅力 )因此,使用锚链:

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

    和一个对应的链接在最后 <li> :

    <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>
        4
  •  1
  •   Behzod    7 年前

    给box div overflow-y:自动;和用于滚动的首选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>