Другой ответ полезен, но не сработал для меня, потому что если label
используется в компоненте outlined
(как в вопросе), он оставляет label
нецентрированным.Если это ваш вариант использования, читайте дальше.
То, как стилизован компонент <label>
, несколько своеобразно, с использованием position: absolute
и transform
.Я полагаю, что это сделано таким образом, чтобы анимация работала, когда вы фокусируете поле.
Следующее сработало для меня, с последним материалом-ui v4 (оно должно нормально работать с v3 тоже).
// height of the TextField
const height = 44
// magic number which must be set appropriately for height
const labelOffset = -6
// get this from your form library, for instance in
// react-final-form it's fieldProps.meta.active
// or provide it yourself - see notes below
const focused = ???
---
<TextField
label="Example"
variant="outlined"
/* styles the wrapper */
style={{ height }}
/* styles the label component */
InputLabelProps={{
style: {
height,
...(!focused && { top: `${labelOffset}px` }),
},
}}
/* styles the input component */
inputProps={{
style: {
height,
padding: '0 14px',
},
}}
/>
Примечания
- Я просто использовал встроенные стили, а не
withStyles
HOC, так как этот подход простомне кажется проще - Переменная
focused
требуется для этого решения - вы получаете это с final-form
, formik
и, возможно, другими библиотеками форм.Если вы просто используете TextField
или другую библиотеку форм, которая не поддерживает это, вам придется подключить это самостоятельно. - Решение использует магическое число
labelOffset
дляцентрируйте label
, который связан с выбранным вами статическим height
.Если вы хотите отредактировать height
, вам также придется отредактировать labelOffset
соответствующим образом. - Это решение не не поддерживает изменение размера шрифта
TextField
.Я пытался заставить это работать, но столкнулся со всевозможными проблемами со стилем label
.Возможно, это можно сделать, но мне это не нужно.Мне просто нужен был немного более компактный TextField
, и я обнаружил, что height
, установленный на 44, с неизменным размером шрифта, вполне подойдет для этого.