137 votes

Bootstrap combinant les rangées (rowspan)

Je teste Twitter Bootstrap et s'est retrouvé coincé avec échafaudage de base avec des rangées. J'ai revu leur documentation un certain nombre de fois et je peux voir des colonnes imbriquées où vous pouvez essentiellement imbriquer des colonnes à l'intérieur d'une colonne mais je ne peux pas localiser la possibilité de combiner des rangées en une seule et de l'aligner avec la colonne à côté des rangées non combinées.

L'image ci-dessous devrait illustrer ce que je veux accomplir.

rowspan layout sample

La seule solution de contournement que j'ai trouvée consiste à utiliser des tableaux, mais je n'aime pas cette idée. car je pense que la réactivité ne serait pas assurée par l'utilisation de tableaux.

Quelqu'un a-t-il une solution élégante à ce problème ? La plupart des mises en page web que je réalise nécessitent un bon niveau de flexibilité. Ce serait donc formidable si je pouvais trouver quelque chose d'utile ici.

105voto

Paul Keister Points 7179

Les Divs s'empilent verticalement par défaut, il n'est donc pas nécessaire de traiter spécialement les "rangées" dans une colonne.

div {
  height:50px;
}
.short-div {
  height:25px;
}

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />

<div class="container">
  <h1>Responsive Bootstrap</h1>
  <div class="row">
    <div class="col-lg-5 col-md-5 col-sm-5 col-xs-5" style="background-color:red;">Span 5</div>
    <div class="col-lg-3 col-md-3 col-sm-3 col-xs-3" style="background-color:blue">Span 3</div>
    <div class="col-lg-2 col-md-2 col-sm-3 col-xs-2" style="padding:0px">
      <div class="short-div" style="background-color:green">Span 2</div>
      <div class="short-div" style="background-color:purple">Span 2</div>
    </div>
    <div class="col-lg-2 col-md-2 col-sm-3 col-xs-2" style="background-color:yellow">Span 2</div>
  </div>
</div>
<div class="container-fluid">
  <div class="row-fluid">
    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
      <div class="short-div" style="background-color:#999">Span 6</div>
      <div class="short-div">Span 6</div>
    </div>
    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6" style="background-color:#ccc">Span 6</div>
  </div>
</div>

Sortie :

enter image description here

Voici le violon .

2 votes

Merci beaucoup. C'est ce que je cherchais ! J'aurais aimé que la documentation de Bootstrap mentionne cela en plus sous l'imbrication des colonnes, car l'approche est fondamentalement la même.

1 votes

Dans votre exemple, vous définissez 1row=25px , 2row=50px . pouvez-vous faire en sorte que la division étendue soit aussi haute que la rangée entière ? j'ai essayé d'ajouter .row{height:100%;} mais ça n'a pas marché.

0 votes

Oui, @carter l'exemple original n'était pas conforme à bootstrap 3 ; je l'ai corrigé.

94voto

Alcalyn Points 153

Vous devez utiliser l'imbrication des colonnes de bootstrap.

Voir Bootstrap 3 o Bootstrap 4 :

<div class="row">
    <div class="col-md-5">Span 5</div>
    <div class="col-md-3">Span 3<br />second line</div>
    <div class="col-md-2">
        <div class="row">
            <div class="col-md-12">Span 2</div>
        </div>
        <div class="row">
            <div class="col-md-12">Span 2</div>
        </div>
    </div>
    <div class="col-md-2">Span 2</div>
</div>
<div class="row">
    <div class="col-md-6">
        <div class="row">
            <div class="col-md-12">Span 6</div>
            <div class="col-md-12">Span 6</div>
        </div>
    </div>
    <div class="col-md-6">Span 6</div>
</div>

http://jsfiddle.net/DRanJ/125/

(Dans l'écran Fiddle, agrandissez votre écran de test pour voir le résultat, car j'utilise des col- md -*, puis colonnes de piles réactives)

Nota : Je ne suis pas sûr que BS2 permette emboîtement des colonnes mais dans la réponse de Paul Keister, l'imbrication des colonnes n'est pas utilisée. Il faut l'utiliser et éviter de réinventer le css alors que bootstrap le fait bien.

La hauteur des colonnes est automatique, si vous ajoutez une deuxième ligne (comme je le fais dans mon exemple), la hauteur des colonnes s'adapte.

11 votes

Cette réponse devrait être acceptée car elle fonctionne avec Bootstrap et ne nécessite aucune modification des CSS.

0 votes

La réponse acceptée est plus lisible ; elle contient un extrait de code et un lien vers JSfiddle et, à mon avis, les exemples de Paul Keister sont plus clairs que ceux d'Alcalyn. C'est pourquoi je pense que la réponse de Paul Keister devrait être conservée comme réponse acceptée, au moins jusqu'à ce que la réponse d'Alcalyn soit améliorée.

1 votes

@Alcalyn dans mon navigateur (Chrome), le bidule lié à votre réponse ne produit pas le résultat attendu (voir l'image dans la question). Le résultat réel est que tous les divs sont alignés dans une colonne.

12voto

pickypg Points 8948

Remarque : il s'agissait de Bootstrap 2 (pertinent au moment où la question a été posée).

Vous pouvez y parvenir en utilisant row-fluid pour créer une rangée basée sur le fluide (pourcentage) à l'intérieur d'une rangée existante. block .

<div class="row">
   <div class="span5">span5</div>
   <div class="span3">span3</div>
   <div class="span2">
      <div class="row-fluid">
         <div class="span12">span2</div>
         <div class="span12">span2</div>
      </div>
   </div>
   <div class="span2">span2</div>
</div>
<div class="row">
   <div class="span6">
      <div class="row-fluid">
         <div class="span12">span6</div>
         <div class="span12">span6</div>
      </div>
   </div>
   <div class="span6">span6</div>
</div>

Voici un Exemple de JSFiddle .

J'ai remarqué qu'une marge gauche étrange apparaissait (ou n'apparaissait pas) pour les travées à l'intérieur de l'élément row-fluid après le premier. Cela peut être corrigé avec une petite modification CSS (c'est la même CSS qui est appliquée au premier enfant, étendue à ceux après le premier enfant) :

.row-fluid [class*="span"] {
    margin-left: 0;
}

0 votes

Merci pour votre effort, mais il semble qu'une ligne ne doive pas utiliser row-fluid pour accomplir cette tâche, comme le suggère la réponse que j'ai choisie. Mais je vous en suis très reconnaissant !

1 votes

Très vrai, mais n'oubliez pas row-fluid quand il s'agira de commencer à subdiviser les rangées intérieures.

7voto

mani Points 679

Vérifiez celui-ci. J'espère qu'il vous aidera pleinement.

http://jsfiddle.net/j6amM/

.row-fix { margin-bottom:20px;}

.row-fix > [class*="span"]{ height:100px; background:#f1f1f1;}

.row-fix .two-col{ background:none;}

.two-col > [class*="col"]{ height:40px; background:#ccc;}

.two-col > .col1{margin-bottom:20px;}

-3voto

De ce que je sais de Bootstrap et de ce qui le rend agréable, c'est que vous n'avez pas à vous soucier du code css/js/jquery fastidieux, tout est construit pour vous, ceci étant dit, essayez de manipuler le css de la ligne. Lorsqu'il y a deux définitions css, la dernière est prioritaire, donc injectez-la à la source de la ligne, puisque ce sera la dernière, et en plus, elle ne perturbera pas les autres définitions css.

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