この問題を解決するにはどうすればよいですか? divに境界線を追加すると、divは中央に配置されず、span12
クラスは中央に配置されません。
Divを境界線の中央に配置したい
<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>
残念ながら、それが境界線の役割であり、要素が占めるスペースの一部としてカウントされます。ボーダーのあまり知られていないいとこ:outline
を紹介させてください。ボーダーとほぼ同じです。唯一の違いは、レイアウトのスペースを占有せず、要素の4辺すべてに配置する必要があるという点で、ボックスシャドウのように動作することです。
http://codepen.io/cimmanon/pen/wyktr
.foo {
outline: 1px solid orange;
}
Bootstrap 3以降、Panelクラスを使用できます。
<div class="panel panel-default">Surrounded by border</div>
CSSにはbox-sizing.
というプロパティがあります。これは、ページ上の要素の合計幅を決定します。デフォルト値はcontent-box
で、要素のパディング、マージン、ボーダーは含まれません。
したがって、div
を設定してwidth: 500px
と20px
をパディングすると、Webサイトで540px
が使用されます(500 + 20 + 20)。
これが問題の原因です。ブートストラップは、上記の例のように設定された幅を計算しますが、これらには境界線がありません。 Bootstrapはパズルのようにぴったりと収まるため、辺の1つに境界線を追加すると、合計幅が501ピクセルになり(上記の例を続けて)、レイアウトが崩れます。
これを修正する最も簡単な方法は、box-sizing
を調整することです。使用する値はbox-sizing: border-box
です。これには、ボックス要素のパディングandボーダーが含まれます。 ボックスサイズの詳細については、こちらをご覧ください。
このソリューションの問題は、IE8 +でのみ機能することです。そのため、より深いIEサポートが必要な場合は、ブートストラップの幅をオーバーライドして境界を考慮する必要があります。
新しい幅の計算方法の例を示すには、Bootstrapが要素に設定する幅を確認することから始めます。それがspan6
であり、幅が320px
であるとしましょう(これは純粋に仮定であり、span6の実際の幅はBootstrapの特定の設定に依存します)。右側に20pxのパディングを持つ単一の境界線を追加する場合は、スタイルシートにこのCSSを記述します
.span6 {
padding-right: 20px;
border-right: 1px solid #ddd;
width: 299px;
}
ここで、新しい幅は次によって計算されます。
old width - padding - border
div
のサイズに応じて、Bootstrapの組み込みコンポーネントthumbnail
クラスを、グリッドシステムとともに(またはグリッドシステムなしで)使用して、各div
アイテムの周囲に境界線を作成できます。
これらの例 BootstrapのWebサイトでは、特別な追加のCSS
:の使いやすさと必要性がないことを示しています
<div class="row">
<div class="col-xs-6 col-md-3">
<a href="#" class="thumbnail">
<img src="..." alt="...">
</a>
</div>
...
</div>
次のdiv
グリッド項目を生成します:
または追加のコンテンツを追加:
<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>
次のdiv
グリッド項目を生成します:
ボーダー対ボーダーボックスについて他の人が言ったことは間違いなく正しいです。ただし、カスタムクラスを作成しなくても、これを機能させることができます。 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;
}
がんばろう!
それはおそらく正しい方法ではありませんが、簡単な回避策であることがわかったのは、ボーダーではなくボックスシャドウを使用することです...これグリッドシステムを壊しません。たとえば、あなたの場合:
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;
}
幅の計算方法(幅=ボーダー+パディング+幅)によってレイアウトが壊れるので、スパンにボーダーを追加することはできません。コンテナは940pxで、スパンは940pxであるため、2pxの境界線(つまり4px)を追加すると、中央から外れたように見えます。回避策は、幅を変更して4pxボーダー(オリジナル-4px)を含めるか、2pxボーダーを作成する別のdivを内部に持つことです。
基本的な境界線が必要な場合は、ブートストラップウェルを使用するだけです。
たとえば、次のコード:
<div class="well">Basic Well</div>