Sto usando il bootstrap di Twitter e ho una riga che ha due colonne (span6). Come creo un divisore verticale tra le due campate.
Grazie, Murtaza
Sto usando il bootstrap di Twitter e ho una riga che ha due colonne (span6). Come creo un divisore verticale tra le due campate.
Grazie, Murtaza
Risposte:
Se il tuo codice ha questo aspetto:
<div class="row">
<div class="span6">
</div>
<div class="span6">
</div>
</div>
Quindi presumo che tu stia utilizzando DIVS aggiuntivi all'interno del DIVS "span6" per contenere / disegnare i tuoi contenuti? Così...
<div class="row">
<div class="span6">
<div class="mycontent-left">
</div>
</div>
<div class="span6">
<div class="mycontent-right">
</div>
</div>
</div>
Quindi potresti semplicemente aggiungere un po 'di CSS alla classe "mycontent-left" per creare il tuo divisore.
.mycontent-left {
border-right: 1px dashed #333;
}
<span>superiore a quello sinistro. In tal caso, la linea verticale sarà brutta.
min-height: 100%; height: 100%;il CSS per il contenitore dive le divs contenenti ciascuna colonna.
col-*div, questo non funzionerà.
.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>
.row.vertical-divider div[class^="col-"] + div[class^="col-"] { text-align: center; padding-bottom: 100px; margin-bottom: -100px; border-left: 3px solid #0396D1; }
Bene, ecco un'altra opzione che sto usando da un po 'di tempo. Funziona benissimo per me dato che per lo più ho bisogno di separare visivamente 2 colonne. Ed è anche reattivo. Ciò significa che se ho colonne una accanto all'altra in dimensioni dello schermo medie e grandi, allora userei la classecol-md-border , che nasconderebbe il separatore su schermi di dimensioni inferiori.
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;
}
}
In scss puoi generare tutte le classi necessarie probabilmente da questo:
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>
Come funziona:
I cols devono essere all'interno di un elemento dove non ci sono altri cols altrimenti i selettori potrebbero non funzionare come previsto.
.col-md-border:not(:last-child)corrisponde a tutti tranne l' ultimo elemento prima di .row close e aggiunge il bordo destro ad esso.
.col-md-border + .col-md-bordercorrisponde al secondo div con la stessa classe se questi due sono uno accanto all'altro e aggiunge il bordo sinistro e -1px margine negativo. Il margine negativo è il motivo per cui non importa più quale colonna ha un'altezza maggiore e il separatore sarà 1px della stessa altezza della colonna più alta.
Ha anche alcuni problemi ...
col-XX-Xclass insieme a hidden-XX/ visible-XXclasses all'interno dello stesso elemento riga.... Ma d'altra parte è reattivo, funziona alla grande per html semplice ed è facile creare queste classi per tutte le dimensioni dello schermo di bootstrap.
Per correggere l'aspetto brutto di un divisore troppo corto quando il contenuto di una colonna è più alto, aggiungi bordi a tutte le colonne. Assegna a ogni altra colonna un margine negativo per compensare le differenze di posizione.
Ad esempio, le mie tre classi di colonne:
.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;
}
E l'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>
Assicurati di usare #ddd se vuoi lo stesso colore dei divisori orizzontali di Bootstrap.
Se stai ancora cercando la soluzione migliore nel 2018, ho scoperto che funziona perfettamente se hai almeno uno pseudo elemento libero (:: after o :: before).
Devi solo aggiungere una classe alla tua riga in questo modo: <div class="row divisore verticale ">
E aggiungilo al tuo 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;
}
Ogni riga con questa classe avrà ora un divisore verticale tra tutte le colonne che contiene ...
Puoi vedere come funziona in questo esempio.
Se vuoi un divisore verticale tra 2 colonne, tutto ciò di cui hai bisogno è aggiungere
class="col-6 border-left"
a una delle tue colonne div-s
MA
Nel mondo del responsive design, a volte potrebbe essere necessario farlo scomparire.
La soluzione sta scomparendo <hr>+ scomparendo <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/
testato su Bootstrap 4.1
L'ho provato. Funziona bene.
.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>
Con Bootstrap 4 puoi usare i bordi , evitando di scrivere altri CSS.
bordo sinistro
E se vuoi spazio tra il contenuto e il bordo puoi usare il riempimento . (in questo esempio padding left 4px)
pl-4
Esempio:
<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>
Aggiunte clausole di larghezza dei media nel CSS in modo che non ci siano fastidiosi confini sul lato mobile-friendly delle cose. Spero che sia di aiuto! Questo verrà ridimensionato alla lunghezza della colonna più lunga. Testato su .col-md-4 e .col-md-6 e la mia ipotesi è che sia compatibile con il resto. Nessuna garanzia però.
.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>
Supponendo che tu abbia uno spazio per le colonne, questa è un'opzione. Riequilibrare le colonne a seconda di ciò di cui hai bisogno.
<div class="col-1">
<div class="col-6 vhr">
</div>
</div>
.vhr{
border-right: 1px solid #333;
height:100%;
}
Bene, quello che ho fatto è stato rimuovere la grondaia tra le rispettive campate, quindi disegnare un bordo sinistro per la campata sinistra e un bordo destro per la campata destra in modo tale che i loro bordi si sovrappongano solo per dare una singola linea. In questo modo la linea visibile sarà solo uno dei bordi.
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>
Prova questo funziona per me