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

JavaScript Discussion :

Rendre cliquable un élément :before


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 176
    Points : 90
    Points
    90
    Par défaut Rendre cliquable un élément :before
    Bonjour,

    Je suis en train d'essayer de reproduire une maquette photoshop et je souhaiterais rendre cliquable une icône (ou du texte) placé dans une classe:before est-ce possible ?

    exemple:
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     .music:before {
            content: '+'; 
            font-size: 24px;
            margin-top: -10px;
            padding-left: 15px;
            padding-right: 5px;
            border-left: 1px solid #333;
            padding-top: 5px;
            padding-bottom: 5px;
            float: right;
        }

    Je souhaite donc qu'en cliquant sur le + mon sous-menu s'affiche mais je ne sais pas comment faire pour solliciter mon +.
    Je sais afficher mon menu mais pas solliciter le +.
    Je vous remercie de votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    css ne possède pas d'evènement click

    il faut passer par du javascript avec previousSibling(), ou plus simplement avec JQuery et .prev()
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    les pseudos éléments :before/:after n'appartiennent pas au DOM et sont purement décoratifs.

    Il te faut donc créer ton propre élément cliquable ou éventuellement mettre l'écouteur sur le conteneur et tester la position du clic.

  4. #4
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 176
    Points : 90
    Points
    90
    Par défaut Rendre cliquable un élément :before
    Ça veut dire que je ne pourrait pas changer la valeur de mon :before au clic ?

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    si mais pas avec le :before directement
    il faut rajouter un class

    http://fiddle.jshell.net/wmhe49xs/1/
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre expérimenté
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 714
    Points : 1 598
    Points
    1 598
    Par défaut
    jour

    plutôt comme ça

    http://fiddle.jshell.net/wmhe49xs/2/
    Plus vite encore plus vite toujours plus vite.

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    ...en cliquant sur le + mon sous-menu s'affiche...
    Lorsque l'on veut effectuer une action sur un pseudo élément on ne peut "l'atteindre" que via son parent, dans ton cas c'est le parent, surement une LI, qui recevra l'événement et non le pseudo élément.

    Dans ton cas vouloir atteindre uniquement le [+] ne peut se faire qu’en passant par un élément mis en début de conteneur, qui lui peut avoir un :before.

  8. #8
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 176
    Points : 90
    Points
    90
    Par défaut Rendre cliquable un élément :before
    Finalement, j'ai ajouté un bouton avec un :before. Alors je fais pour afficher mon sous-menu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function sous_menu() {
        var elem = document.getElementById('sous_menu');
         elem.style.display = 'block';
    }
    mais comment je fais pour qu'il se referme si elem.style.display = 'block';

    J'ai essayé comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            if elem.style.display = 'none'; 
            {
                elem.style.display = 'block';
            }
            else 
            {
                elem.style.display = 'none';
            }
    Mais je suis apparemment loin de la vérité.

  9. #9
    Membre expérimenté
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 714
    Points : 1 598
    Points
    1 598
    Par défaut
    tu est proche sauf que dans le if il faut doubler le signe egal et aussi au premier passage si le css est declarer dans un fichier css tu aura comme style une chaine vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      if (elem.style.display == 'none' ||  elem.style.display == ''); 
            {
                elem.style.display = 'block';
            }
            else 
            {
                elem.style.display = 'none';
            }
    Plus vite encore plus vite toujours plus vite.

  10. #10
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Pas la peine de se compliquer autant la vie : elem.hidden = !elem.hidden
    One Web to rule them all

  11. #11
    Membre expérimenté
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 714
    Points : 1 598
    Points
    1 598
    Par défaut
    Pas la peine de se compliquer autant la vie : elem.hidden = !elem.hidden
    quèsaco ?
    Plus vite encore plus vite toujours plus vite.

  12. #12
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    https://developer.mozilla.org/en-US/...ributes/hidden

    C'est équivalent au code précédent sans forcer de style en inline ou de propriété display block.
    One Web to rule them all

  13. #13
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 176
    Points : 90
    Points
    90
    Par défaut Rendre cliquable un élément :before
    J'ai bien essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function sous_menu() {
        var elem = document.getElementById('sous_menu');
     
        if (elem.style.display == 'none' ||  elem.style.display == ''); 
                {
                    elem.style.display = 'block';
                }
        else 
                {
                    elem.style.display = 'none';
                }
    }
    mais le débogueur me renvoi l'erreur suivante:

    Nom : debogueur.jpg
