亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

CSS 有兩個列表,同步它們的垂直滾動,同時允許一個列表水平滾動

CSS 有兩個列表,同步它們的垂直滾動,同時允許一個列表水平滾動

慕森卡 2022-11-27 17:14:40
我有兩個列表,其中列表 1 中的項目 i 與列表 2 中的項目 i 相關。我希望兩個列表都可以垂直滾動,以便項目在兩個列表中始終具有相同的滾動位置。但是列表 2 有更多的內容供屏幕顯示(比如各種時間軸),所以我希望該列表可以水平滾動(請注意,不是項目本身而是整個列表),而列表 1 保持固定。有沒有辦法只在 CSS 中做到這一點?這是我到目前為止所擁有的:代碼沙盒請注意,這只是為了說明這一點。實際項目是更大的 DOM 結構,而不僅僅是文本。我更新了 codesandbox 來說明這一點。我似乎真的無法讓水平滾動正常工作。任何幫助將非常感激。
查看完整描述

1 回答

?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

設置width為一些適當的大值(例如500px),并white-space: nowrap.rightPaneItem.

請記住,元素的width屬性值.rightPaneItem需要根據rightPaneItem最長內容的內容進行調整。

function App() {

  return (

    <div className="App">

      <div className="leftPane">

        LeftPane

        {new Array(100).fill(0).map((_, i) => (

          <div key={i} class="leftPaneItem">

            item {i}

          </div>

        ))}

      </div>

      <div className="rightPane">

        RightPane

        {new Array(100).fill(0).map((_, i) => (

          <div key={i} class="rightPaneItem">

            item {i} with a way longer text so you should be able to scroll

            horizontally

          </div>

        ))}

      </div>

    </div>

  );

}



ReactDOM.render(<App />, document.getElementById("root"));

.App {

  text-align: center;

  max-height: 300px;

  max-width: 300px;

  display: flex;

  border: 3px dashed green;

  overflow: auto;

  padding: 5px;

}


.leftPane {

  display: flex;

  flex-direction: column;

  height: 100%;

  flex: 1;

  border: 2px solid red;

  padding: 5px;

}


.rightPane {

  display: flex;

  flex-direction: column;

  height: 100%;

  flex: 2;

  border: 2px solid blue;

  padding: 5px;

  overflow-x: auto;

}


.leftPaneItem {

  height: 20px;

}


.rightPaneItem {

  height: 20px;

  width: 500px;

  overflow-x: hidden;

  white-space: nowrap;

}

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.1/umd/react.production.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.1/umd/react-dom.production.min.js"></script>


<div id="root"></div>

編輯:

由于您將在右列中擁有可變長度的內容,因此您可以使用以下方法。

您可以在外部容器和元素上添加,而不是在 上設置widthoverflow屬性。.rightPaneItemoverflow: auto.App.rightPane

function App() {

  return (

    <div className="App">

      <div className="leftPane">

        LeftPane

        {new Array(100).fill(0).map((_, i) => (

          <div key={i} class="leftPaneItem">

            item {i}

          </div>

        ))}

      </div>

      <div className="rightPane">

        RightPane

        {new Array(100).fill(0).map((_, i) => {

          if (i % 2 == 0) {

             return (

               <div key={i} class="rightPaneItem">

                  item {i} with a way longer text so you should be able to scroll

            horizontally

              </div>);

          } else {

             return (

               <div key={i} class="rightPaneItem">

                  item {i} with a way longer text so you should be able to scroll

            horizontally.                   item {i} with a way longer text so you should be able to scroll

            horizontally.                   item {i} with a way longer text so you should be able to scroll

            horizontally

              </div>);

          }

        })}

      </div>

    </div>

  );

}



ReactDOM.render(<App />, document.getElementById("root"));

.App {

  font-family: sans-serif;

  text-align: center;

  max-height: 300px;

  max-width: 300px;

  display: flex;

  border: 3px dashed green;

  overflow: auto;

  padding: 5px;

}


.leftPane {

  display: flex;

  flex-direction: column;

  height: 100%;

  flex: 1;

  border: 2px solid red;

  padding: 5px;

}


.rightPane {

  display: flex;

  flex-direction: column;

  height: 100%;

  flex: 2;

  border: 2px solid blue;

  padding: 5px;

  overflow: auto;

}


.leftPaneItem {

  height: 20px;

}


.rightPaneItem {

  height: 20px;

  position: relative;

  white-space: nowrap;

}

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.1/umd/react.production.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.1/umd/react-dom.production.min.js"></script>


<div id="root"></div>

我還在 codesandbox 上創建了一個演示,它類似于您問題中發布的演示,并使用與第二個代碼片段中使用的相同的 CSS。



查看完整回答
反對 回復 2022-11-27
  • 1 回答
  • 0 關注
  • 236 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號