49 votes

Twitter Bootstrap : Pilules centrales

Ma question est de savoir comment vous pouvez centrer les pilules ?

J'ai essayé d'ajouter un bloc central autour et de modifier l'adresse de l'utilisateur. float:left a float:center mais rien n'y fait.

0 votes

Il n'y a pas de "float:center", oh si c'était le cas. Tant de développeurs auraient tellement de temps à perdre dans leur vie. Il existe quelques techniques pour centrer les onglets si vous cherchez sur Google, mais dans le cas de twitter-bs, cela peut nécessiter un peu de personnalisation.

83voto

prrstn Points 361

C'est devenu beaucoup plus simple ! Il vous suffit d'utiliser le text-center sur le conteneur, et appliquer la classe display:inline-block à la ul . Veillez simplement à ce qu'un saut de ligne ou une balise de paragraphe sépare le nav des autres éléments du conteneur.

C'est fait ! 2 ajouts de classes, 1 ligne de CSS (ne modifiez pas le fichier css de bootstrap !).

HTML :

<div class="col-md-12 text-center">
    <p>Copyright stuff</p>
    <ul class="nav nav-pills center-pills">
        <li><a href="#">Footer nav link</a></li>
        <li><a href="#">Footer nav link</a></li>
    </ul>
</div>

CSS :

.center-pills { display: inline-block; }

Edit 2015 : Comme Artur Beljajev l'a signalé, le support de Flexbox est maintenant assez commun que vous pourriez vouloir l'utiliser à la place :

.center-pills {
    display: flex;
    justify-content: center;
}

0 votes

Cela a mieux fonctionné pour moi que la solution Broox. Avec la solution broox, j'avais un placement bizarre des pilules (une était toujours en dessous). Merci pour le partage :)

0 votes

Une idée de la raison pour laquelle l'ajout de ce style laisse un espace en dessous (comme s'il y avait du remplissage) ?

0 votes

@RachelS Quel style utilisez-vous ? Avez-vous un jsfiddle que je peux regarder ?

54voto

broox Points 988

Si vous souhaitez avoir des pilules de largeur variable dans un conteneur de largeur variable, je vous suggère d'utiliser la balise inline-block le type d'affichage et l'ajout d'une classe au conteneur de pilules.

Voici comment j'ai étendu le bootstrap pour les pilules de centrage.

CSS :

.centered-pills { text-align:center; }
.centered-pills ul.nav-pills { display:inline-block; }
.centered-pills li { display:inline; }
.centered-pills a { float:left; }
* html .centered-pills ul.nav-pills { display:inline; } /* IE6 */
*+html .centered-pills ul.nav-pills { display:inline; } /* IE7 */

HTML :

<div class="row">
  <div class="span12 centered-pills">
    <ul class="nav nav-pills">
      <li><a href="#">derek</a></li>
      <li><a href="#">brooks</a></li>
      <li><a href="#">is</a></li>
      <li><a href="#">super</a></li>
      <li class="active"><a href="#">awesome</a></li>
    </ul>
  </div>
</div>

0 votes

Ajouté ul.nav-pills aux 3ème et 4ème sélecteurs au cas où vous auriez d'autres listes à l'intérieur de l'élément centered-pills comme je l'ai fait. .centered-pills ul.nav-pills li { display:inline; } .centered-pills ul.nav-pills li a { float:left; }

24voto

Artur Beljajev Points 11

Ou l'approche flexbox :

.nav-pills {
    display: flex;
    justify-content: center;
}

0 votes

C'est la solution la plus simple si les navigateurs cibles peuvent la gérer. Merci.

0 votes

Dans mon cas, j'ai plusieurs éléments <li> et j'ai utilisé cet élément supplémentaire. flex-wrap: wrap;

6voto

minaz Points 2473

Si vous souhaitez que les pilules soient centrées au lieu d'être alignées à gauche, vous devrez modifier le fichier css. Vous devrez spécifier une largeur et changer la marge en auto.

Par exemple :

.tabs, .pills {
    margin: 0 auto;
    padding: 0;
    width: 400px;
}

13 votes

C'est parfait, mais je ne recommanderais pas de modifier le fichier CSS. Je créerais mon propre fichier CSS pour étendre le CSS de Twitter Bootstrap.

0 votes

Définir une largeur de 960px pour Bootstrap vous aide à centrer quelque chose qui ne le serait pas autrement. Définissez la largeur et utilisez les décalages.

2 votes

Je recommande la solution de prrstn plutôt que celle-ci. Celle-ci corrige des tailles qui passent totalement à côté de l'intérêt d'utiliser bootstrap en premier lieu.

3voto

JeanMertz Points 1561

Bien que la réponse de @minaz fonctionne pour une liste avec une largeur connue, je propose une solution différente qui fonctionne même si vous changez le contenu de la liste :

.tabs, .pills {
  text-align: center;
}

.tabs li, .pills li {
  float: none;
}

Ou en SCSS :

.tabs, .pills {
  text-align: center;
  li { float: none; }
}

Cela permet de centrer le texte à l'intérieur de la liste, et de réinitialiser l'option float pour les éléments de la liste afin qu'ils soient affectés par la propriété text-align propriété.

0 votes

C'est grammaticalement incorrect. Vous ne pouvez pas imbriquer une règle css comme ceci

3 votes

Vous avez raison, ceci a été écrit en scss, qui permet ce genre d'imbrication. Vous devez retirer la partie li et spécifier .tabs li et .pills li.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X