IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mise en page CSS Discussion :

Détecter les classes utilisées dans HTML, qui ne sont pas décrites dans le fichier CSS


Sujet :

CSS

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    December 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : December 2004
    Messages : 35
    Points : 27
    Points
    27
    Par défaut Détecter les classes utilisées dans HTML, qui ne sont pas décrites dans le fichier CSS
    Bonjour à tous,
    Tout est dans le titre.
    Bon, je suis d'accord, c'est une question venant d'un type qui code parfois comme un goret.
    soit je ne supprime pas les classes que j'ai utilisées dans le code HTML alors que je les ai supprimées du fichier CSS, soit je nettoie mal du code que j'ai récupéré sur une page en ligne (pour mon usage perso exclusivement).
    Est-ce qu'il existe un outil qui contrôle la cohérence CSS/HTML ? puisqu'il semble que l'incohérence ne génère pas d'erreur.
    Merci,
    Eric

  2. #2
    Membre actif Avatar de ASCIIDEFOND
    Homme Profil pro
    Autodidacte passionné
    Inscrit en
    November 2002
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Autodidacte passionné

    Informations forums :
    Inscription : November 2002
    Messages : 143
    Points : 243
    Points
    243
    Par défaut
    Salut foxbille,

    Si j'ai bien compris, tu souhaites rechercher les balises qui comportent les attributs class et style et qui ne sont pas référencés par leur nom de class dans le fichier CSS.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <!DOCTYPE html>
    <html lang="en">
     
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=<device-width>, initial-scale=1.0">
        <style>
            .div-1 {
                width: 500px;
                height: 50px;
                background-color: aqua;
            }
     
            .p2 {
                width: 150px;
                line-height: 25px;
            }
        </style>
    </head>
     
    <body>
        <div>
            <div class="div-1 div-1-1" style="color: red;"></div>
     
            <div class="div-2 div-2-2" style="width: 100px; height: 20px; background-color: black; color: white;">
                <p class="p-2" style="font-weight: bold;">Salut</p>
            </div>
        </div>
     
        <textarea class="textareaClass" id="mytextarea" cols="120" rows="20"
            style="background-color: antiquewhite; font-size: 1.2em;"></textarea>
     
        <script>
            function findElements() {
     
                let bodY = document.getElementsByTagName('body')[0],
                    textareA = document.getElementById('mytextarea'),
                    infos
     
                textareA.value = null
                textareA.readOnly = true;
     
                for (let balise of bodY.querySelectorAll('*')) {
                    if (balise.classList.length && balise.style.cssText.length) {
                        infos = `Balise: ${balise.tagName}\nclass: ${balise.classList}\nStyle: ${balise.style.cssText}\n\n`
                        textareA.value += infos
                    }
                }
            }
     
            findElements()
        </script>
     
    </body>
     
    </html>

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    December 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : December 2004
    Messages : 35
    Points : 27
    Points
    27
    Par défaut
    Bonjour,
    Merci pour ta réponse.
    C'est quelque chose comme ça, mais il faudrait explorer un fichier HTML et rechercher dans un fichier CSS toutes (et seulement) les classes qui n'y sont pas décrites. Et afficher un message d'erreur. Et, soyons gourmants, prévoir une option pour supprimer la classe du HTML
    Je vais essayer de modifier ton script dans ce sens.
    Dèja, Merci !
    Eric

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    December 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : December 2004
    Messages : 35
    Points : 27
    Points
    27
    Par défaut
    je précise encore :
    dans le fichier HTML
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [...]
    <div class="div-1 div-1-1">
    dans le fichier CSS

    => pas de déclaration .div-1-1

    résultat : "Erreur : class div-1-1 absente de CSS !"

  5. #5
    Membre actif Avatar de ASCIIDEFOND
    Homme Profil pro
    Autodidacte passionné
    Inscrit en
    November 2002
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Autodidacte passionné

    Informations forums :
    Inscription : November 2002
    Messages : 143
    Points : 243
    Points
    243
    Par défaut
    Il faut ajouter la fonction au code que tu veux vérifier. (Le bout de code html que j'avais mis était seulement pour l'exemple)

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <body>
    ... 
    Ici ton code
    ...
     
        // Ce script est à placer en bas de la balise body.
        // Une fois ton code chargé, la fonction parcourra tous les éléments et affichera dans la console ceux qui auront un nom de class et un attribut style.
     
        <script>
            function findElements() {
     
                let bodY = document.getElementsByTagName('body')[0], infos = ''
     
                for (let balise of bodY.querySelectorAll('*')) {
                    if (balise.classList.length && balise.style.cssText.length) {
                        infos += `Balise: ${balise.tagName}\nclass: ${balise.classList}\nStyle: ${balise.style.cssText}\n\n`
                    }
                }
                console.log(infos)
            }
     
            findElements()
        </script>
    </body>

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    January 2011
    Messages
    16 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : January 2011
    Messages : 16 795
    Points : 43 480
    Points
    43 480
    Par défaut
    Bonjour,
    Citation Envoyé par foxbille
    Est-ce qu'il existe un outil qui contrôle la cohérence CSS/HTML ?
    oui il s'agit des navigateurs

    Dans le cas de règles CSS non utilisées il existe pas mal d'outils, plus ou moins sophistiqués voire même dans les outils des navigateurs en tout cas Chrome. Le gain peut être énorme.

    Dans l'autre sens, le gain sera de toute façon minime sauf à coder comme un « gros sagouin », je n'en connais pas de disponible.


    il faudrait explorer un fichier HTML et rechercher dans un fichier CSS toutes (et seulement) les classes qui n'y sont pas décrites.
    Pour faire la corrélation entre les classes appliquées, ou non, aux éléments et les règles CSS présentes il te faut quoiqu'il arrive récupérer ces règles.

    Donc dans le principe :

    • On parcourt les document.styleSheets présentes dans le document, pour chaque règles de celles-ci, on regarde si il existe au moins un élément accessible via le sélecteur de la règle (cssRule.selectorText), on utilise pour ce faire la méthode querySelector(cssRule.selectorText).
       
    • Si l'on trouve un élément alors on stocke le sélecteur dans un array.
       
    • Ensuite on récupère tous les éléments ayant une classe CSS déclarée en utilisant la méthode document.querySelectorAll("[class]"), il ne nous reste plus qu'à tester que pour chaque élément la ou les classes qu'il possède sont dans le tableau de récupération des sélecteurs.

    Voilà pour le principe de base.

    Exemple en ligne :
    ... si cela peut t'inspirer !

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    December 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : December 2004
    Messages : 35
    Points : 27
    Points
    27
    Par défaut
    Waouh, Merci beucoup, je vais regarder ça !
    Eric

Discussions similaires

  1. [Débutant] Simuler les classes utilisées dans une méthode
    Par Danthen dans le forum C#
    Réponses: 4
    Dernier message: 22/01/2013, 09h11
  2. Réponses: 2
    Dernier message: 07/12/2007, 16h20
  3. Réponses: 19
    Dernier message: 03/10/2007, 10h14
  4. Connaître les classes définies dans un fichier
    Par Tournevyks dans le forum Langage
    Réponses: 2
    Dernier message: 16/10/2006, 17h21
  5. Réponses: 4
    Dernier message: 07/07/2006, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo