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

Contribuez Discussion :

CSS équivalent à un selecteur "OU"


Sujet :

Contribuez

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut CSS équivalent à un selecteur "OU"
    Comme vous le savez, en CSS, le seul "ou" qui existe est la virgule et ne s'utilise qu'en début d'une chaîne de sélecteurs.

    Par exemple on pourrait avoir les déclarations CSS suivantes :

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    .Animal .Mamifere .Felin .Chat .Nez
    , .Animal .Mamifere .Felin .Tigre .Nez
    , .Animal .Mamifere .Felin .Lion .Nez {
        background-image: url('museau-felin-01.jpg')
    }
     
    .Animal .Mamifere .Felin .Lynx .Nez {
        background-image: url('museau-felin-02.jpg')
    }
     
    .Animal .Mamifere .Canin .Chien .Nez
    , .Animal .Mamifere .Canin .Loup .Nez {
        background-image: url('museau-canin.jpg')
    }

    C'est un peu lourd et on peut donc regretter de ne pas pouvoir utiliser un "ou" au sein de la chaîne de sélecteurs

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .Animal .Mamifere .Felin (.Chat ou .Tigre ou .Lion) .Nez {
        background-image: url('museau-felin-01.jpg')
    }
     
    .Animal .Mamifere .Canin (.Chien ou .Loup) .Nez {
        background-image: url('museau-canin.jpg')
    }

    Mais il est possible d'arriver au résultat d'un ou grâce au selecteur ":not". En effet en combinant le "et" naturel du CSS et le ":not" on peut obtenir l'équivalent logique d'un "ou".


    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .Animal .Mamifere .Felin :not(:not(.Chat):not(.Tigre):not(.Lion)) .Nez {
        background-image: url('museau-felin-01.jpg')
    }
     
    .Animal .Mamifere .Canin :not(:not(.Chien):not(.Loup)) .Nez {
        background-image: url('museau-canin.jpg')
    }

    Most Valued Pas mvp

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Méa Culpa, autant ce type de chaîne de sélecteurs fonctionnent en jQuery, autant CSS n'accepte pas :not dans :not
    Most Valued Pas mvp

  3. #3
    Membre expert
    Avatar de Muchos
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    1 700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 700
    Points : 3 849
    Points
    3 849
    Billets dans le blog
    6
    Par défaut
    N'est-ce pas justement l'intérêt des classes, de compenser ces limites ? Ex:

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    .Felin .Nez {
      background-image: url('museau-felin-01.jpg');
    }
    .Lynx .Nez {
      background-image: url('museau-felin-02.jpg')
    }
    .Canin .Nez {
      background-image: url('museau-canin.jpg')
    }

    En outre, l'opérateur OU peut se placer n'importe où dans la chaîne, pas forcément en début de ligne.

  4. #4
    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
    Oui on peut soit rajouter une classe commune, soit leur ajouter un préfixe/suffixe commun

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [class~="felin"]{ }
    [class^="felin-"]{ }
    One Web to rule them all

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Je ne parle pas de chaîne de caractère mais de chaîne de sélecteurs.

    Et non, on ne peut pas y mettre une virgule ou bon nous semblerait.

    Sinon ceci fonctionnerait
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .Cartoon.Animal .Mamifere .Felin .Chat,.Tigre,.Lion .Nez {
        background-image: url('/cartoon/museau-felin-01.jpg')
    }

    Syntaxiquement valable, "sémantiquement" erroné.

    Par ailleurs, si on contourne le problème avec des classes plus explicites, on s'éloigne de la simplicité.

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    .CartoonChat .nez
    , .CartoonTigre.Nez
    , .CartoonLion .Nez {
        background-image: url('/cartoon/museau-felin-01.jpg')
    }
     
    .3DChat .nez
    , .3DTigre.Nez
    , .3DLion .Nez {
        background-image: url('/cartoon/museau-felin-01.jpg')
    }

    => tout le HTML doit changer pour chaque variante.

    Alors qu'à la base on souhaiterait :
    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
     
    <div class="Cartoon Animal"> <!-- Changer "Cartoon" en "3D" pour illustrations en 3D, ou par <blanc> pour illustration photo -->
        <div class="Mamifere">
            <div class="Felin">
                <div class="Chat">
                    <div class="Nez">Le museau du chat est...</div>
                    <div class="Pattes">Les pattes du chat ont la particularité...</div>
                    <div class="Queue">Ne tirer qu'en cas d'urgence.</div>
                </div>
     
                <div class="Tigre">
                    <div class="Nez">Le museau du tigre est...</div>
                    <div class="Pattes">Les pattes du tigre sont...</div>
                    <div class="Queue">Comestible si vous êtes les plus rapide...</div>
                </div>
            </div>
        </div>
    </div>
    Most Valued Pas mvp

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