【问题标题】:How to place React Select Menu如何放置 React 选择菜单
【发布时间】:2022-01-10 13:50:11
【问题描述】:

我尝试在我的项目中修复以下示例。 所以page-wrapper 的高度应该模拟一个有一些内容的页面,因此height CSS 属性。 我故意将select-container 放在中间,以便在其上方和下方都有空间。 例如,如果我在登陆页面时打开菜单,所以还没有滚动,而不是在顶部打开它,ReactSelect 是在底部打开它并将我向下滚动到它。 如您所见,我尝试了menuPlacement = "auto" prop,因为从我在文档中看到的内容来看,它应该自动进行定位,但似乎不起作用。

我的组件

import ReactSelect from "react-select";

const options = [
  { label: "No 1", value: "test_1" },
  { label: "No 2", value: "test_2" },
  { label: "No 3", value: "test_3" },
  { label: "No 4", value: "test_4" }
];

export default function App() {
  return (
    <div className="page-wrapper">
      <div className="select-container">
        <ReactSelect options={options} menuPlacement="auto" />
      </div>
    </div>
  );
}

CSS

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.page-wrapper {
  min-height: 180vh;
  width: 100%;
  background-color: #f8f8f8;
  display: flex;
  align-items: center;
}

.select-container {
  width: 90%;
  margin: 0 auto;
}

如果需要,我有一个沙盒代码 here

【问题讨论】:

  • 在沙箱中尝试您的代码,对我来说似乎工作正常。它打开菜单,缩放视图并显示选项
  • @Filtenborg 但我不希望它滚动视图,我希望它在顶部或底部打开它。比方说,当你在页面的顶部所以根本没有滚动,如果你打开菜单它应该把它放在顶部,因为它下面没有足够的空间。
  • @Filtenborg,问题是,如果您打开菜单,它会显示在输入的底部,而不是顶部。奇怪的是,如果你在滚动页面之前打开菜单,它会显示在顶部,滚动后它会在底部打开,即使你再次向上滚动也是如此。有线!
  • @kristalshards 啊,好吧,我误解了你想要达到的目标,我的错
  • 刷新页面后再次尝试,现在即使没有滚动也显示在底部,不知道为什么它在刷新前表现不同。

标签: css reactjs dropdown react-select


【解决方案1】:

好吧,即使这个选项看起来不太清楚,它实际上解决了问题:

<ReactSelect menuPosition="fixed" options={options} menuPlacement="auto" />

顺便说一句,请仔细阅读这里的含义:

https://react-select.com/props

menuPosition 属性文档。

使用absolute,默认情况下(输入后没有足够的空间):

使用fixed(输入后没有足够的空间):

如果输入后有足够的空间,则在输入后渲染菜单。

说明

似乎menuPosition 在某种程度上决定了菜单应该如何被视为“空间不足”,类似于 CSS。如果absolute,它指的是父容器中的可用空间(在您的情况下,根据您共享的代码,height180vh,就足够了,除非您调整页面大小以使其更小),如果fixed,指的是屏幕可见部分的可用空间。

编辑

在阅读了这个答案的 cmets 之后,即使我认为,在我看来,这个解决方案过于复杂,从用户体验的角度来看可能不太相关,一个可能的解决方法如下:

<ReactSelect options={options} menuPlacement={shouldBePlacedOnTopInstead ? "top" : "auto"} />

使用window 滚动和可见屏幕相关属性计算shouldBePlacedOnTopInstead 状态。

【讨论】:

  • 这看起来解决了问题,但它带来了新的错误。如果您打开菜单,然后向下/向上滚动,菜单将固定在其位置。 i.imgur.com/GkJCyt3.png
  • 这本身就解决了问题,所以你要求什么。您在 cmets 中添加的内容似乎不适用于该库。我的建议是尝试使用页面中的一些真实内容,并检查“问题”是否在真实情况下发生。另一个建议,* { &lt;margin_stuff&gt; }... 请不要那样做,拜托! XD
  • 嗯,如果我使用另一个库,比如 react-popper 可能吗?
  • 当然,如果使用真实数据没有遇到任何问题,请返回absolute
  • 嗯,react-select 是一个很好的库,我的印象是,你为一些在真实场景中不太可能发生的事情过于复杂,而且,最后,并没有那么阻碍UX 观点(react-select 会自动滚动您的页面,即使在输入后显示菜单也是如此)。
猜你喜欢
  • 1970-01-01
  • 2016-07-07
  • 2021-07-25
  • 2020-11-10
  • 2015-12-03
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 2020-06-16
相关资源
最近更新 更多