根据演示,Material UI概述的选择输入的标签应该位于选择框的顶部边框的顶部。
然而,在我的应用程序中,标签的z-index
似乎将其放置在顶部边框之后,因此看起来像是一条线穿过标签。
我几乎完全从文档中获取了代码,据我所知,没有任何与此输入元素冲突的样式。我已经将调试器中的样式与我现有的样式和文档中的样式进行了比较,我没有看到任何第一方CSS文件导致在元素上设置不同的样式。
你知道这里可能出了什么问题吗?
下面是源代码:
<FormControl variant='outlined' style={{ width: '100%' }} margin={'1'}>
<InputLabel id='test-select-label'>Label</InputLabel>
<Select
labelId='test-select-label'
id='test-select'
value={'test1'}
onChange={e => setTest(e.target.value)}
size='small'
>
<MenuItem key={1} value={'test'} >Test 1</MenuItem>
<MenuItem key={2} value={'test2'} >Test 2</MenuItem>
</Select>
</FormControl>
6条答案
按热度按时间iyzzxitl1#
方案一:使用
TextField
这就是
TextField
的作用。它在内部使用FormControl
和InputLabel
,并确保它们能够很好地协同工作。您可以通过覆盖select
props来告诉TextField
渲染select
而不是input
:有关
TextField
如何工作的更多详细信息,请参阅this答案。方案二:使用
Select
如果你决定使用
Select
,你需要写更多的代码来完成相同的工作量:将标签文本作为
InputLabel
子级传递将此标签文本放在
FormControl
内部并靠近Select
组件时,将在屏幕上呈现为Select
标签。将标签文本传递给
Select
组件的label
props当
Select
标签为shrinked时,此标签文本被隐藏,用于覆盖和删除border-top
中真实的标签被占用的部分。把它放在一起,我们将有如下所示的东西,注意,这种方法,我们需要设置标签在2个不同的地方,这是不是很干,所以我更喜欢第一种方法。
现场演示
nfs0ujit2#
如果您将label属性添加到您的选择组件,问题应该会消失。
下面是一个现场演示,您可以看到差异:
plicqrtu3#
试试这个方法,它对我很有效。
JSX:
CSS:
rn0zuynd4#
Refer to the highlighted text
请在Select中包含标签 prop ,并确保与您在InputLabel中指定的值匹配
x6492ojm5#
当我试图在FormControl组件上设置填充时,也遇到了类似的问题。我有正确的ID和标签,但这仍然是一个问题。CSS不是我的强项,但我注意到,如果我可以在FormControl组件上使用margin复制我想要的布局,标签就可以适当地对齐。请参阅使用填充而不是边距的图像:
sg2wtvxw6#
你可以试试这个: