0
votes

Impossible de définir le contenu de ma grille sur la même hauteur

Je veux que toutes les cartes de ma grille aient la même hauteur. J'essaie depuis des heures avec le chrome, testant diverses combinaisons mais je ne parviens pas à obtenir le résultat souhaité. Je veux que la partie du contenu de la carte (rose) se développe pour que tout soit dans la même ligne.

Les cellules de la grille sont parfaites. Mais si je fais grandir la carte ou la mets à 100% de hauteur, elle remplit l'élément de la grille (qui est montré sur l'image 1) avec du papier (image 2). J'ai fait la même chose pour tous les enfants (en particulier la zone de texte), mais ils ne s'étendent pas.

J'ai essayé d'étirer, de changer d'affichage, de hauteur, etc. Vous voulez éviter une hauteur fixe (même dépendante de la fenêtre d'affichage ) ou hauteur max fixe à tout prix. Des idées?

 Cette image montre le remplissage des éléments de grille autour de la carte

 Que se passe-t-il lorsque je flex augmente ou que je règle la hauteur de 100% dans la carte

Modifier: il vaut peut-être la peine de mentionner que le plus proche du résultat souhaité est de définir display: content dans CardActionArea sous-élément. La carte est exactement comme je le veux sauf qu'elle pousse mon texte en bas.

