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?
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>
3 Réponses :
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; }
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.
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; }
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.
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!
Essayez d'utiliser
Affichage: flex code> sur le conteneur et jouez avec
align-contenu code>
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éfinissezdisplay: 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.