28182 sujets

CSS et mise en forme, CSS3

Bonjour à vous tous,

Mon dernier topic https://forum.alsacreations.com/topic-4-91091-1-Comment-enlever-du-texte-avec-les-CSS-Y.html parlait du "mobile first" (à la fin du topic) et je voudrais savoir comment développer en "mobile first"

J'ai pris en exemple une structure Masonry que j'ai refaite et j'aimerai qu'on m'explique comment structurer le code CSS de sorte qu'il soit orienté "mobile first".

Merci pour votre aide et
que le code soit avec vous !

Voici le code HTML :
<!DOCTYPE html>
<html lang="fr">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="styles.css">
    <title>Projet</title>
</head>

<body>
    <main>
        <section>
            <div class="container">
                <div>
                    <img src="http://placehold.it/350x150" alt="Pour le moment, il n'y a pas d'image">
                    <article>
                        <h2>Premier titre</h2>
                        <p>
                            Le tramway jaune avance lentement dans le brouillard laiteux et surchauffé de cette fin d’après midi d’été. Le trafic s’écoule sous la canicule, se disperse et se répand dans les mille recoins de Budapest. La ville piétine et les enfants assiègent les marchands de glace. La voiture passe au loin, tourne sur les grands boulevards, longe une avenue et débouche sur le pont Elisabeth. Suspendu dans le vide, acrobate au fil des ans et de l’eau qui passent, le monument traverse le fleuve en une enjambée majestueuse, rétablissant le lien séculaire entre la ville bourgeoise de Pest et les collines royales de Buda.
                        </p>
                    </article>
                </div>
                <div>
                    <img src="http://placehold.it/350x220" alt="Pour le moment, il n'y a pas d'image">
                    <article>
                        <h2>Second titre</h2>
                        <p>
                            Sous le pont passe un hydroglisseur, il arrive de Vienne enrobé d’un cocon d’argent, milliards de gouttes d’eau qui brillent dans l’air surchauffé, d’où émergent en virevoltant les mouettes
                            du Danube.
                        </p>
                    </article>
                </div>
                <div>
                    <img src="http://placehold.it/350x300" alt="Pour le moment, il n'y a pas d'image">
                    <article>
                        <h2>Troisième titre</h2>
                        <p>
                            On découvre alors la Ville, avec comme seul garde-fou les remparts de la fortification.
                        </p>
                    </article>
                </div>
                <div>
                    <img src="http://placehold.it/350x120" alt="Pour le moment, il n'y a pas d'image">
                    <article>
                        <h2>Quatrième titre</h2>
                        <p>
                            Sous le pont passe un hydroglisseur, il arrive de Vienne enrobé d’un cocon d’argent, milliards de gouttes d’eau qui brillent dans l’air surchauffé, d’où émergent en virevoltant les mouettes
                            du Danube.
                        </p>
                    </article>
                </div>
                <div>
                    <img src="http://placehold.it/350x100" alt="Pour le moment, il n'y a pas d'image">
                    <article>
                        <h2>Cinquième titre</h2>
                        <p>
                            Les touristes y sirotent un peu de fraîcheur palpable qui vient des raisins du mont Tokaj.
                        </p>
                    </article>
                </div>
                <div>
                    <img src="http://placehold.it/350x230" alt="Pour le moment, il n'y a pas d'image">
                    <article>
                        <h2>Sixième titre</h2>
                        <p>
                            On se perd alors dans les rues médiévales du Château, à la rencontre de l’inconnu, du vin qui
                            enivre, de la musique qui enchante, et de la cuisine parfumée au paprika.
                        </p>
                    </article>
                </div>
                <div>
                    <img src="http://placehold.it/350x150" alt="Pour le moment, il n'y a pas d'image">
                    <article>
                        <h2>Septième titre</h2>
                        <p>
                            Les violons jouent en sourdine autour des tables et les costumes du pays dansent la sarabande au rythme endiablé du Csárdás.
                        </p>
                    </article>
                </div>
                <div>
                    <img src="http://placehold.it/350x300" alt="Pour le moment, il n'y a pas d'image">
                    <article>
                        <h2>Huitième titre</h2>
                        <p>
                            On se perd alors dans les rues médiévales du Château, à la rencontre de l’inconnu, du vin qui enivre, de la musique qui enchante, et de la cuisine parfumée au paprika.
                        </p>
                    </article>
                </div>
                <div>
                    <img src="http://placehold.it/350x100" alt="Pour le moment, il n'y a pas d'image">
                    <article>
                        <h2>Neuvième titre</h2>
                        <p>
                            Les violons jouent en sourdine autour des tables et les costumes du pays dansent la sarabande au rythme endiablé du Csárdás.
                        </p>
                    </article>
                </div>
                <div>
                    <img src="http://placehold.it/350x350" alt="Pour le moment, il n'y a pas d'image">
                    <article>
                        <h2>Dixième titre</h2>
                        <p>
                            Tout Budapest est là, séparée en deux par le large ruban argenté du Danube. Au nord, on devine l’île Marguerite, ses palaces et ses piscines. Les touristes y sirotent un peu de fraîcheur palpable qui vient des raisins du mont Tokaj.
                        </p>
                    </article>
                </div>
            </div>
        </section>
    </main>
</body>

</html>

Voici le code CSS :
*{
  margin: 0;
  padding: 0;
}

