ブートストラップの2つの列の間の垂直仕切り


86

Twitterブートストラップを使用していて、2つの列(span6)を持つ行があります。両方のスパンの間に垂直仕切りを作成するにはどうすればよいですか。

ありがとう、ムルタザ


:私は、余分な要素を必要としないバージョンでした stackoverflow.com/questions/11815081/...
ロスアンガス

(span6)とは何ですか?
YevgeniyAfanasyev19年

回答:


97

コードが次のようになっている場合:

<div class="row">
  <div class="span6">
  </div>
  <div class="span6">
  </div>
</div>

次に、コンテンツの保持/スタイル設定に「span6」DIVS内で追加のDIVSを使用していると思いますか?そう...

<div class="row">
  <div class="span6">
    <div class="mycontent-left">
    </div>
  </div>
  <div class="span6">
    <div class="mycontent-right">
    </div>
  </div>
</div>

したがって、CSSを「mycontent-left」クラスに追加するだけで、仕切りを作成できます。

.mycontent-left {
  border-right: 1px dashed #333;
}

1
上記の問題は、最初のスパンで境界線が私のコンテンツに固執することです。最初のスパンで私はフォームを持っていて、ボーダーはその内容を抱いています。どうすれば分離できますか?
murtaza52 2013年

シンプル-content-leftおよびcontent-rightDIVSにパディングを追加します。
ビリーモート2013年

10
右のコンテンツが<span>左のコンテンツよりも高い場合に問題が発生します。その場合、縦線は醜くなります。
lvarayut 2014年

列の高さが異なる場合はmin-height: 100%; height: 100%;、コンテナのCSSdivdiv各列を含むsを設定することで、行を最後まで実行できます。
raul 2016年

@raulフレックスボックスを使用している場合にのみ機能すると思います。col-*divでfloatを使用している場合、これは機能しません。
ジェイコブスタム2017年

30

