219 votes

Comment centrer un composant dans Material-UI et le rendre réactif ?

Je ne comprends pas bien le système de grille React Material-UI. Si je veux utiliser un composant de formulaire pour la connexion, quel est le moyen le plus simple de le centrer sur l'écran sur tous les appareils (mobiles et de bureau) ?

431voto

Nadun Points 1327

Puisque vous allez l'utiliser dans une page de connexion. Voici un code que j'ai utilisé dans une page de connexion en utilisant Material-UI

<Grid
  container
  spacing={0}
  direction="column"
  alignItems="center"
  justify="center"
  style={{ minHeight: '100vh' }}
>

  <Grid item xs={3}>
    <LoginForm />
  </Grid>   

</Grid> 

cela placera ce formulaire de connexion au centre de l'écran.

Mais IE ne prend toujours pas en charge la grille Material-UI et vous verrez du contenu mal placé dans IE.

J'espère que cela vous aidera.

2 votes

Une petite correction, pour le cas d'utilisation de l'Op, la direction du flex devrait être row>>>> direction="row".

0 votes

Normalement, alignItems=center et justify=center placent le composant au centre de la page, mais ce n'est pas le cas. L'ajout du style={{ minHeight : '100vh' }} fait l'affaire mais ajoute une barre de défilement dans la page. Comment cela sera-t-il corrigé ?

0 votes

Merci. Après des heures de recherche, c'est finalement celui qui m'a aidé à obtenir un FormLabel et un TextField côte à côte dans la même ligne.

63voto

Max Points 362

Une autre option est :

<Grid container justify = "center">
  <Your centered component/>
</Grid>

2 votes

Bien que cela fonctionne, l'utilisation d'un conteneur de grille sans élément de grille est un comportement non documenté et peut se briser à tout moment (bien que ce ne soit probablement pas le cas).

2 votes

Dans mui v5 ce serait justifyContent = "center"

21voto

Jöcker Points 246

Voici une autre option sans grille :

<div
    style={{
        position: 'absolute', 
        left: '50%', 
        top: '50%',
        transform: 'translate(-50%, -50%)'
    }}
>
    <YourComponent/>
</div>

0 votes

Cela a très bien fonctionné pour moi pour centrer un composant Material-UI <Fab>. En complément, dans la méthode translate, le premier paramètre est la translation horizontale et le second est la translation verticale.

0 votes

Cette solution a un problème, elle raccourcit la taille du composant de 50% en largeur et en hauteur.

14voto

La version de @Nadun n'a pas fonctionné pour moi, le dimensionnement ne fonctionnait pas bien. J'ai supprimé le direction="column" ou le changer en row Le site Web de l'Office de l'harmonisation dans le marché intérieur (OIT), qui aide à créer des formulaires d'ouverture de session verticaux avec une taille adaptée aux besoins.

<Grid
  container
  spacing={0}
  alignItems="center"
  justify="center"
  style={{ minHeight: "100vh" }}
>
  <Grid item xs={6}></Grid>
</Grid>;

5voto

Gavin Thomas Points 929

Tout ce que vous avez à faire est d'envelopper votre contenu dans une balise Grid Container, de spécifier l'espacement, puis d'envelopper le contenu réel dans une balise Grid Item.

 <Grid container spacing={24}>
    <Grid item xs={8}>
      <leftHeaderContent/>
    </Grid>

    <Grid item xs={3}>
      <rightHeaderContent/>
    </Grid>
  </Grid>

De plus, j'ai eu beaucoup de mal avec la grille matérielle, je vous suggère d'aller voir du côté de la flexbox qui est intégrée automatiquement dans les CSS et que vous n'avez pas besoin de paquets supplémentaires pour utiliser. C'est très facile à apprendre.

https://css-tricks.com/snippets/css/a-guide-to-flexbox/

0 votes

Merci, donc je dois utiliser 3 éléments de la grille et placer le composant au milieu pour le centrer ?

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