-
Notifications
You must be signed in to change notification settings - Fork 0
Text Fields
rkaku edited this page Nov 5, 2019
·
1 revision
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import FilledInput from '@material-ui/core/FilledInput';
import FormControl from '@material-ui/core/FormControl';
import FormHelperText from '@material-ui/core/FormHelperText';
import Input from '@material-ui/core/Input';
import InputLabel from '@material-ui/core/InputLabel';
import OutlinedInput from '@material-ui/core/OutlinedInput';const useStyles = makeStyles(theme => ({
container: {
display: 'flex',
flexWrap: 'wrap',
},
formControl: {
margin: theme.spacing(1),
},
}));
export default function ComposedTextField() {
const [labelWidth, setLabelWidth] = React.useState(0);
const [name, setName] = React.useState('Composed TextField');
const labelRef = React.useRef(null);
const classes = useStyles();
React.useEffect(() => {
setLabelWidth(labelRef.current.offsetWidth);
}, []);
const handleChange = event => {
setName(event.target.value);
};
return (
);
} <div className={classes.container}>
{/* disabled error variant="outlined" variant="filled" */}
<FormControl className={classes.formControl}>
<InputLabel htmlFor="component-helper">Name</InputLabel>
<Input
id="component-helper"
placeholder="Placeholder"
value={name}
onChange={handleChange}
aria-describedby="component-helper-text"
/>
<FormHelperText id="component-helper-text">Some important helper text</FormHelperText>
</FormControl>
</div>import React from 'react';
import {
fade,
ThemeProvider,
withStyles,
makeStyles,
createMuiTheme,
} from '@material-ui/core/styles';
import InputBase from '@material-ui/core/InputBase';
import InputLabel from '@material-ui/core/InputLabel';
import TextField from '@material-ui/core/TextField';
import FormControl from '@material-ui/core/FormControl';
import { green } from '@material-ui/core/colors';const CssTextField = withStyles({
root: {
'& label.Mui-focused': {
color: 'green',
},
'& .MuiInput-underline:after': {
borderBottomColor: 'green',
},
'& .MuiOutlinedInput-root': {
'& fieldset': {
borderColor: 'red',
},
'&:hover fieldset': {
borderColor: 'yellow',
},
'&.Mui-focused fieldset': {
borderColor: 'green',
},
},
},
})(TextField);const BootstrapInput = withStyles(theme => ({
root: {
'label + &': {
marginTop: theme.spacing(3),
},
},
input: {
borderRadius: 4,
position: 'relative',
backgroundColor: theme.palette.common.white,
border: '1px solid #ced4da',
fontSize: 16,
width: 'auto',
padding: '10px 12px',
transition: theme.transitions.create(['border-color', 'box-shadow']),
// Use the system font instead of the default Roboto font.
fontFamily: [
'-apple-system',
'BlinkMacSystemFont',
'"Segoe UI"',
'Roboto',
'"Helvetica Neue"',
'Arial',
'sans-serif',
'"Apple Color Emoji"',
'"Segoe UI Emoji"',
'"Segoe UI Symbol"',
].join(','),
'&:focus': {
boxShadow: `${fade(theme.palette.primary.main, 0.25)} 0 0 0 0.2rem`,
borderColor: theme.palette.primary.main,
},
},
}))(InputBase);const useStylesReddit = makeStyles(theme => ({
root: {
border: '1px solid #e2e2e1',
overflow: 'hidden',
borderRadius: 4,
backgroundColor: '#fcfcfb',
transition: theme.transitions.create(['border-color', 'box-shadow']),
'&:hover': {
backgroundColor: '#fff',
},
'&$focused': {
backgroundColor: '#fff',
boxShadow: `${fade(theme.palette.primary.main, 0.25)} 0 0 0 2px`,
borderColor: theme.palette.primary.main,
},
},
focused: {},
}));function RedditTextField(props) {
const classes = useStylesReddit();
return <TextField InputProps={{ classes, disableUnderline: true }} {...props} />;
}const useStyles = makeStyles(theme => ({
root: {
display: 'flex',
flexWrap: 'wrap',
},
margin: {
margin: theme.spacing(1),
},
}));const ValidationTextField = withStyles({
root: {
'& input:valid + fieldset': {
borderColor: 'green',
borderWidth: 2,
},
'& input:invalid + fieldset': {
borderColor: 'red',
borderWidth: 2,
},
'& input:valid:focus + fieldset': {
borderLeftWidth: 6,
padding: '4px !important', // override inline-style
},
},
})(TextField);const theme = createMuiTheme({
palette: {
primary: green,
},
});export default function CustomizedInputs() {
const classes = useStyles();
return (
<form className={classes.root} noValidate>
<CssTextField className={classes.margin} id="custom-css-standard-input" label="Custom CSS" />
<CssTextField
className={classes.margin}
label="Custom CSS"
variant="outlined"
id="custom-css-outlined-input"
/>
<ThemeProvider theme={theme}>
<TextField
className={classes.margin}
label="ThemeProvider"
id="mui-theme-provider-standard-input"
/>
<TextField
className={classes.margin}
label="ThemeProvider"
variant="outlined"
id="mui-theme-provider-outlined-input"
/>
</ThemeProvider>
<FormControl className={classes.margin}>
<InputLabel shrink htmlFor="bootstrap-input">
Bootstrap
</InputLabel>
<BootstrapInput defaultValue="react-bootstrap" id="bootstrap-input" />
</FormControl>
<RedditTextField
label="Reddit"
className={classes.margin}
defaultValue="react-reddit"
variant="filled"
id="reddit-input"
/>
<InputBase
className={classes.margin}
defaultValue="Naked input"
inputProps={{ 'aria-label': 'naked' }}
/>
<ValidationTextField
className={classes.margin}
label="CSS validation style"
required
variant="outlined"
defaultValue="Success"
id="validation-outlined-input"
/>
</form>
);
}import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import TextField from '@material-ui/core/TextField';
const useStyles = makeStyles(theme => ({
container: {
display: 'flex',
flexWrap: 'wrap',
},
textField: {
marginLeft: theme.spacing(1),
marginRight: theme.spacing(1),
width: 200,
},
dense: {
marginTop: 19,
},
menu: {
width: 200,
},
}));
export default function TextFields() {
const classes = useStyles();
const [values, setValues] = React.useState({
name: 'Cat in the Hat',
age: '',
multiline: 'Controlled',
currency: 'EUR',
});
const handleChange = name => event => {
setValues({ ...values, [name]: event.target.value });
};
return (
<form className={classes.container} noValidate autoComplete="off">
<TextField
required
error
multiline
rows="4"
id="standard-full-width"
label="Body"
style={{ margin: 25 }}
helperText="20文字以内で入力して下さい"
fullWidth
margin="normal"
onChange={handleChange('name')}
value={values.name}
/>
</form>
);
}