121 votes

Comment changer la couleur de la bordure de Material-UI <TextField/>

Je n'arrive pas à trouver comment changer la couleur du contour d'une variante encadrée. J'ai regardé les problèmes sur GitHub et les gens semblent indiquer qu'il faut utiliser la propriété "InputProps", mais cela ne semble rien faire. This is the field Voici mon code dans son état actuel

import React from 'react';
import { withStyles } from '@material-ui/core/styles';
import TextField from '@material-ui/core/TextField';
import PropTypes from 'prop-types';

const styles = theme => ({
field: {
    marginLeft: theme.spacing.unit,
    marginRight: theme.spacing.unit,
    height: '30px !important'
},
});

class _Field extends React.Component {
      render() {
          const { classes, fieldProps } = this.props;
             return (
                <TextField
                {...fieldProps}
                label={this.props.label || "<Un-labeled>"}
                InputLabelProps={{ shrink: true }} // stop from animating.
                inputProps={{ className: classes.fieldInput }}
                className={classes.field}
                margin="dense"
               variant="outlined"
            />
        );
    }
}

_Field.propTypes = {
    label: PropTypes.string,
    fieldProps: PropTypes.object,
    classes: PropTypes.object.isRequired
}

export default withStyles(styles)(_Field);

96voto

Jojo Joseph Points 53

https://codesandbox.io/s/6rx8p

                      <CssTextField      

                       label="Username"

                       className="username"
                       name="username"
                       onChange={this.onChange}
                       type="text"
                       autoComplete="current-password"
                       margin="normal"
                       inputProps={{ style: { fontFamily: 'nunito', color: 'white'}}}

                    />

//déclarer la const et ajouter le style material UI

const CssTextField = withStyles({
  root: {
    '& label.Mui-focused': {
      color: 'white',
    },
    '& .MuiInput-underline:after': {
      borderBottomColor: 'yellow',
    },
    '& .MuiOutlinedInput-root': {
      '& fieldset': {
        borderColor: 'white',
      },
      '&:hover fieldset': {
        borderColor: 'white',
      },
      '&.Mui-focused fieldset': {
        borderColor: 'yellow',
      },
    },
  },
})(TextField);

1 votes

Note : TextField doit avoir variant='outlined'.

4 votes

Cela doit être la réponse acceptée. Je l'ai trouvée après avoir cherché partout. Merci.

0 votes

Cela ne modifie-t-il pas également la couleur de la bordure du survol pour les entrées désactivées ? (C'est le cas pour moi, je cherche un moyen d'éviter cela).

66voto

Peter Catalin Points 371

Jetez un coup d'œil à ceci, j'ai fait une démonstration rapide :

https://stackblitz.com/edit/material-ui-custom-outline-color

Il modifie la couleur de la bordure par défaut et la couleur de l'étiquette du champ textuel Material-UI, mais conserve la couleur primaire lorsqu'il est ciblé.

Jetez également un coup d'œil à ce lien, il m'a donné "l'idée" :

https://github.com/mui-org/material-ui/issues/13347

Si vous voulez changer la couleur lors de la mise au point, regardez ces exemples de la documentation :

https://material-ui.com/demos/text-fields/#customized-inputs

0 votes

Ah, vous avez toujours besoin de !important dans certains cas. Merci.

2 votes

J'essaie de faire en sorte que cela fonctionne avec createMuiTheme une idée ?

0 votes

La couleur de l'étiquette onfocus ne change pas, comment la changer aussi ?

32voto

b-zurg Points 153

Au cas où quelqu'un voudrait faire cela avec des composants stylisés :

import styled from "styled-components";
import {TextField} from "@material-ui/core";

const WhiteBorderTextField = styled(TextField)`
  & label.Mui-focused {
    color: white;
  }
  & .MuiOutlinedInput-root {
    &.Mui-focused fieldset {
      border-color: white;
    }
  }
`;

Ça m'a pris beaucoup trop de temps à comprendre. J'espère que ça aidera quelqu'un.

3 votes

Pouvez-vous s'il vous plaît expliquer pourquoi il ya un espace après l'esperluette dans & label.Mui-focused et aucun espace dans &.Mui-focused fieldset ?

0 votes

Merci ! Je dois admettre que je n'ai pas bien compris comment vous en êtes arrivé là, mais ça marche très bien ! J'ai mis trop de temps aussi, on devrait espérer que le changement de couleur est facile... oh bien...

28voto

Hitesh Sahu Points 12561
const styles = theme => ({
  notchedOutline: {
    borderWidth: "1px",
    borderColor: "yellow !important"
  }
});

 <TextField
              variant="outlined"
              rows="10"
              fullWidth
              InputProps={{
                classes: {
                  notchedOutline: classes.notchedOutline
                }
              }}
              id="standard-textarea"
              label="Input Set"
              helperText="Enter an array with elemets seperated by , or enter a JSON object"
              placeholder="Placeholder"
              multiline
              value={"" + this.props.input}
              onChange={this.props.handleChangeValue("input")}
              className={classes.textField}
              margin="normal"
            />

enter image description here

0 votes

Cette réponse m'a aidé, mais je n'avais pas besoin de la !important partie. Version 4.11.2 de Material-UI

0 votes

Cela a parfaitement fonctionné. Merci, mon pote.

8voto

Jojo Joseph Points 53
  inputProps={{ style: { fontFamily: 'nunito', color: 'white'}}}

L'Inputprops fonctionne en stylisant les données saisies dans le champ de texte et nous pouvons également utiliser le className pour une coloration personnalisée .

      const CssTextField = withStyles({
     root: {
    '& label.Mui-focused': {
     color: 'white',
      },
     '& .MuiInput-underline:after': {
      borderBottomColor: 'yellow',
     },
    '& .MuiOutlinedInput-root': {
     '& fieldset': {
     borderColor: 'white',
     },
     '&:hover fieldset': {
      borderColor: 'white',
       },
     '&.Mui-focused fieldset': {
       borderColor: 'yellow',
     },
     },
    },

Ce style const travaille la potion extérieure du texte déposé...

Le style de la partie extérieure de l'interface utilisateur matérielle est au-dessus de la demande de changement...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X