.row.vertical-divider {
  overflow: hidden;
}
.row.vertical-divider > div[class^="col-"] {
  text-align: center;
  padding-bottom: 100px;
  margin-bottom: -100px;
  border-left: 3px solid #F2F7F9;
  border-right: 3px solid #F2F7F9;
}
.row.vertical-divider div[class^="col-"]:first-child {
  border-left: none;
}
.row.vertical-divider div[class^="col-"]:last-child {
  border-right: none;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" />
<div class="row vertical-divider" style="margin-top: 30px">
  <div class="col-xs-6">Hi there</div>
  <div class="col-xs-6">Hi world<br/>hi world</div>
</div>


1
:使用「+」セレクタとは、最初と最後の子クラスは必要ありません.row.vertical-divider div[class^="col-"] + div[class^="col-"] { text-align: center; padding-bottom: 100px; margin-bottom: -100px; border-left: 3px solid #0396D1; }
ワシル

1
このソリューションが最適です
Wai Yan Hein 2018年

21

Bootstrap 4には、border-right使用できるユーティリティクラスがあります。

したがって、たとえば、次のことができます。

<div class="row">
  <div class="col-6 border-right"></div>
  <div class="col-6"></div>
</div>

14

さて、これは私がしばらくの間使用している別のオプションです。私は主に2つの列を視覚的に分離する必要があるので、それは私にとって素晴らしい働きをします。そしてそれはまた敏感です。つまり、中規模と大規模の画面サイズで列が隣り合っている場合は、クラスを使用しますcol-md-borderます。これにより、小さい画面サイズではセパレータが非表示になります。

css:

@media (min-width: 992px) {
    .col-md-border:not(:last-child) {
        border-right: 1px solid #d7d7d7;
    }
    .col-md-border + .col-md-border {
        border-left: 1px solid #d7d7d7;
        margin-left: -1px;
    }
}

scssでは、おそらくこれから必要なすべてのクラスを生成できます。

scss:

@media(min-width: $screen-md-min) {
    .col-md-border {
        &:not(:last-child) {
            border-right: 1px solid #d7d7d7;
        }

        & + .col-md-border {
            border-left: 1px solid #d7d7d7;
            margin-left: -1px;
        }
    }
}

HTML:

<div class="row">
    <div class="col-md-6 col-md-border"></div>
    <div class="col-md-6 col-md-border"></div>
</div>  

使い方:

colは、他のcolがない要素内にある必要があります。そうでない場合、セレクターが期待どおりに機能しない可能性があります。

.col-md-border:not(:last-child).row closeの前最後の要素を除くすべての要素に一致し、それに右の境界線を追加します。

.col-md-border + .col-md-borderこれら2つが互いに隣接している場合、同じクラスの2番目のdivと一致し、左の境界線と-1pxの負のマージンを追加します。負のマージンは、どの列の高さが高くても問題がなくなり、セパレータが最も高い列と同じ高さの1pxになる理由です。

また、いくつかの問題があります...

  1. 賢く/怠惰になり、同じ行要素内col-XX-Xhidden-XX/visible-XXクラスと一緒にクラスを使用しようとする場合。
  2. 列がたくさんあり、ピクセルに最適なものが必要な場合。n-1列を1px左に移動するため。

...しかし一方で、応答性が高く、単純なhtmlに最適であり、すべてのブートストラップ画面サイズに対してこれらのクラスを簡単に作成できます。


8

1つの列のコンテンツが高いときに仕切りが短すぎるという見苦しい外観を修正するには、すべての列に境界線を追加します。1つおきの列に負のマージンを与えて、位置の違いを補正します。

たとえば、私の3つの列クラス:

.border-right {
    border-right: 1px solid #ddd;
}
.borders {
    border-left: 1px solid #ddd;
    border-right: 1px solid #ddd;
    margin: -1px;
}
.border-left {
    border-left: 1px solid #ddd;
}

そしてHTML:

<div class="col-sm-4 border-right">First</div>
<div class="col-sm-4 borders">Second</div>
<div class="col-sm-4 border-left">Third</div>

Bootstrapの水平仕切りと同じ色が必要な場合は、必ず#dddを使用してください。


私はこのソリューションが好きですが、3列以上用に設計されています。2つだけが必要な場合はどうなりますか?あなたは真ん中の ".borders" divはマージンを調整するためにそこにありません。
Matthew Zackschewski 2018

6

2018年もまだ最良の解決策を探しているのであれば、少なくとも1つの無料の疑似要素(:: afterまたは:: before)がある場合にこれが完全に機能する方法を見つけました。

次のように行にクラスを追加する必要があります:<div class="row vertical-divider ">

そしてこれをCSSに追加します:

.row.vertical-divider [class*='col-']:not(:last-child)::after {
  background: #e0e0e0;
  width: 1px;
  content: "";
  display:block;
  position: absolute;
  top:0;
  bottom: 0;
  right: 0;
  min-height: 70px;
}

このクラスの行には、含まれるすべての列の間に垂直方向の仕切りがあります...

この例で、これがどのように機能するかを確認できます


1
クラス "col"とのブートストラップ4の互換性のために[class * = 'col-']の-を省略します([class * = 'col']へ)
Trey Dibler 2018年

コメントだけ「表示のため、プロパティは無視されます。「display:inline」を使用すると、幅、高さ、margin-top、margin-bottom、floatプロパティは効果がありません。css」
Shuja Ahmed

5

2列の間に垂直の仕切りが必要な場合は、追加するだけです。

class="col-6 border-left" 

列div-sの1つに

だが

レスポンシブデザインの世界では、時々それを消す必要があるかもしれません。

解決策は消えていく<hr>+消えていく<div>+margin-left: -1px;

<div class="container">
  <div class="row">
    <div class="col-md-7">
      1 of 2
    </div>
    <div class="border-left d-sm-none d-md-block" style="width: 0px;"></div>
    <div class="col-md-5" style="margin-left: -1px;">
    <hr class="d-sm-block d-md-none">
      2 of 2
    </div>
  </div>
</div>

https://jsfiddle.net/8z1pag7s/

Bootstrap4.1でテスト済み


4

私はそれをテストしました。それはうまくいきます。

.row.vdivide [class*='col-']:not(:last-child):after {
      background: #e0e0e0;
      width: 1px;
      content: "";
      display:block;
      position: absolute;
      top:0;
      bottom: 0;
      right: 0;
      min-height: 70px;
    }

    <div class="container">
      <div class="row vdivide">
        <div class="col-sm-3 text-center"><h1>One</h1></div>
        <div class="col-sm-3 text-center"><h1>Two</h1></div>
        <div class="col-sm-3 text-center"><h1>Three</h1></div>
        <div class="col-sm-3 text-center"><h1>Four</h1></div>
      </div>
    </div>

1
作品は、完全に必要に応じて、あなたがしたことを説明しているはずです。
Atik M.

完全に完璧で、完全に応答します-列が小さな画面に積み重ねられた場合でも、必要に応じて境界線が消えます!とても簡単な解決策、ありがとう!:)
rmcsharry 2017年

1
動作していません。右側のセパレーターはまだあります。こちらをご覧ください:jsfiddle.net/k4uavbtz
YevgeniyAfanasyev18年

3列以上で機能します。2列のみを使用する場合、仕切りは左側の列の高さに追従します。したがって、右側の列が長い場合、境界線の高さは十分ではありません。
Matthew Zackschewski 2018

4

ではブートストラップ4を使用でき境界線を他のCSSを書い避け、。

ボーダー左

また、コンテンツと境界線の間にスペースが必要な場合は、パディングを使用できます。(この例では、左4pxのパディング)

pl-4

例:

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

    <div class="row">
      <div class="offset-6 border-left pl-4">First</div>
      <div class="offset-6 border-left pl-4">Second</div>
    </div>


2

境界線を表示するには、全ページで開く必要があります。

CSSにメディア幅句を追加して、モバイルフレンドリーな側面に厄介な境界線がないようにしました。お役に立てれば!これにより、最も長い列の長さにサイズ変更されます。.col-md-4および.col-md-6でテストされており、他の部分と互換性があると想定しています。ただし、保証はありません。

JSFiddle

.row {
  overflow: hidden;
}

.cols {
  padding-bottom: 100%;
  margin-bottom: -100%;
  overflow: hidden;
}

@media(min-width: 992px) {
  .col-md-4:not(:first-child), 
  .col-md-6:not(:first-child) {
    border-left: 1px solid black;
  }
  .col-md-4:not(:last-child),
  .col-md-6:not(:last-child) {
    border-right: 1px solid black;
    margin-right: -1px;
  }
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container">
  <h1>
    .col-md-6
  </h1>
  <hr>
  <div class="row text-center">
    <div class="col-md-6 cols">
      <p>Enter some text here</p>
    </div>
    <div class="col-md-6 cols">
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
    </div>
  </div>
  <hr>
  <h1>
    .col-md-4
  </h1>
  <div class="row text-center">
    <div class="col-md-4 cols">
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
    </div>
    <div class="col-md-4 cols">
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
    </div>
    <div class="cols col-md-4 cols">
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
      <p>Enter some more text here</p>
    </div>
  </div>
</div>


2

列スペースがあると仮定すると、これはオプションです。必要に応じて列のバランスを取り直します。

<div class="col-1">
    <div class="col-6 vhr">
    </div>
</div>
.vhr{
  border-right: 1px solid #333;
  height:100%;
}

0

さて、私がしたことは、それぞれのスパン間の溝を取り除き、次に、左スパンの左境界線と右スパンの右境界線を、それらの境界線がちょうど1本の線になるように重なるように描画することでした。このようにして、表示される線は境界線の1つになります。

CSS

.leftspan
{
padding-right:20px;
border-right: 1px solid #ccc;
}

.row-fluid .rightspan {
margin-left: -0.138297872340425%;
*margin-left: -0.13191489361702%;
padding-left:20px;
border-left: 1px solid #ccc;
}

.row-fluid .rightspan:first-child {
margin-left: -0.11063829787234%;
*margin-left: -0.104255319148938%;
}

HTML

  <div class="row-fluid" >
      <div class="span8 leftspan" >
      </div>

      <div class="span4 rightspan"  >
      </div>
 </div>

これを試してみてください


1
2つのdivの高さが同じでない場合は醜いです。
Alain Tiemblo 2015

-2

これを使用して、100%保証:-

vr {
  margin-left: 20px;
  margin-right: 20px;
  height: 50px;
  border: 0;
  border-left: 1px solid #cccccc;
  display: inline-block;
  vertical-align: bottom;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.