Voici le code de mes styles et de ma première carte - je laisserai les commentaires pour montrer certaines des choses qui ont été essayé et testé (certains codes ne sont pas non plus pertinents mais je vais le laisser au cas où quelque chose sabote ce que j'essaie de faire):

const useStyles = makeStyles(theme => ({
  root: {
    flexGrow: 1
  },
  grid: {}, //grid works exactly as I want it
  gridItem: {
    [theme.breakpoints.up("md")]: {
      padding: "32px !important"
    }
    // display: "flex",
    // flexDirection: "column",
    // justifyContent: "space-between",
    // alignItems: "stretch"
    // [theme.breakpoints.down("sm")]: {
    //   padding: theme.spacing(0)
    // }
  },
  card: {
    "&:hover": {
      boxShadow:
        "0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(255, 255, 255, 0.23)",
      // margin: "-10px auto 0",
      // transform: "scale(1.01)",
      // boxShadow: "-6px 4px 3px rgba(38, 38, 38, 0.2)",
      // top: "-4px",
      transition: ["boxShadow", "margin"],
      transitionDuration: 300
    },
    display: "flex",
    flexFlow: "column"
    // flexDirection: "column",
    // justifyContent: "space-between",
    // alignItems: "stretch",
    // height: "100%"

    // maxWidth: "300px",
    // maxHeight: 345
    // boxShadow:
    //   "10px 10px 5px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.43)"
    // display: "block",
    // width: "100%",
  },
  media: {
    height: "auto",
    width: "100%",
    objectFit: "cover"
    // margin: "-70px auto 0",
    // width: "80%",
    // height: 140,
    // borderRadius: "4px",
    // boxShadow: "0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23)",
    // position: "relative",
    // zIndex: 1000
  },
  content: {
    background: "linear-gradient(to right, #ee9ca7, #ffdde1)",
    padding: "10px",
    flexGrow: 1
    // display: "flex"
    // flexDirection: "column",
    // justifyContent: "space-between",
    // alignItems: "stretch",
    // height: "100%"
  },
  contHead: {
    color: "black",
    marginBottom: "3px"
  },
  contText: {
    color: "black"
  },
  buttonArea: {
    background: "linear-gradient(to right, #000000, #434343)",

    // display: "flex", //card has flex by default
    flexFlow: "wrap",
    justifyContent: "center",
    padding: "0"
  },
  buttons: {
    // backgroundColor: "white",
    padding: "0",
    minHeight: "29px",
    marginLeft: "0 !important",
    marginTop: "5px",
    marginBottom: "5px"
  },
  icons: { color: "white", fontSize: "1.8rem" },
  iconsTBA: { color: "#9c7e82", fontSize: "1.3rem" },
  toolTips: {
    // backgroundColor: "#f5f5f9",
    backgroundColor: "rgba(0, 0, 0, 1)",
    maxWidth: 350,
    // // maxHeight: 100,
    fontSize: theme.typography.pxToRem(14),
    // border: "1px solid #dadde9",
    // // transform: "translate(100px, 200px) rotate(50deg)"
    // // transform: "translate(50%,90%)"
    // marginLeft: "23vw",
    // marginTop: "90vh",
    [theme.breakpoints.down("sm")]: {
      marginBottom: "35vh"
    }
  },
  toolTipsCard: {
    fontSize: theme.typography.pxToRem(20)
  }
}));

//Tooltip info
const rpgTT = "test";

const Games = () => {
  const classes = useStyles();

  return (
    <div className="full-container-2">
      <div className={classes.root}>
        <Grid className={classes.grid} container spacing={3}>
          <Grid className={classes.gridItem} item xs={12} sm={6} md={4} lg={4}>
            <Card className={classes.card}>
              <Tooltip
                classes={{ tooltip: classes.toolTipsCard }}
                TransitionComponent={Zoom}
                title="Play"
                placement="top"
              >
                <CardActionArea>
                  <CardMedia className={classes.media} image={pic1} />
                  <CardContent className={classes.content}>
                    <Typography
                      className={classes.contHead}
                      gutterBottom
                      variant="h5"
                      component="h2"
                    >
                      Game Title
                    </Typography>
                    <Typography
                      className={classes.contText}
                      variant="body2"
                      color="textSecondary"
                      component="p"
                    >
                      This is a small string
                    </Typography>
                  </CardContent>
                </CardActionArea>
              </Tooltip>
              <CardActions className={classes.buttonArea}>
                <Button className={classes.buttons}>
                  <FontAwesomeIcon
                    title="Not Available Yet"
                    className={classes.iconsTBA}
                    icon={faWindows}
                  />
                </Button>
                <Button className={classes.buttons}>
                  <FontAwesomeIcon
                    title="Not Available Yet"
                    className={classes.iconsTBA}
                    icon={faLinux}
                  />
                </Button>
                <Button className={classes.buttons}>
                  <FontAwesomeIcon className={classes.icons} icon={faGithub} />
                </Button>

                <Tooltip
                  classes={{ tooltip: classes.toolTips }}
                  TransitionComponent={Zoom}
                  title={rpgTT}
                  placement="bottom"
                >
                  <Button className={classes.buttons}>
                    <FontAwesomeIcon
                      className={classes.icons}
                      icon={faInfoCircle}
                    />
                  </Button>
                </Tooltip>
              </CardActions>
            </Card>
          </Grid>


8 commentaires

Essayez d'utiliser Affichage: flex sur le conteneur et jouez avec align-contenu


J'ai déjà essayé de régler l'affichage: flex à tout, ajout de la direction de flex, augmentation de la flexibilité, etc.


Ce serait génial non seulement d'avoir des images dans votre question, mais aussi votre code afin que les gens puissent facilement jouer avec et vous aider. Les peeps sont trop paresseux pour analyser votre code à partir d'images :(


Je le ferais normalement, mais dans ce cas, je pensais que montrer l'une des combinaisons de paramètres que j'ai essayées ne ferait pas beaucoup de différence. Ajoutera mes styles dans un peu.


Essayez cet ensemble display: flex au conteneur qui contient toutes les cartes, puis à la carte elle-même, définissez display: flex; flex-direction: colonne; hauteur: 100%


Pas de chance avec cela malheureusement: / J'ai également essayé de définir ces paramètres sur le contenu de mon texte et d'autres sous-éléments de la carte. Merci d'avoir essayé de m'aider, j'ai aussi téléchargé mon code mais c'est un désordre gonflé, j'en ai peur.


Maintenant, je pense que je l'ai compris. L'élément qui est mis en évidence sur votre photo a en fait la même hauteur que les autres éléments. Essayez d'approfondir un élément (vers l'élément imbriqué suivant) et vérifiez sa hauteur. Et si ce n'est pas à 100%, il en est ainsi


Exactement. L'élément de la 1ère image est l'élément de la grille, conteneur direct de la carte, et il a la bonne taille. Cependant, lorsque j'essaie de régler la carte (c'est l'élément imbriqué suivant) à la hauteur 100% ou de la faire croître, elle grandit (son papier), mais son contenu ne le fait pas, comme le montre la deuxième image (blanc espacer). Après cela, j'ai essayé de faire la même chose avec tous les autres enfants (même les zones de cardaction) mais le contenu ne sera tout simplement pas mis à l'échelle.


3 Réponses :


0
votes

Faites de chaque carte une flexbox et donnez au panneau d'information un flex-grow: 1 :

<div class="grid">
  <div class="card">
    <img src="http://placekitten.com/200/200" />
    <div class="info">
       <h1>Title</h1>
       <p>Text</p>
    </div>
  </div>
  <div class="card">
    <img src="http://placekitten.com/200/200" />
    <div class="info">
       <h1>Title</h1>
       <p>Text</p>
       <p>Text</p>
       <p>Text</p>
    </div>
  </div>

</div>
.grid{
   display:grid;
       grid-template-columns: 1fr 1fr;
}

.card {
    display: flex;
    flex-flow: column;
    margin-right: 10px;
}

.card img{
 width: 100%;
}

.card .info{
  background-color: pink;
  flex-grow: 1;
}


1 commentaires

J'aimerais pouvoir dire que cela fonctionne: / La grille se comporte parfaitement en général, les cellules de la grille ont juste la bonne taille. Et le composant de carte se développe comme indiqué sur l'image 2, mais seul son élément de papier se développe. J'ai essayé de configurer l'affichage flexible et de s'étendre à tous les autres sous-éléments, mais ils ne bougeront pas.



0
votes

J'ai essayé d'obtenir le comportement souhaité de la carte d'une manière très simple, j'espère que cela aiderait:

<div class="container">
  <div class="card">
    <div class="card_header">
      <h1>I'm header</h1>
    </div>
    <div class="card_content">
      <p>I'm different amount of content</p>
    </div>
  </div>
  
  <div class="card">
    <div class="card_header">
      <h1>I'm header</h1>
    </div>
    <div class="card_content">
      <p>I'm different amount of content</p>
      <p>I'm different amount of content</p>
    </div>
  </div>
  
  <div class="card">
    <div class="card_header">
      <h1>I'm header</h1>
    </div>
    <div class="card_content">
      <p>I'm different amount of content</p>
      <p>I'm different amount of content</p>
      <p>I'm different amount of content</p>
    </div>
  </div>
  
  <div class="card">
    <div class="card_header">
      <h1>I'm header</h1>
    </div>
    <div class="card_content">
      <p>I'm different amount of content</p>
    </div>
  </div>
  
  <div class="card">
    <div class="card_header">
      <h1>I'm header</h1>
    </div>
    <div class="card_content">
      <p>I'm different amount of content</p>
      <p>I'm different amount of content</p>
    </div>
  </div>
  
  <div class="card">
    <div class="card_header">
      <h1>I'm header</h1>
    </div>
    <div class="card_content">
      <p>I'm different amount of content</p>
      <p>I'm different amount of content</p>
      <p>I'm different amount of content</p>
    </div>
  </div>
</div>
.container {
  display: flex;
  flex-wrap: wrap;
}

.card {
    border: 4px solid #827d7d;
    border-radius: 5px;
    margin: 8px;
    display: flex;
    flex-direction: column;
}

.card_header {
  background-color: grey;
}

.card_content {
  background-color: yellow;
  height: 100%;
}

h1, p {
  margin: 0;
}


1 commentaires

Ces exemples fonctionnent mais je crains que quelque chose dans la hiérarchie avec l'élément MUI de la carte ne cause le problème. La hiérarchie est quelque chose comme ça = grille -> élément de grille -> Carte -> Info-bulle -> Zone d'action de la carte, Actions de la carte. CAA contient le média et le contenu, qui contient l'en-tête et le texte. Les actions de carte contiennent les boutons et les icônes. Je vais essayer de supprimer des éléments et trouver ce qui ne va pas.



0
votes

On a trouvé le coupable. C'était le CardActionArea (un sous-composant de la carte qui la rend cliquable et contient l'effet d'entraînement de MUI).

Le résultat souhaité est réalisé uniquement lorsque cette zone possède toutes les propriétés suivantes, de sorte que le contenu rentre dans cette zone:

flexGrow: 1,
display: "flex",
flexDirection: "column",
alignItems: "stretch"

Merci à tous pour en avoir discuté, m'a aidé à aborder le problème dans une meilleure façon et a commencé à commenter les sous-éléments de la carte un par un et a trouvé le problème. Bravo!


0 commentaires