Salut ! ? Après avoir passé d'innombrables heures à aider les développeurs à déboguer leurs mises en page CSS, j'ai remarqué que nous menons tous les mêmes batailles. Résolvons ce problème aujourd'hui avec des solutions CSS testées et qui fonctionnent réellement en production.
Nous sommes tous passés par là. Vous trouvez un tutoriel CSS, copiez le code, et du coup :
Cela vous semble familier ? Résolvons ces problèmes une fois pour toutes.
Tout d'abord, abordons la mise en page la plus courante : l'en-tête, le contenu déroulant et le pied de page. Voici ce que nous voulons :
Voici la solution :
.app { display: grid; grid-template-rows: auto 1fr auto; min-height: 100vh; gap: 1rem; } .header { position: sticky; top: 0; background: white; z-index: 10; } .footer { background: #f5f5f5; } .content { /* Prevent content from getting stuck under header */ padding-top: var(--safe-padding, 1rem); overflow-y: auto; }
<div> <p>Why this works:</p> <ul> <li>Grid's 1fr handles the space distribution automatically</li> <li>Sticky header stays visible while scrolling</li> <li>Content scrolls independently</li> <li>Footer always stays at the bottom</li> </ul> <h2> 2. The "Works Everywhere" Card Grid </h2> <p>Need cards that look good no matter how many you have? This solution handles everything from 1 to 100 cards:<br> </p> <pre class="brush:php;toolbar:false">.card-container { --min-card-width: 300px; display: grid; grid-template-columns: repeat( auto-fit, minmax(min(var(--min-card-width), 100%), 1fr) ); gap: clamp(1rem, 2vw, 2rem); padding: clamp(1rem, 2vw, 2rem); } .card { display: flex; flex-direction: column; height: 100%; padding: 1rem; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } .card-content { flex: 1; /* Takes up remaining space */ } .card-footer { margin-top: auto; /* Pushes footer to bottom */ }
Ce qui rend cela spécial :
Avez-vous déjà remarqué à quel point il est difficile de lire un texte qui s'étend sur toute la largeur d'un écran large ? Voici comment résoudre ce problème :
.content-wrapper { --content-width: 65ch; --padding: clamp(1rem, 5vw, 3rem); width: min(var(--content-width), 100%); margin-inline: auto; padding-inline: var(--padding); } .text-content { font-size: clamp(1rem, 1rem + 0.5vw, 1.25rem); line-height: 1.6; } /* For full-width backgrounds with contained content */ .full-width { width: 100%; padding-inline: var(--padding); } .full-width > * { width: min(var(--content-width), 100%); margin-inline: auto; }
Pourquoi les développeurs adorent ça :
/* Add this to your dev environment */ * { outline: 1px solid rgba(255,0,0,0.1); }
Cela permet de détecter rapidement les problèmes de mise en page.
/* Start here */ .element { flex-direction: column; gap: 1rem; } /* Then enhance */ @media (min-width: 768px) { .element { flex-direction: row; } }
:root { --spacing-unit: 0.5rem; --padding-sm: calc(var(--spacing-unit) * 2); --padding-md: calc(var(--spacing-unit) * 4); --padding-lg: calc(var(--spacing-unit) * 8); }
La meilleure façon d'apprendre est de faire. Prenez ces extraits et essayez-les dans votre projet. Commencez par la présentation de l'application : c'est la base sur laquelle tout le reste s'appuie.
Vous avez des questions ? Vous avez trouvé un moyen d’améliorer ces modèles ? Déposez un commentaire ci-dessous ! Je réponds généralement dans les 24 heures.
Si cela vous a aidé, pensez à :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!