How can I set an static outlined div similar to Material-UI's outlined textfield?

前端 未结 1 470
面向向阳花
面向向阳花 2021-01-16 12:48

I want wrap some TextFields in a outlined container and I found this answer. This work as i want:

But when I click in an inside textfield all the texfields

相关标签:
1条回答
  • 2021-01-16 13:07

    Below is an approach that does not leverage TextField or FormControl and thus can be safely used to wrap other inputs. This copies some styles from OutlinedInput and the InputLabel styles applied when within a FormControl.

    import React from "react";
    import ReactDOM from "react-dom";
    import InputLabel from "@material-ui/core/InputLabel";
    import NotchedOutline from "@material-ui/core/OutlinedInput/NotchedOutline";
    import { withStyles } from "@material-ui/core/styles";
    
    const styles = {
      root: {
        position: "relative"
      },
      content: {
        padding: "18.5px 14px"
      },
      inputLabel: {
        position: "absolute",
        left: 0,
        top: 0,
        // slight alteration to spec spacing to match visual spec result
        transform: "translate(0, 24px) scale(1)"
      }
    };
    
    const LabelledOutline = ({ classes, id, label, children }) => {
      const [labelWidth, setLabelWidth] = React.useState(0);
      const labelRef = React.useRef(null);
      React.useEffect(() => {
        const labelNode = ReactDOM.findDOMNode(labelRef.current);
        setLabelWidth(labelNode != null ? labelNode.offsetWidth : 0);
      }, [label]);
    
      return (
        <div style={{ position: "relative", marginTop: "8px" }}>
          <InputLabel
            ref={labelRef}
            htmlFor={id}
            variant="outlined"
            className={classes.inputLabel}
            shrink
          >
            {label}
          </InputLabel>
          <div className={classes.root}>
            <div id={id} className={classes.content}>
              {children}
              <NotchedOutline notched labelWidth={labelWidth} />
            </div>
          </div>
        </div>
      );
    };
    export default withStyles(styles)(LabelledOutline);
    

    0 讨论(0)
提交回复
热议问题