html{
  line-height: 145%;
  font-size: 1.125rem;
}

body {
  background-color: var(--vertclair);
  color: var(--gris);
}

section > h1{
  margin-bottom: -1rem;
}

article > h2 {
  font-size: 1.5rem;
  color: var(--vertmoyen);
  font-size: 1.2rem;
  font-weight: 300;
}

article > p {
  text-align: justify;
  hyphens: auto;
  color: var(--grisfonce2);
}

.container {
  column-count: 4;
  column-gap: 1rem;
  padding: 0 1rem;
}

.container > div {
  display: inline-block;
  width: 100%;
  margin-top: 1rem;
}

.container > div img {
  width: 100%;
  display: block;
  border-radius: 1rem 1rem 0 0;
}

.container > div > article {
  display: block;
  padding: 1rem;
  background-color: var(--blanc);
  border-radius: 0 0 1rem 1rem;
}










/* Responsive */

@media screen and (max-width: 768px) {
  .container {
    column-count: 2;
  }
}

@media screen and (max-width: 480px) {
  section > h1{
    margin-bottom: 0;
  }
  .container > div img {
    border-radius: 0;
  }
  .container > div > article {
    border-radius: 0;
  }
  .container {
    column-count: 1;
    padding: 0;
  }
  .container > div {
    margin-top: 0;
  }
}







/* Variables  */

:root {
  --blanc: #f8f8f8;
  --vertfonce: #858330;
  --vertclair: #93b874;
  --verttresclair: #ced57f;
  --vertmoyen: #5f8344;
  --jaune: #f5c102;
  --gris: #444;
  --grisfonce1: #333333;
  --grisfonce2: #4d4d4d;
  --rougeclair: #e2270f;
  --rougefonce: #b40d02;
  --bleugris1: #4a6fa5;
  --bleugris2: #5f7285;
  --brunchaud1: #5d4037;
  --brunchaud2: #4e342e;
}

Modifié par ObiJuanKenobi (22 Aug 2024 - 08:46)
Modérateur
ObiJuanKenobi a écrit :
je voudrais savoir comment développer en "mobile first"


Salut,

Tu commences avec un ecran large de 320px et tu codes ton css. Comme je l'ai indiqué, c'est l'inverse. Tu fais quasiment tout à l'envers.
Modifié par niuxe (22 Aug 2024 - 10:31)
niuxe a écrit :

Tu commences avec un ecran large de 320px et tu codes ton css. Comme je l'ai indiqué, c'est l'inverse. Tu fais quasiment tout à l'envers.

Mais à un moment donné, je vais devoir déclarer des propriétés pour que l'interface s'affiche dans un écran desktop et dans ce cas, comment concrètement je structure le code CSS ? Je dois créer un :
@media screen and (max-width: 1024px) {
  ...
  }
}
et je place toutes les définitions dans ce media query destinés aux écrans desktop ?
A la fin, je n'aurai dans mon CSS que 3 media query, un pour les smartphones, un pour les tablettes et un dernier pour les desktop?
Modifié par ObiJuanKenobi (22 Aug 2024 - 11:01)
Modérateur
ObiJuanKenobi a écrit :

comment concrètement je structure le code CSS ?


Tu dois indiquer du min et non pas du max dans ton breakpoint. Le code ci-dessous n'est peut pas bon mais indique une piste à suivre


/*code en amont pour l'initialisation de l'élément ...*/
@media screen and (min-width: 320px) {
  /*code en amont ...*/
  .container {
    /*code en amont ...*/
    column-count: 1;
    padding: 0;
  }
}
@media screen and (min-width: 768px) {
  /*code en amont ...*/
  .container {
    /*code en amont ...*/
    column-count: 2;
  }
}


ObiJuanKenobi a écrit :

A la fin, je n'aurai dans mon CSS que 3 media query, un pour les smartphones, un pour les tablettes et un dernier pour les desktop?

Pas forcément. Il y a les fablettes et les très très grands écrans (si tu veux le supporter)
Modifié par niuxe (22 Aug 2024 - 11:31)
Je crois que j'ai compris ! Jusqu'à présent, quand je commençais un projet, je définissais les premières propriétés destinées aux écrans larges et je définissais ensuite les déclarations pour les autres médias (tablettes et smartphones). Mais le "mobile first" consiste à d'abord définir les déclarations à destination des smartphones, sans utilisation d'un media query pour smartphone, puis de définir celles pour les tablettes et desktop en utilisant pour chacun un media query. Concrètement, cela se matérialise par le code CSS suivant :
/* Déclarations globales appliquées à tous les médias */
...
...
...

/* Déclarations propres aux smartphones sans utilisation de media query */
...
...
...


/* Déclarations propres aux tablettes */
@media screen and (min-width: 768px) {
    ...
    ...
  }


/* Déclarations propres aux desktop */
@media screen and (min-width: 1024px) {
    ...
    ...
}

J'ai bien assimilé le principe du "mobile first" ?
Modifié par ObiJuanKenobi (22 Aug 2024 - 11:49)
Modérateur
Oui c'est ça. La difficulté étant qu'une règle ne s'applique qu'à un endroit. Je pense que tu auras un peu plus de breakpoint (480 & 600) puisque je t'ai parlé des fablettes.
Modifié par niuxe (22 Aug 2024 - 12:15)