Comment créer une colonne de largeur dynamique dans Twitter Bootstrap

comment utiliser Twitter Bootstrap pour créer une structure de liste semblable à une table, où certaines colonnes prennent autant d'espace que nécessaire pour accommoder l'élément le plus large de cette colonne, et une seule colonne prend l'espace restant?

Par exemple:

Id    |Name     |Email address                
100001|Joe      |MamiePVillalobos@teleworm.us
100   |Christine|ChristineJWilliams@dayrep.com
1001  |John     |JohnLMiley@dayrep.com

ID colonne prend juste assez d'espace pour accommoder le 100001 id, qui est le plus long id.

colonne Nom prend juste assez d'espace pour accueillir le nom de Christine.

courriel colonne prend l'espace restant.

32
demandé sur Alex.K. 2012-10-21 19:15:07

4 réponses

structure semblable à une Table utilisant l'ancienne étiquette de table

je plaisante - ou pas.

<table class="table">
  <tr><th>Id</th>     <th>Name</th>      <th>Email address</th></tr>
  <tr><td>100001</td> <td>Joe</td>       <td>MamiePVillalobos@teleworm.us</td></tr>
  <tr><td>100</td>    <td>Christine</td> <td>ChristineJWilliams@dayrep.com</td></tr>
  <tr><td>1001</td>   <td>John</td>      <td>JohnLMiley@dayrep.com</td></tr>
</table>

en Utilisant le système de grille

Dans la documentation sur le bootstrap système de grille Je n'ai pas pu trouver de blocs de construction de largeur automatique. Tout ce qui sort de la boîte a une certaine largeur et d'un nombre fixe de colonnes:

   <div class="row">
      <div class="span2">ID</div>
      <div class="span2">Name</div>
      <div class="span8">E-Mail</div>
    </div>
    <div class="row">
      <div class="span2">100001</div>
      <div class="span2">Joe</div>
      <div class="span8">MamiePVillalobos@teleworm.us</div>
    </div>
        <div class="row">
      <div class="span2">100</div>
      <div class="span2">Christine</div>
      <div class="span8">ChristineJWilliams@dayrep.com</div>
    </div>

donc je suppose que vous devez construire votre propre version pour une table à 3 colonnes avec taille auto.

Dans mon démo la grille de colonne de maquillage si l'espace est étroit, ou, si l'espace est trop large, les colonnes sont tendus.

mise à Jour créatives de balisage

j'ai mis à jour mon démo avec une classe personnalisée. Le markup créatif se rapproche de ce que vous recherchez

  <div class="row">
      <div class="spanFl">100000001 <br />
        100
      </div>
      <div class="spanFl">Joe <br/>
          Christine
      </div>
      <div class="spanFl">MamiePVillalobos@teleworm.us <br />
        ChristineJWilliams@dayrep.com
      </div>
  </div>    

utilisation de la table d'affichage css-3

tutsplus j'ai trouvé un article utilisant css-3 display:table mettre en place une table comme la mise en page. Sauf si vous utilisez trois divs pour chaque rangée, il ne résout pas les problèmes d'enrubannage des rangées.

#content {  
    display: table;  
}  
#mainContent {  
    display: table-cell;  
    width: 620px;  
    padding-right: 22px;  
}  
aside {  
    display: table-cell;  
    width: 300px;  
}  

Bootstrap responsive design

Que j'ai compris bootstrap documentation il n'y a pas de soultion intégrée pour une disposition à 3 colonnes avec une largeur automatique et restante. Pour citer la page responsive design sur bootstrap: "utilisez les requêtes médias de manière responsable et seulement comme un début pour vos audiences mobiles. Pour les projets de plus grande envergure, envisagez un code dédié des bases et non des couches de requêtes des médias."

Pourriez-vous expliquer pourquoi vous ne pouvez pas utiliser un tableau?

27
répondu surfmuggle 2013-10-22 01:36:45

comme d'autres l'ont dit, vous devriez utiliser des tables régulières là où elles ont du sens. Aussi, CSS3 display: table peut être une bonne solution.

Selon le cas d'utilisation, il y a une autre solution que vous pourriez consider:

https://github.com/donquixote/bootstrap-autocolumns/blob/master/bootstrap-autocolumns.css

C'est un morceau de CSS, qui ajoute "col-sm-auto" en plus de "col-sm-1", "col-sm-5", etc.

(Atm, je le recommande à juste copiez ceci dans un fichier CSS personnalisé et ajustez-le à vos besoins.)

Exemple

<div class="row">
  <div class="col-xs-auto">Left</div>
  <div class="col-xs-auto-right">Right</div>
  <div class="col-middle">Middle</div>
</div>

Voici un violon: http://jsfiddle.net/9wzqz/

Idée

  • .col - * - auto flotte vers la gauche, avec le rembourrage typique, mais sans réglage explicite de la largeur.
  • .col-* - auto-à droite flotte à la place.
  • .col-milieu a affichage de:table, ce qui l'empêche de flotter autour de l'autre élément.
  • Utilisation de "xs", "sm", "md", "lg" pour cibler des largeurs d'écran.

Limitations

les colonnes gauche/droite se développeront à pleine largeur, si vous les remplissez avec du texte long. Mieux vaut les utiliser pour des trucs de largeur fixe comme des images.

la colonne du milieu ne prendra toute la largeur disponible que si elle contient suffisamment de contenu.

9
répondu donquixote 2014-07-14 18:06:11

si vous n'avez pas besoin de limite la taille de la colonne, vous pouvez simplement désactiver la largeur.

<span class="col-xs-1" style="width: inherit !important; ">unknown ...</span>

j'ai besoin de la définition bootstrap pour les propriétés de l'autre colonne (rembourrage, hauteur, etc.), donc j'ai ajouté une définition de col, mais une petite unité (col-xs-1).

notes:

  • le "!important" clause pourrait être supprimé (je ne suis pas sûr)
  • dans mon projet les textes sont connus pour être petits de toute façon.
4
répondu Berry Tsakala 2015-04-15 11:51:34

selon bootstrap Documentation vous pouvez appliquer table-responsive classe css à l'élément table et le rendre réactif. Ce que j'ai observé, c'est qu'il fait réellement scroll-able.

-1
répondu Ehsan Samani 2015-07-30 00:24:38