J'essaie de créer un menu multi-niveaux avec une navigation de fil d'Ariane, sans utiliser javascript. J'ai rencontré des tas de menus et de chapelure purs de CSS, mais jamais combinés et travaillant ensemble. Voici une conception de ce que je suis en train de réaliser (cliquez sur le menu hamburger « plus »):Menu multi-niveaux css pur avec navigation fil d'Ariane fonctionnelle
Et voici ce que j'ai jusqu'à présent dans mon html/css (voir le lien codepen ci-dessous) . S'il vous plaît pardonner le code brut/hacky. À ce stade, je ne fais que tester des idées, je vais simplifier et embellir mon code une fois que j'ai trouvé une solution.
http://codepen.io/jessbenz/pen/LZWjjz
Voici un extrait de code, mais s'il vous plaît regarder le lien codepen ci-dessus pour obtenir une meilleure idée:
<div class="smart-nav">
<input type="radio" id="bread-home" class="breadcrumb" name="bread" />
<input type="radio" id="bread-women" class="breadcrumb" name="bread" />
<input type="radio" id="bread-womens-clothing" class="breadcrumb" name="bread" />
<div class="smart-nav-panels">
<ul id="home">
<li>
<input type="radio" name="first">
<label>1 Women</label>
<ul id="women">
<li>
<input type="radio" name="second">
<label>1.1 Women's Clothing</label>
<ul id="womens-clothing">
<li>
<label>1.1.1 Women's Shirts</label>
</li>
</ul>
</li>
</ul>
</li>
<li>
<input type="radio" name="first">
<label>2 Men</label>
<ul id="men">
<li>2.1 Men's Shirts</li>
</ul>
</li>
</ul>
</div>
</div>
et mon SASS:
.breadcrumb:checked ~ .smart-nav-panels ul {
display: none;
}
#bread-home:checked ~ .smart-nav-panels > ul {
display: block;
}
#bread-women:checked ~ .smart-nav-panels {
#home, #women {
display: block;
}
}
#bread-womens-clothing:checked ~ .smart-nav-panels {
#home, #women, #womens-clothing {
display: block;
}
}
#bread-home:checked ~ .smart-nav-panels li input:checked > ul:first-child {
display: block;
}
.smart-nav-panels {
margin: 0;
padding: 0;
ul {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
background: lightgrey;
}
ul, li {
list-style: none;
margin: 0;
padding: 0;
}
> ul:first-child {
ul {
left: 100%;
}
}
li {
input + label + ul {
display: none;
}
input:checked + label + ul {
display: block;
// left:0;
}
}
}
input:checked ul {
display: block;
}
Si vous cliquez les vêtements des femmes dans mon échantillon de codepen, vous verrez que je suis à mi-chemin avec la réalisation de ce dont j'ai besoin. Les boutons radio horizontaux supérieurs représentent le fil d'Ariane et les boutons radio verticaux dans le bloc gris représentent le menu du niveau. Le problème vient quand je choisis une radio de fil d'Ariane. La diapositive correcte est affichée, mais si je sélectionne à nouveau une radio dans le menu, elle ne s'affiche pas car mon fil d'Ariane css prend la préférence et masque le contenu pertinent. Je suppose que c'est le problème de ne pas utiliser javascript. Comment faire en sorte que mes deux navigations soient conscientes les unes des autres avec un css pur? Il se pourrait que cette approche de combinaison de deux navigations radio soit incorrecte. J'espère vraiment que quelqu'un pourra partager sa sagesse. :)
Merci à l'avance
Merci pour cette réponse complète et utile. Je dis utile parce que cela m'a découragé (pour l'instant) de passer beaucoup plus d'heures dans ce trou de lapin. Nous avons suspecté que cela ne pouvait pas se faire sans Javascript. Ce fut un défi amusant, et j'espère que le résultat sera utile aux autres. Merci également d'avoir amélioré mon CSS. :) –