Pat*_*han 7 javascript css reactjs material-ui
I use Material-UI TextField
with an Icon
inside like this. The label "Your good name here" should be next to the icon instead of overlapping it.
This happens after I added InputLabelProps={{ shrink: false }}
to the TextField
.
How could I fix this position correctly? Any help!
Thanks in advance! =)
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Input from "@material-ui/core/Input";
import InputLabel from "@material-ui/core/InputLabel";
import InputAdornment from "@material-ui/core/InputAdornment";
import FormControl from "@material-ui/core/FormControl";
import TextField from "@material-ui/core/TextField";
import Grid from "@material-ui/core/Grid";
import AccountCircle from "@material-ui/icons/AccountCircle";
const useStyles = makeStyles((theme) => ({
margin: {
margin: theme.spacing(1)
}
}));
export default function InputWithIcon() {
const classes = useStyles();
return (
<div>
<TextField
className={classes.margin}
id="input-with-icon-textfield"
label="Your good name here"
InputLabelProps={{ shrink: false }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<AccountCircle />
</InputAdornment>
)
}}
/>
<TextField
className={classes.margin}
id="input-with-icon-textfield"
label="Your good name here"
// InputLabelProps={{ shrink: false }}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<AccountCircle />
</InputAdornment>
)
}}
/>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
以下是标签的相关默认样式:
formControl: {
position: 'absolute',
left: 0,
top: 0,
transform: 'translate(0, 24px) scale(1)',
},
/* Styles applied to the `input` element if `shrink={true}`. */
shrink: {
transform: 'translate(0, 1.5px) scale(0.75)',
transformOrigin: 'top left',
},
Run Code Online (Sandbox Code Playgroud)
要修复标签的位置以考虑输入装饰的宽度,您需要修改翻译 CSS的 x 轴部分(例如translate(32px, 24px) scale(1)
)。
以下是基于您的沙箱的工作示例:
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import InputAdornment from "@material-ui/core/InputAdornment";
import TextField from "@material-ui/core/TextField";
import AccountCircle from "@material-ui/icons/AccountCircle";
const useStyles = makeStyles((theme) => ({
margin: {
margin: theme.spacing(1)
},
inputLabelNoShrink: {
transform: "translate(32px, 24px) scale(1)"
}
}));
export default function InputWithIcon() {
const classes = useStyles();
const [value, setValue] = React.useState("");
const shrink = value.length > 0;
return (
<div>
<TextField
className={classes.margin}
id="input-with-icon-textfield"
label="Your good name here"
value={value}
onChange={(event) => setValue(event.target.value)}
InputLabelProps={{
shrink: shrink,
className: shrink ? undefined : classes.inputLabelNoShrink
}}
InputProps={{
startAdornment: (
<InputAdornment position="start">
<AccountCircle />
</InputAdornment>
)
}}
/>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16358 次 |
最近记录: |