Affichages : 306
Taille : 36,7 Ko

  14. #14
    Membre expérimenté
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 714
    Points : 1 598
    Points
    1 598
    Par défaut
    sur la ligne ou se trouve le if il y a le point vigule a la fin qui je pense est la cause du probleme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (elem.style.display == 'none' ||  elem.style.display == '')

    C'est équivalent au code précédent sans forcer de style en inline ou de propriété display block.
    je vient de tester pour comprendre la chose et c'est efficace mais sur le coup c'est déroutant cette histoire de booléen j'avoue préféré le coté lisibilité mais sinon pour la flambe c'est pas mal
    Plus vite encore plus vite toujours plus vite.

  15. #15
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 176
    Points : 90
    Points
    90
    Par défaut Rendre cliquable un élément :before
    J'aurais quand même dû voir pour le ; et la comparaison == même si je débute. Je vous remercie d'avoir pris du temps pour répondre.
    J'ai donc fait :

    Code : 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
    function sous_menu() {
        var sous_menu = document.getElementById('sous_menu');
        var btn_plus = document.getElementById('btn_plus')
        var btn_moins = document.getElementById('btn_moins')
     
        if (sous_menu.style.display == 'none' ||  sous_menu.style.display == '') {
                    sous_menu.style.display = 'block';
                    sous_menu.style.position = 'inherit';
                    btn_plus.style.display = 'none';
                    btn_moins.style.display = 'block';
                }
        else {
                    sous_menu.style.display = 'none';
                    btn_plus.style.display = 'block';
                    btn_moins.style.display = 'none';
                }
            }
    Et ça fonctionne très bien. Encore merci.

  16. #16
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut elem.hidden = !elem.hidden
    Citation Envoyé par SylvainPV Voir le message
    Pas la peine de se compliquer autant la vie : elem.hidden = !elem.hidden
    Malheureusement c'est imparfait et non pris en compte par IE < 11.

    J'utilise souvent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oElem.style.display = oElem.offsetHeight ? 'none' : '';
    Cas 0 si aucune déclaration CSS n'a été effectué aucun soucis.

    Cas 1, déclaration de display:none dans le CSS.
    - elem.hidden = !elem.hidden ne fonctionne pas
    - oElem.offsetHeight ? 'none' : '' ne fonctionne pas

    Cas 2, déclaration de display:none dans le styleinline
    - elem.hidden = !elem.hidden ne fonctionne pas
    - oElem.offsetHeight ? 'none' : '' fonctionne

    Cas 3, il existe un cas 3 mais cette fois ci en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oElem.style.display = oElem.offsetHeight ? 'none' : 'inherit';
    avec cette façon de faire cela fonctionne dans les cas 1 et 2.

    Il faut toutefois faire attention de ne pas avoir déclaré un rendu différent de celui par défaut, dans ce cas display = '' est meilleur.

  17. #17
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    [hidden]{ display: none; }
    pour IE9 et autres ancêtres.
    One Web to rule them all

  18. #18
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    [hidden]{ display: none; }
    cette "emplâtre" marche pour masquer au chargement mais pas pour échanger dynamiquement le rendu avec elem.hidden = !elem.hidden.

  19. #19
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Oh tu chipotes :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Object.defineProperty(HTMLElement.prototype, "hidden", {    
        get: function(){ return this.hasAttribute('hidden') },    
        set: function(bool){
         if(bool){ this.setAttribute('hidden', '') }
         else {    this.removeAttribute('hidden')  }
        }      
    })
    http://jsfiddle.net/Lvk2m716/

    Et pour les navigateurs de l'avant-guerre qui n'ont même pas les getter/setter ES5, c'est retour à jQuery...
    One Web to rule them all

  20. #20
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Oh tu chipotes :p
    je chipote encore un peu, on s'éloigne quand même un peu d'un code simple

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Rendre cliquable une cellule de tableau
    Par koKoTis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 21/12/2007, 14h06
  2. Rendre visible un élément
    Par TheBananier dans le forum ActionScript 3
    Réponses: 6
    Dernier message: 15/10/2007, 10h28
  3. Rendre cliquable une image
    Par bodysplash007 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 03/05/2007, 16h17
  4. Comment rendre visible un élément
    Par sagitarium dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/04/2006, 15h36
  5. script pour rendre visible un élément
    Par sagitarium dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/04/2006, 13h40

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