Bonjour,

Je vous expose mon problème : je commence avec le responsive design et j'essais de transformer un tabs de bootstrap (une liste de 5 éléments dans mon cas) en un seul bouton avec des flèches à droite et à gauche pour changer l'affichage du contenu. Pour ce faire j'effectue un 'display:none' sur les éléments de la liste sauf pour celui qui est actif. Il me reste donc d'affiché qu'un seul élément de la liste, ainsi que les deux flèches adjacentes.

Cependant, et c'est là mon problème, ces 3 éléments (deux flèches et ma liste 'unique') ne prennent pas 100% de la largeur de la <div> parent.
Je ne peux pas utiliser de dimension en pixel puisque mon site se veut responsive.

Dans un premier temps, pour aligner les 3 éléments, j'ai utilisé 'display:inline-block'.

Voici ma portion de code HTML :

'<div class="tabbable tabs-left">'.
    // l'icône gauche
    '<div class="icon-nav icon-left">'.$this->Bs->icon('chevron-left').'</div>'.
    // la liste en question
    '<ul class="nav nav-tabs">';
        foreach (...){
            <li>...</li>
        }
    '</ul>'.
    // l'icône droite
    '<div class="icon-nav icon-right">'.$this->Bs->icon('chevron-right').'</div>'.
    // Le contenu de chaque tab..
    '<div class="tab-content">'.
        '<div class="tab-pane">...</div>'.
    '</div>'.
'</div>';

Et voici le bout de CSS (sass) correspondant :

@media (max-width: 615px) {
.partenaires .tabs-left ul.nav-tabs {
    border-bottom: none; }
.partenaires .tabs-left .nav-tabs > li {
    float: none;
    display: none;
    text-align: center; }
.partenaires .tabs-left .nav-tabs > li.active {
    display: inline-block;
    width: auto; }
.partenaires .tabs-left .nav-tabs > li.active a, .partenaires .tabs-left .nav-tabs > li.active a:hover, .partenaires .tabs-left .nav-tabs > li.active a:focus {
    background-color: #87b819;
    color: white;
    border: none;
    border-radius: 0px; }
.partenaires .tabs-left ul.nav-tabs {
    width: auto;
    display: inline-block;
    border: none;
    margin-bottom: 0px; }
.partenaires .tabs-left .icon-nav {
    display: inline-block; }
.partenaires .tabs-left .icon-left {
    margin: 10px 20px 10px 20px; }
.partenaires .tabs-left .icon-right {
    margin: 10px 20px 10px 20px; } 
}

Merci d'avance pour votre aide,

Maxime M.

5 réponses


Maxime M
Auteur
Réponse acceptée

A force de chercher, j'ai trouvé ! C'était pas grand chose : j'avais essayé de mettre mon <ul> en width:80% ainsi que celle de mes images à 10% mais ça ne marchait pas. Il suffisait de rajouter width:100% pour le <li> actif.

Cependant, j'ai lu sur la toile que l'utilisation de width:100% était à proscrire : est-ce vrai dans le cas d'un sous élément comme un <li> dans un <ul> ?

Quelles sont mes options si son utilisation est mauvaise ?

Merci,

Maxime M.

PS: Je validerais la sujet en fin de journée, voir si quelqu'un peut m'éclairer sur ma seconde question émergente d'ici là! :)

Un codepen avec du VRAI CSS et je jetterais un coups d’œil =)

Maxime M
Auteur

CSS édité !

Maxime M
Auteur

Effectivement, si tu veux le tester directement ce n'est pas possible, j'utilise trop de fichier CSS en plus du bout de code présenté. J'utilise notamment Bootstrap de Twitter. Mon 'tabs-left' est en fait le 'nav-tabs' proposé par Bootstrap, mais modifié pour qu'il s'affiche sur la gauche.

Mon problème ne nécessite pas vraiment d'exemple de code à vrai dire, c'est plus un manque de connaissance en CSS.
En gros je veux afficher les 2 images ainsi que l'élément de ma liste active, et que le tout prennent 100% de la largeur de ma <div class="tabbable tabs-left">. Pour l'instant j'arrive à les alignés, mais il ne prennent que 60% environ (ils gardent leur taille par défaut je suppose). J'ai besoin "d'allonger" l'élément <li> pour qu'il comble le blanc.