вертикальний роздільник між двома стовпцями в початковій стрічці


86

Я використовую twitter bootstrap і маю рядок, який має два стовпці (span6). Як створити вертикальний роздільник між обома прольотами.

Дякую, Муртаза


Я зробив версію, яка не вимагає зайвих елементів: stackoverflow.com/questions/11815081/…
Росс Ангус

що таке (span6)?
Євген Афанасьєв

Відповіді:


97

Якщо ваш код виглядає так:

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

Тоді я припускаю, що ви використовуєте додаткові DIVS у межах "span6" 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
проблема з вищезазначеним полягає в тому, що ця межа прилипає до мого вмісту в перший проміжок часу. У першому проміжку я маю форму, і кордон обнімає її вміст. Як я можу це відокремити?
муртаза52

Просте - додайте трохи заповнення до DIVS зліва та з вмісту.
Billy Moat,

10
Проблема могла б статися, якби вміст правого <span>вище, ніж лівого. У цьому випадку вертикальна лінія буде негарною.
lvarayut

Якщо стовпці мають різну висоту, ви можете змусити рядок пробігатися донизу, встановивши min-height: 100%; height: 100%;в CSS контейнер divі divs, що містять кожен стовпець.
raul

@raul Я вважаю, що це працює, лише якщо ви використовуєте flexbox. Якщо ви використовуєте поплавці на col-*div, то це не спрацює.
Джейкоб Стемм

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
Це рішення найкраще
Вай Янь Хайн

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-md-border:not(:last-child)відповідає всім елементам, крім останнього, перед .row close і додає до нього праву межу.

.col-md-border + .col-md-borderвідповідає другому div з тим самим класом, якщо ці два знаходяться поруч, і додає ліву межу та -1px від’ємне поле. Негативне поле - це те, чому вже не має значення, який стовпець має більшу висоту, а роздільник матиме 1 піксель тієї ж висоти, що і найвищий стовпець.

У нього також є деякі проблеми ...

  1. Коли ви намагаєтеся бути розумним / ледачим і використовуєте col-XX-Xклас разом з hidden-XX/ visible-XXкласами всередині одного елемента рядка.
  2. Коли у вас багато стовпців і вам потрібна ідеальна піксельна штука. Оскільки він переміщує стовпчик n-1 на 1 пікс вліво.

... Але, з іншого боку, він чуйний, чудово працює для простого html і легко створює ці класи для всіх розмірів екрану завантажувального екрану.


8

Щоб виправити потворний вигляд роздільника занадто коротким, коли вміст одного стовпця вище, додайте межі до всіх стовпців. Дайте кожному другому стовпцю від’ємне поле для компенсації різниці позицій.

Наприклад, мої три класи стовпців:

.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>

Переконайтеся, що ви використовуєте #ddd, якщо хочете отримати той самий колір, що і горизонтальні роздільники Bootstrap.


Мені подобається це рішення, але воно розраховане лише на три або більше стовпців. Що робити, якщо ви хочете лише двох? Ви середній ".borders" div не буде там, щоб коригувати поля.
Метью Закшевський,

6

Якщо ви все ще шукаєте найкращого рішення в 2018 році, я знайшов, як це чудово працює, якщо у вас є принаймні один вільний псевдоелемент (:: after або :: before).

Вам просто потрібно додати клас до свого рядка так: <div class="row вертикальний роздільник ">

І додайте це у свій 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
Опустити - у [class * = 'col-'] (до [class * = 'col']) для сумісності bootstrap 4 із класом "col"
Trey Dibler

просто коментар "Властивість ігнорується через відображення. З властивостями" display: inline "ширина, висота, margin-top, margin-bottom і float не мають ефекту. css"
Shuja Ahmed

5

Якщо вам потрібен вертикальний роздільник між 2 стовпцями, потрібно лише додати

class="col-6 border-left" 

до одного з ваших стовпців div-s

АЛЕ

У світі адаптивного дизайну, можливо, вам доведеться змусити його іноді зникнути.

Розчин зникає <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/

протестовано на Bootstrap 4.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
Роботи, настільки ж необхідні, також повинні були пояснити, що ви зробили.
Атік М.

Абсолютно ідеальний і повністю чуйний - навіть коли стовпці розміщуються на менших екранах, межа зникає, як хотілося б! Чудове просте рішення, дякую! :)
rmcsharry

1
не працює, правильний роздільник все ще є, подивіться тут: jsfiddle.net/k4uavbtz
Євген Афанасьєв

Працює для 3+ колонок. Якщо використовуються лише два стовпці, дільник слідує за висотою лівого стовпця. Тому, якщо права колонка довша, межа буде недостатньо високою.
Метью Закшевський,

4

За допомогою Bootstrap 4 ви можете використовувати межі , уникаючи написання інших CSS.

кордон ліворуч

А якщо вам потрібен простір між вмістом і межею, ви можете використовувати відступ . (у цьому прикладі відступ залишено 4 пікселі)

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

Ну, що я зробив, це видалив жолоб між відповідними прольотами, потім намалювавши ліву межу для лівого прольоту і праву межу для правого прольоту таким чином, що їх межі перекриваються, щоб отримати єдиний рядок. Таким чином видима лінія буде просто однією з меж.

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 divs не мають однакову висоту.
Ален Тіембло

-2

Використовуйте це, 100% гарантовано: -

vr {
  margin-left: 20px;
  margin-right: 20px;
  height: 50px;
  border: 0;
  border-left: 1px solid #cccccc;
  display: inline-block;
  vertical-align: bottom;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.