28168 sujets

CSS et mise en forme, CSS3

Bonjour à vous tous,

Je suis de retour après avoir beaucoup avancé sur mon projet et après un mois de vacances bien mérité. Aujourd'hui, mon problème se trouve dans les CSS. Je ne sais pas comment enlever du texte quand on est en mode d'affichage smartphone et tablette.

Voici le résultat final :
upload/1722252682-62242-capturedancran2024-07-2913260.png

On constate que dans les mentions légales, j'ai placé un caractère "barre verticale |" entre les différentes mentions. Je voudrais qu'elles disparaissent quand on est en mode d'affichage smartphone ou tablette. Mon résultat actuel me donne ça :
upload/1722252769-62242-capturedancran2024-07-2913270.png
C'est disgracieux et je voudrais donc savoir comment enlever les barres verticales avec les CSS, je n'ai encore jamais fait ça.

Ensuite, j'ai une question de syntaxe. Peut-on simplifier le code suivant ?
@media (min-width: 540px) and (max-width: 900px) {
            footer,
            .mentions {
                flex-direction: column;
                gap: 1rem;
            }
        }

        @media (max-width: 480px) {
            footer,
            .mentions {
                flex-direction: column;
                gap: 1rem;
            }
        }

Les deux media query définissent la même règle (flex-direction: column; et gap: 1rem;), peut-on les fusionner en une seule query ? J'ai essayé ça mais cela ne fonctionne pas :
@media (min-width: 540px) and (max-width: 900px) and (min-width: 480px) {
            footer,
            .mentions {
                flex-direction: column;
                gap: 1rem;
            }
        }

Et enfin, j'ai une question concernant Javascript. Initialement, j'avais placé le code JS, qui affiche automatiquement l'année courante dans le copyright, dans la partie <head> ... </head> et cela ne fonctionnait pas. Je l'ai ensuite placé tout en bas de la structure HTML (juste avant </body>) et cela fonctionne. Pourquoi ?

Je sais qu'en principe, le code JS, tout comme le code CSS, doivent être placés dans des fichiers à part et ensuite appelés dans la structure HTML au moyen de <link>, dans le <head>, pour la feuille de styles CSS, et <script>, dans la <body>, pour les scripts JS. Mais pour les besoins du topic, j'ai tout placé dans la structure HTML pour simplifier la lecture.

