Ciblage Eléments du menu avec sous-menus dans une barre de navigation, CSS-Tricks

La nécessité d'Conseils de navigation

La voie commune pour résoudre ce problème, est d'ajouter simplement une classe à la

  • s qui contiennent
      s (sous-menus) afin que nous puissions le style de ces éléments différemment de ceux qui ne contiennent pas Unternavigation. Assez simple, mais aussi assez fastidieux et pas particulièrement gracieux.

      Faire automatiquement!

      Une meilleure façon

      Idéalement, ce serait bien s'il y avait un sélecteur CSS qui nous permettrait de requête si un élément contient un autre type d'élément comme un enfant direct, quelque chose qui ressemble à la méthode de .a () de jQuery.

      Nous pouvons peut atteindre à peu près la même chose avec un li: premier enfant: nième dernier enfant (x) < > .

      La clé est d'avoir un nombre d'enfants prévu (élément HTML, le planning familial?). Très probablement, il sera deux éléments: l'ancre et la

        . si l'on peut modifier cette technique pour travailler pour tous les éléments numériques ou enfant, aussi longtemps que vous avez un motif régulier.

        Ciblage Eléments du menu avec sous-menus dans une barre de navigation, CSS-Tricks

        Création d'un menu déroulant Demo

        Mettons cette idée à l'épreuve!

        Le code HTML: Keep It Clean

        Certains style général d'apporter sexy:

        Puis la magie se produit:

        C'est essentiellement l'ingrédient actif de cette technique. Pour cet exemple, je l': avant élément pseudo de l'élément d'ancrage pour tirer les flèches. L'élément pseudo n'est pas nécessaire à la technique. Je aurais pu tout aussi bien changé sur l'ancre fonds lui-même à la place; vous pouvez le faire faire tout ce que vous voulez plus une fois que vous avez ciblé l'élément.

        Enfin, juste pour polir le tout, un certain positionnement et flèche code CSS style.

        Voici la chose en action à CodePen:

        Comme vous l'aurez deviné, vous pouvez également utiliser d'autres combinaisons sélecteur / sélecteur tels que: seulement l'enfant. premier enfant: dernier enfant. premier enfant: non (: dernier enfant) et autres. Mais j'ai trouvé que: nième enfant (x): nième dernier enfant (x) donne la plus grande flexibilité et sert comme solution de repli intégré (car il nous permet de cibler l'élément directement, plutôt que par l'exclusion), et il y a peu d'avantage de soutien du navigateur cross en utilisant les acquis d'autres combinaisons sélecteur / sélecteur.

        C'est tout. Simple, élégant et entièrement automatique; la façon dont il devrait être. Soutien à ce qui est presque universelle, sauf pour IE, qui mange la colle et offre seulement un soutien dans IE9 +. Au moment de l'écriture, le soutien global estimé pour ces sélecteurs, utilisé, était à peu près 87%, ce qui est pas trop mal.

        Partager:

        Autant que j'aime le premier enfant - nième enfant, je trouve souvent que je Refactor (si je peux) avec des classes réelles pour aider à la lisibilité. Rendre le code plus facile à comprendre pour les autres personnes travaillant sur le projet, je crois beaucoup plus bénéfique.

        Je n'utilise que les classes pseudo quand je suis prototypage rapide d'une mise en page, ou de travailler dans un environnement où je ne peux pas accéder facilement au HTML.

        Pourriez-vous prendre un screencast de la façon dont il « ne fonctionne pas »? J'ai entendu une autre personne se plaindre à ce sujet aussi bien mais n'a pas été en mesure de le reproduire. Je lance également la dernière Chrome.

        C'est un truc. Il est une façon intelligente de sélectionner un élément lorsqu'il est pas seul. Je suis désolé, il ne vit pas à vos normes d'élégance. Dans mon expérience, des idées comme la compréhension de ce qui est utile au jour le jour CSS-foo.

        Je vais laisser Ryan élaborer sur les questions Chrome, il a été confronté.

        Woops! Je me trompais sur le dernier bit Chrome, tourne mon updater Chrome est en fait défaut :(
        J'ai réinstallé Chrome et cela fonctionne très bien.

        Une autre option est de style de la

          pour indiquer il y a un présent menu déroulant dans cet élément.

          Par défaut, vous cachez la liste déroulante

        • s mais pas le
            lui-même. Quand il (ou son parent) n'est pas plané, la
              a le style qui indique un élément déroulant, quand il planait étant, le menu déroulant affiche normalement.

              Ceci est une façon très intéressante d'accomplir dropdowns (que nous connaissons des problèmes de convivialité), mais encore est quelque chose que nous ne pouvons pas vivre vraiment complètement sans, comme notre copain IE><.

              Notez que pour moi dans Firefox 24.0 les listes déroulantes échouent 3 sur 5 essaie de planer sur eux. Il doit être une question de positionnement petite, mais encore, ils ne parviennent pas à ce moment je tape cela.

              J'aime vraiment comment les flèches passent haut / bas, très descriptif et visuellement utile.

              Articles Liés