我们已经创建了模态,但在某些情况下会出现提交按钮的文本换行的情况。例如,请参见底部的图像。
在此示例中,按钮大小相同,但“创建用户”文本换行。
我希望提交按钮(创建用户)能够根据文本大小进行增长,这样就不会换行,同时保持取消按钮的大小不变。代码如下所示:
const ModalFooter = styled.div<{ numberOfButtons?: number }>`
display: flex;
justify-content: flex-end;
flex-flow: row wrap;
gap: ${theme.spacing.pixel[100]} ${theme.spacing.pixel[100]};
margin-top: ${theme.spacing.pixel[200]};
width: 100%;
:empty {
display: none;
}
& > * {
display: flex;
flex: 1 0
${({ numberOfButtons = 2 }) =>
`calc(100% / ${numberOfButtons} - ${theme.spacing.pixel[100]} * ${
numberOfButtons - 1
})`};
}
`;
我假设它是这样做的,这是由于flex: 1 0
属性。我如何改变这一点,使只有提交按钮将增长,以防止文本换行,而不影响取消按钮?
[1]:https://i.stack.imgur.com/ys7eU.png
1条答案
按热度按时间uklbhaso1#
一个非常简单的解决方案是在单词之间使用不间断空格(例如,使用
HTML实体)。这样,整个按钮内容将被视为一个单词,必须适合一行,强制元素具有最小宽度。
默认情况下,Flex项目不会缩小到其最小内容大小以下。
演示:https://codesandbox.io/s/cool-archimedes-k1b802?from-embed=&file=/src/App.tsx
另一种可能的解决方案是在
<ModalFooter>
组件的所有子元素上应用flex-grow: 0;
,然后专门针对“Create user”提交按钮,并给予一个覆盖flex-grow: 1;
规则:演示:https://codesandbox.io/s/admiring-currying-vh0y6n?from-embed=&file=/src/App.tsx
但请注意,flex项随其容器而不是随其自身的内容增长(除了它们的最小大小,如第一个解决方案中所做的那样)。
一个混合的解决方案是在该按钮上应用
white-space: nowrap;
规则:隐藏换行符(文字换行)
演示:https://codesandbox.io/s/cool-sea-iwr4iv?from-embed=&file=/src/App.tsx