Voici, le code complet (HTML, CSS et JS) de mon footer :
<!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">
    <title>Copyright automatique</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        
        footer{
            background-color: #5f479f;
            padding: 1rem;
        }

        footer,
        .mentions{
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        .mentions{
            gap: 1rem;
        }

        .mentions,
        a{
            color: #f7ebff;
        }

        @media (min-width: 540px) and (max-width: 900px) {
            footer,
            .mentions {
                flex-direction: column;
                gap: 1rem;
            }
        }

        @media (max-width: 480px) {
            footer,
            .mentions {
                flex-direction: column;
                gap: 1rem;
            }
        }

    </style>
</head>

<body>
    <footer>
        <div>
            <a href="#" target="_blank"> <img src="facebook.png" alt="Pictogramme du réseau social Facebook"></a>
            <a href="#" target="_blank"> <img src="instagram.png" alt="Pictogramme du réseau social Instagram"></a>
            <a href="#" target="_blank"> <img src="pinterest.png" alt="Pictogramme du réseau social Pinterest"></a>
            <a href="#" target="_blank"> <img src="youtube.png" alt="Pictogramme du réseau social Youtube"></a>
        </div>
        <div class="mentions">
            <p>
                &copy; 2022/<span id="annee_courante"></span>
            </p>
            <span>|</span><a href="#" target="_blank">Mentions légales</a>
            <span>|</span><a href="#" target="_blank">Contact</a>
            <span>|</span><a href="#" target="_blank">Plan du site</a>
        </div>
        <form>
            <input type="email" name="email" placeholder="Newsletter">
            <input type="button" value="S'abonner">
        </form>
    </footer>
    <script>
        const year = document.querySelector('#annee_courante');
        year.innerHTML = new Date().getFullYear();
    </script>
</body>

</html>

Merci pour votre aide
et que le code soit avec vous !
Modifié par ObiJuanKenobi (29 Jul 2024 - 13:53)
salut
avec le media vertical:
@media screen (orientation: portrait)

et une classe visibility visible/hidden
sur les '|' çà devrait faire l'affaire.
Modérateur
Salut,

a écrit :
C'est disgracieux et je voudrais donc savoir comment enlever les barres verticales avec les CSS, je n'ai encore jamais fait ça.


        @media (max-width: 900px) {
            /*code css précédent */
            .mentions span{
                display: none;
            }
        }

En outre, je t'invite à regarder les pseudo class :before et :after. Elles sont bien utiles dans ce genre de contexte.


a écrit :

Ensuite, j'ai une question de syntaxe. Peut-on simplifier le code suivant ?

Quelle est la signification exacte de l'acronyme CSS ?

@media (max-width: 900px) {
    footer,
    .mentions {
        flex-direction: column;
        gap: 1rem;
    }
}

@media (max-width: 480px) {
    footer,
    .mentions {
        gap: .5rem; /* c'est un exemple */
    }
}

Le mieux étant de faire du mobile first. Je te laisse chercher sur google : css mobile first
a écrit :

Et enfin, j'ai une question concernant Javascript. Initialement, j'avais placé le code JS, qui affiche automatiquement l'année courante dans le copyright, dans la partie <head> ... </head> et cela ne fonctionnait pas. Je l'ai ensuite placé tout en bas de la structure HTML (juste avant </body>) et cela fonctionne. Pourquoi ?
....

<script>
        const year = document.querySelector('#annee_courante');
        year.innerHTML = new Date().getFullYear();
    </script>



Parce qu'au moment de faire appel au nœud "#annee_courante", il n'est pas chargé dans la page
Le JS est un langage événementiel entre autres. Tu dois attendre de charger la fenêtre ou encore mieux, le document afin de récupérer le nœud. De toutes manières, dans les bonnes pratiques en général sauf exception (l'attribut defer), le JS est chargé en bas de page afin que le script ne soit pas bloquant.

Dans les meilleures bonnes pratiques, ton script est mauvais. Si l'utilisateur n'utilise pas le JS, ça ne s'affiche pas. Tout dépend de la cible de tes lecteurs.

ps : à l'avenir, essaie de créer plutôt des sujets spécifiques au lieu d'un sujet avec de multiples questions. Smiley cligne
Modifié par niuxe (29 Jul 2024 - 15:42)
Modérateur
drphilgood a écrit :

et une classe visibility visible/hidden
sur les '|' çà devrait faire l'affaire.


Pas sûr que ce soit une bonne solution puisque cette règle n'affiche pas, mais utilise l'espace octroyé par son contenu. Un bon vieux display none fait l'affaire Smiley cligne
Modifié par niuxe (29 Jul 2024 - 15:40)
Salut,
niuxe a écrit :
Un bon vieux display none fait l'affaire Smiley cligne

Mais du coup, on n'est plus en mobile first là. Puisque l'on surcharge le CSS de règles à destination du mobile alors qu'il faudrait faire l'inverse.

+1 pour les pseudos éléments.
Modifié par Olivier C (30 Jul 2024 - 01:10)
Modérateur
Olivier C a écrit :
Salut,

Mais du coup, on n'est plus en mobile first là. Puisque l'on surcharge le CSS de règles à destination du mobile alors qu'il faudrait faire l'inverse.

+1 pour les pseudos éléments.


Je lui ai décoincé son problème.
En outre, quand tu lis son code, on voit clairement que c'est du desktop first. Je pense que tu as dû lire que je lui conseille de regarder comment on fait du mobile first.

J'avoue que dans mes développements persos, je fais du desktop first. C'est juste une vision inversée et un peu de code css en plus au final. Erf, les mauvaises et très vieilles habitudes de développer Smiley confused
Modifié par niuxe (30 Jul 2024 - 01:48)
Merci niuxe, j'ai pu utiliser la propriété CSS display: none; et ça marche. Je connaissais cette propriété mais je n'y avais pas pensé quand je cherchais le moyen de supprimer les barres verticales. Par contre, je ne connaissais pas les pseudo classes :before et :after, elles permettent de remplacer un texte par un nouveau, c'est très utile.

Dernière chose, tu me conseilles de consulter la documentation sur le CSS mobile first et d'après ce que j'ai compris, quand on travaille sur un projet web, il faut d'abord commencer par une version mobile du site puis décliner la version desktop. Cela me semble compliqué, tous les tutoriels et sites web que j'ai trouvé parlent de commencer par la version desktop puis de décliner la version mobile.
Modérateur
ObiJuanKenobi a écrit :
Par contre, je ne connaissais pas les pseudo classes :before et :after, elles permettent de remplacer un texte par un nouveau, c'est très utile.


La fonction initiale est plutôt d'ajouter un préfixe ou un suffixe au nœud HTML. Mais admettons que tu souhaites ajouter un cadre noir opaque lors d'un hover sur un nœud. Tu peux utiliser un :before ou :after. À une époque, pour faire l'équivalent des border-radius, on utilisait ces pseudos class (ouais mais IE et son standard catastrophique…)

Il y a des choses à savoir sur ces pseudos class :

1. toujours utiliser la règle content. Sans ça, rien ne s'affichera et aucune propriété CSS sera rendu.
2. Tu peux cibler en JS ces pseudos class (pour récupérer des propriétés css), mais tu ne peux pas ajouter des propriétés CSS puisque le nœud n'existe pas en tant que tel. Cela dit, il y a des petites astuces pour palier à ce problème (feuille de style dynamique dans la page, class au nœud parent).
3. tu ne peux pas ajouter un écouteur d'événements (click, mouseover, etc.) puisque le nœud n'existe pas en tant que tel

ObiJuanKenobi a écrit :

Dernière chose, tu me conseilles de consulter la documentation sur le CSS mobile first et d'après ce que j'ai compris, quand on travaille sur un projet web, il faut d'abord commencer par une version mobile du site puis décliner la version desktop.


C'est bien ça

ObiJuanKenobi a écrit :

Cela me semble compliqué, tous les tutoriels et sites web que j'ai trouvé parlent de commencer par la version desktop puis de décliner la version mobile.

L'avantage de commencer en mobile first est que ta feuille de style sera plus légère. Tu écriras moins de code. Après tout dépend de l'audience du site. S'il y a 70% desktop, autant faire du desktop first. Mais ce n'est pas forcément dans les bonnes pratiques. Après le poids de la CSS, on s'en fout un peu (protocole HTTP 1). Là où je veux en venir, c'est ce que l'on appelle la webperf (avec la série d'acronymes) et le contenu bloquant. Avec du mobile first, il y a une amélioration sur ça.

Comment élaborer en mobile first ? C'est simple. Au lieu de faire des media max-width, tu fais du min-width et tu montes dans les résolutions. Toujours garder en tête le principe de l'héritage (la base du CSS).

edit: je viens de m'apercevoir d'une petite erreur dans ce que j'ai écrit. Je parle de nœud HTML. Or, c'est abus de langage. Ce n'est pas tout à fait juste. Pense plutôt à un élément HTML. Un nœud HTML à plusieurs formes dans le DOM. Cela peut être un commentaire, un retour à la ligne, du texte sur une seule ligne, etc. Je viens de m'apercevoir aussi que le DOM, c'est ni plus ni moins qu'un tête de nœuds Smiley lol
Modifié par niuxe (30 Jul 2024 - 15:02)
J'ai compris sur le CSS mobile first, commencer par les min-width et passer au max-width quand on veut une version desktop. Depuis le début, je pensais que le mobile first était la toute première des recommandations du W3C, c'est dire-à-dire, fournir impérativement une version responsive du site web sous peine de pénalité dans le référencement.
Modifié par ObiJuanKenobi (30 Jul 2024 - 15:08)
Modérateur
ObiJuanKenobi a écrit :
...
c'est dire-à-dire, fournir impérativement une version responsive du site web sous peine de pénalité dans le référencement.


Tu oublies une chose :
- le html, c'est le contenu (le texte)
- le css, c'est la mise en forme (la peinture)

Ne confonds pas le mauvais adaptif et le responsive :
- le responsive : le document est chargé et on affiche/masque les données suivant la résolution d'écran. Mais les données sont consultables dans l'absolue. Elles sont masquées à l'écran ou affichées différemment.
- le mauvais adaptatif : Suivant la résolution d'écran, le document est chargé. Si en version mobile le document chargé est différent de la version desktop. Il y aura forcément des problèmes de SEO.
- le bon adaptatif : On va plutôt charger une css spécifique au device ciblé. Mais le document doit être équivalent.
Modifié par niuxe (30 Jul 2024 - 15:37)
ObiJuanKenobi a écrit :

Dernière chose, tu me conseilles de consulter la documentation sur le CSS mobile first et d'après ce que j'ai compris, quand on travaille sur un projet web, il faut d'abord commencer par une version mobile du site puis décliner la version desktop. Cela me semble compliqué, tous les tutoriels et sites web que j'ai trouvé parlent de commencer par la version desktop puis de décliner la version mobile.


Selon des statistiques dont j'ai perdu la source, un site web est visité à 60 ou 70% par des smartphones, et donc seulement 30% par des PC. Donc l'idée de commencer par la version smartphone est raisonnable.

Dommage que je fasse le contraire, mais je me soigne Smiley smile
touriste a écrit :

Selon des statistiques dont j'ai perdu la source, un site web est visité à 60 ou 70% par des smartphones, et donc seulement 30% par des PC. Donc l'idée de commencer par la version smartphone est raisonnable. Smiley smile

Comment le moteur de recherche détermine qu'on a commencé par la version smartphone ? Parce que s'il cherche le média query :
@media (max-width: 480px) {
            ...
        }
je peux l'écrire dès le début est poursuivre en faisant la version desktop, il n'y verra que du feu !

P.S., j'ai trouvé cette source pour plusieurs chiffres : https://www.alioze.com/chiffres-web
Modifié par ObiJuanKenobi (02 Aug 2024 - 14:39)
Modérateur
ObiJuanKenobi a écrit :

Comment le moteur de recherche détermine qu'on a commencé par la version smartphone ?

Le user-agent. D'ailleurs, c'est avec celui-ci que tu vas déterminer la version à afficher (mobile/tablette/desktop) lorsque tu fais de l'adaptatif. N'oublions pas que tu peux savoir la résolution d'écran en faisant window.screen ou un window.innerWidth et window.innerHeight en JS

ObiJuanKenobi a écrit :

P.S., j'ai trouvé cette source pour plusieurs chiffres : https://www.alioze.com/chiffres-web


Toujours prendre avec des pincettes ce genre de chiffres puisque ce ne sera pas toujours réaliste avec les chiffres de ton site. Regarde du côté de global stats Smiley cligne Tu as par exemple, les résolutions utilisées en France ou dans le monde ou dans etc. .
Modifié par niuxe (03 Aug 2024 - 15:22)