我想定制antd Select
。当用户单击Select
时,antd Option
应显示在antd Select
上方,而不是显示在Select
下方
antd Select
:https://ant.design/components/select/
预期行为:
1
实际行为:
JSX
import { FaPlane, FaWater } from "react-icons/fa";
//outside of class
const shipmentType = {
sea: [
{ name: "FCL", desc: "FULL CONTAINER LOAD" },
{ name: "LCL", desc: "LESS CONTAINER LOAD" }
],
air: [{ name: "AIR", desc: "AIR DELIVERY" }]
};
//inside of class
render(){
return(
<Select
className="container-dropdown"
onChange={this.onSelectChange}
defaultValue={
<DisplayContainer data={shipmentType.sea[0]} />
}
key={ shipmentType.sea[0]}
>
<Option value={shipmentType.sea[0].name}>
<DisplayContainer data={shipmentType.sea[0]} />
</Option>
<Option value={shipmentType.sea[1].name}>
<DisplayContainer data={shipmentType.sea[1]} />
</Option>
</Select>
);
}
DisplayContainer.js组件
const DisplayContainer = ({ data }) => {
return (
<div
style={{
width: "120px",
height: "45px",
display: "flex",
flexFlow: "column",
justifyContent: "center",
alignItems: "center"
}}
>
<span
style={{
display: "block",
fontSize: "8px",
padding: "5px 0px 0px 10px"
}}
>
{data.desc}
</span>
<span style={{ padding: "2px 0px 0px 14px" }}>
{data.name === "AIR" ? <FaPlane /> : <FaWater />}
<span
style={{ display: "inline", marginLeft: "14px", fontSize: "16px" }}
>
{data.name}
</span>
</span>
</div>
);
};
App.css
.container-dropdown {
height: 53px;
width: 140px;
border: 0px solid white;
border-radius: 0px;
cursor: pointer;
font-size: 18px;
margin: 0px;
padding: 0px;
}
custom-antd.css
.ant-select-selection.ant-select-selection--single {
border-radius: 0px 8px 8px 0px;
height: 53px;
}
.ant-select-selection-selected-value {
height: 53px;
padding: 0px;
margin: 0px;
}
.ant-select-selection__rendered {
padding: 0px;
margin: 0px;
}
.ant-select-dropdown-menu.ant-select-dropdown-menu-root.ant-select-dropdown-menu-vertical {
padding: 0px;
margin: 0px;
}
.ant-select-dropdown-menu-item {
padding: 0px;
margin: 0px;
}
我如何才能做到这一点?我已经花了几个小时的时间。但我没能成功我会感激你的。谢谢你
编辑01:
用户点击Select
框时
我想要顶部的Option
(即FCL
)向上移动,覆盖Select
框,如下所示:
我不想同时使用Options
(即FCL
和LCL
)显示在Select
框下方:
2条答案
按热度按时间1wnzp6jl1#
我相信我已经能够非常接近你想要实现的目标。下面是更新后的custom-antd.css文件。
完整的代码沙盒可以在here中找到。
本质上,您要做的是使用组合子为名称、描述等选择特定的
div
。蚂蚁的设计巢在它们的结构中很深。编辑
为了让显示菜单根据当前选择的内容显示不同的数据(仅在选择FCL时显示LCL,反之亦然),您可以使用显示更改功能,过滤原始装运数据,以便返回当前未选择的所有内容(即当选择FCL时,显示没有FCL的LCL)。通过将原始货件数据与第二个数组(已过滤的菜单数据)一起存储在状态中,您可以使用/更新第二个数组作为您的选择选项。
这是你的状态。
这是新的
handleChange
。下面是
componentDidMount
(使用handleChange
)。下面是更新的
Select
组件。查看完整的updated codepen
juud5qan2#
在版本“antd”上:“^5.9.3”,你可以使用这个css来改变选择元素