web-dev-qa-db-fra.com

Comment utiliser la bordure avec Bootstrap

Comment puis-je résoudre ce problème? Lorsque vous ajoutez des bordures à un div, le div n'est pas centré et la classe span12 n'est pas centrée.

Je voudrais centrer le div avec les frontières

<div class="row" >
   <div class="span12" style="border: 2px solid black">
      <div class="row">
         <div class="span4">
            1
         </div>
         <div class="span4">
            2
         </div>
         <div class="span4">
            3
         </div>
      </div>
   </div>
</div>
60
the_martux

Malheureusement, c'est ce que font les frontières, elles font partie de l'espace qu'un élément occupe. Permettez-moi de vous présenter le cousin moins connu de Border: outline. C'est pratiquement identique à la frontière. La seule différence est qu'il se comporte plutôt comme une zone d'ombre, en ce sens qu'il ne prend pas d'espace dans votre mise en page et qu'il doit figurer sur les 4 côtés de l'élément.

http://codepen.io/cimmanon/pen/wyktr

.foo {
    outline: 1px solid orange;
}
75
cimmanon

À partir de Bootstrap 3, vous pouvez utiliser les classes du Panel:

<div class="panel panel-default">Surrounded by border</div>

32
Prague

Il existe une propriété CSS appelée box-sizing. Elle détermine la largeur totale d'un élément de votre page. La valeur par défaut est content-box, qui n'inclut pas le remplissage, la marge ou la bordure de l'élément.

Par conséquent, si vous définissez une div pour que width: 500px et 20px complètent tout autour, il prendra 540px sur votre site Web (500 + 20 + 20).

C'est ce qui cause votre problème. Bootstrap calcule les largeurs définies pour des éléments similaires à l'exemple ci-dessus, et ces éléments n'ont pas de bordures. Puisque Bootstrap s'emboîte comme un puzzle, ajouter une bordure à l'un des côtés donnerait une largeur totale de 501 pixels (en reprenant l'exemple ci-dessus) et romprait votre mise en page.

Le moyen le plus simple de résoudre ce problème consiste à ajuster votre box-sizing. La valeur que vous utiliseriez est box-sizing: border-box. Cela inclut le remplissage et la bordure dans les éléments de votre boîte. Vous pouvez en savoir plus sur la taille de la boîte ici.

Un problème avec cette solution est qu'il ne fonctionne que sur IE8 +. Par conséquent, si vous avez besoin d'une assistance IE plus profonde, vous devrez remplacer les largeurs Bootstrap pour prendre en compte votre bordure.

Pour donner un exemple de calcul d'une nouvelle largeur, commencez par vérifier la largeur définie par Bootstrap sur votre élément. Supposons qu'il s'agit d'un span6 et que sa largeur est de 320px (ceci est purement hypothétique, la largeur réelle de votre span6 dépendra de votre configuration spécifique de Bootstrap). Si vous vouliez ajouter une seule bordure à droite avec un rembourrage de 20 pixels, vous écrivez ce code CSS dans votre feuille de style.

.span6 {
  padding-right: 20px;
  border-right: 1px solid #ddd;
  width: 299px;
 }

où la nouvelle largeur est calculée par:

old width - padding - border

17
jamesplease

En fonction de la taille souhaitée de votre div, vous pouvez utiliser la classe thumbnail du composant intégré de Bootstrap, avec (ou sans) le système de grille pour créer des bordures autour de chacun de vos div articles.

Ces exemples sur le site Web de Bootstrap démontre la facilité d'utilisation et l'absence de besoin de tout ajout supplémentaire spécial CSS:

<div class="row">
    <div class="col-xs-6 col-md-3">
        <a href="#" class="thumbnail">
            <img src="..." alt="...">
        </a>
    </div>
    ...
</div>

qui produit les éléments de grille div suivants:

Simple grid objects

ou ajouter du contenu supplémentaire:

<div class="row">
  <div class="col-sm-6 col-md-4">
    <div class="thumbnail">
      <img src="..." alt="...">
      <div class="caption">
        <h3>Thumbnail label</h3>
        <p>...</p>
        <p>
            <a href="#" class="btn btn-primary" role="button">Button</a>
            <a href="#" class="btn btn-default" role="button">Button</a>
       </p>
      </div>
    </div>
  </div>
</div>

qui produit les éléments de grille div suivants:

Custom grid objects

9
Blairg23

Ce que d’autres ont mentionné à propos de border vs border box est tout à fait correct. Vous pouvez toujours obtenir que cela fonctionne sans avoir à créer de classes personnalisées cependant: http://jsfiddle.net/panchroma/yfzdD/

HTML

<div class="container">
<div class="row" >
    <div class="span12">
       <div class="row">
        <div class="span4"> 1 </div>
        <div class="span4"> 2 </div>
        <div class="span4"> 3 </div>
        </div><!-- end nested row -->
    </div><!-- end span 12 -->

</div> <!-- end row -->
</div><!-- end container -->

CSS

.span12{
border:solid 2px black;
background-color:grey;  
}  

Bonne chance!

7
David Taiaroa

Bien que ce ne soit probablement pas la bonne façon de le faire, quelque chose que j'ai trouvé être une solution de contournement simple consiste simplement à utiliser une zone d'ombre plutôt qu'une bordure ... Ceci ne casse pas le système de grille. Par exemple, dans votre cas:

HTML

<div class="container">
    <div class="row" >
        <div class="span12">
            <div class="row">
                <div class="span4">
                    1
                </div>
                <div class="span4">
                    2
                </div>
                <div class="span4">
                    3
                </div>
            </div>
        </div>
    </div>
</div>

CSS

.span12{
    -moz-box-shadow: 0 0 2px black;
    -webkit-box-shadow: 0 0 2px black;
    box-shadow: 0 0 2px black;
}

violon

6
brbcoding

Vous ne pouvez pas simplement ajouter une bordure à l'étendue car elle cassera la mise en page à cause de la façon dont la largeur est calculée: width = border + padding + width. Étant donné que le conteneur a une résolution de 940 pixels et une étendue de 940 pixels, l’ajout d’une bordure de 2 pixels (donc de 4 pixels au total) le fera paraître décentré. La solution consiste à modifier la largeur pour inclure la bordure de 4px (original - 4px) ou d’avoir une autre div à l’intérieur qui crée la bordure de 2px.

5
David Nguyen

Si vous avez besoin d’une bordure de base, il vous suffit d’utiliser bootstrap wells.

Par exemple le code ci-dessous:

<div class="well">Basic Well</div>
1
Khatx Albert