Bootstrap combinando linhas (rowpan)

127

Estou testando o Twitter Bootstrap e fiquei preso com andaimes básicos com linhas. Revisei a documentação várias vezes e vejo colunas de aninhamento em que você pode aninhar colunas em uma coluna, mas não consigo localizar a capacidade de combinar linhas em uma e alinhar com a coluna ao lado das linhas não combinadas.

A figura abaixo deve ilustrar o que eu quero realizar.

amostra de layout de linhas

A única solução alternativa que encontrei é o uso de tabelas, mas não gosto dessa ideia, pois minha opinião é que a capacidade de resposta não funcionaria com o uso de tabelas.

Alguém tem alguma solução elegante para isso? A maior parte do layout da Web que eu preciso precisará de um bom nível de flexibilidade, por isso será ótimo se eu puder pegar algo útil aqui.

Seong Lee
fonte

Respostas:

98

Divs empilham verticalmente por padrão, portanto, não há necessidade de tratamento especial de "linhas" dentro de uma coluna.

div {
  height:50px;
}
.short-div {
  height:25px;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />

<div class="container">
  <h1>Responsive Bootstrap</h1>
  <div class="row">
    <div class="col-lg-5 col-md-5 col-sm-5 col-xs-5" style="background-color:red;">Span 5</div>
    <div class="col-lg-3 col-md-3 col-sm-3 col-xs-3" style="background-color:blue">Span 3</div>
    <div class="col-lg-2 col-md-2 col-sm-3 col-xs-2" style="padding:0px">
      <div class="short-div" style="background-color:green">Span 2</div>
      <div class="short-div" style="background-color:purple">Span 2</div>
    </div>
    <div class="col-lg-2 col-md-2 col-sm-3 col-xs-2" style="background-color:yellow">Span 2</div>
  </div>
</div>
<div class="container-fluid">
  <div class="row-fluid">
    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
      <div class="short-div" style="background-color:#999">Span 6</div>
      <div class="short-div">Span 6</div>
    </div>
    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6" style="background-color:#ccc">Span 6</div>
  </div>
</div>

Aqui está o violino .

Paul Keister
fonte
2
Muito obrigado. Era isso que eu estava procurando! Desejo que a documentação do Bootstrap mencione isso adicionalmente nas colunas de aninhamento, pois a abordagem é basicamente a mesma.
Seong Lee
1
no seu exemplo você definir 1row=25px, 2row=50px. você pode fazer com que a div estendida seja tão alta quanto a linha inteira? tentei adicionar, .row{height:100%;}mas não foi.
Tomer W
Sim, @carter, o exemplo original não era compatível com o bootstrap 3; Eu corrigi isso.
Paul Keister
1
O exemplo tem calhas na segunda linha, o que parece estranho.
Connie DeCinko
83

Você deve usar o aninhamento de colunas de autoinicialização.

Consulte Bootstrap 3 ou Bootstrap 4 :

<div class="row">
    <div class="col-md-5">Span 5</div>
    <div class="col-md-3">Span 3<br />second line</div>
    <div class="col-md-2">
        <div class="row">
            <div class="col-md-12">Span 2</div>
        </div>
        <div class="row">
            <div class="col-md-12">Span 2</div>
        </div>
    </div>
    <div class="col-md-2">Span 2</div>
</div>
<div class="row">
    <div class="col-md-6">
        <div class="row">
            <div class="col-md-12">Span 6</div>
            <div class="col-md-12">Span 6</div>
        </div>
    </div>
    <div class="col-md-6">Span 6</div>
</div>

http://jsfiddle.net/DRanJ/125/

(Tela Em Fiddle, ampliar sua tela de teste para ver o resultado, porque eu estou usando col- md - *, então colunas pilhas responsivas)

Nota : Não tenho certeza de que o BS2 permita o aninhamento de colunas , mas na resposta de Paul Keister, o aninhamento de colunas não é usado. Você deve usá-lo e evitar reinventar o css enquanto o bootstrap se sai bem.

A altura das colunas é automática, se você adicionar uma segunda linha (como eu faço no meu exemplo), a altura da coluna se adaptará.

Alcalyn
fonte
10
Esta deve ser a resposta aceita porque trabalha com Bootstrap fora da caixa e não requer qualquer ajuste CSS
cheenbabes
A resposta aceita é mais legível; contém um trecho de código e um link para os exemplos de JSfiddle e IMHO Paul Keister são mais claros que os exemplos de Alcalyn. É por isso que acho que a de Paul Keister deve ser mantida como a resposta aceita, pelo menos até que a resposta da Alcalyn seja aprimorada.
NAXA
1
@Alcalyn no meu navegador (Chrome), o violino vinculado da sua resposta não produz o resultado esperado (veja a figura na pergunta). O resultado real é todas as divs alinhadas em uma coluna.
NAXA
1
Se você vir uma única coluna com todas as extensões alinhadas, isso ocorre porque a -md-regra de resposta. Você deve ampliar sua tela para ver o resultado esperado. Se você precisar que seus períodos sejam exibidos como colunas em telas menores, substitua -md-por -sm-ou -xs-. Esta é uma questão de ponto de interrupção (consulte bootstrapdocs.com/v3.0.3/docs/css/#grid ).
Alcalyn 29/03
12

Nota: Este foi o Bootstrap 2 (relevante quando a pergunta foi feita).

Você pode fazer isso usando row-fluidpara criar uma linha com base em fluido (porcentagem) dentro de uma existente block.

<div class="row">
   <div class="span5">span5</div>
   <div class="span3">span3</div>
   <div class="span2">
      <div class="row-fluid">
         <div class="span12">span2</div>
         <div class="span12">span2</div>
      </div>
   </div>
   <div class="span2">span2</div>
</div>
<div class="row">
   <div class="span6">
      <div class="row-fluid">
         <div class="span12">span6</div>
         <div class="span12">span6</div>
      </div>
   </div>
   <div class="span6">span6</div>
</div>

Aqui está um exemplo do JSFiddle .

Notei que havia uma margem esquerda ímpar que aparece (ou não aparece) para os intervalos dentro do row-fluiddepois do primeiro. Isso pode ser corrigido com um pequeno ajuste de CSS (é o mesmo CSS aplicado ao primeiro filho, expandido para aqueles anteriores ao primeiro filho):

.row-fluid [class*="span"] {
    margin-left: 0;
}
pickypg
fonte
Obrigado pelo seu esforço, mas parece que uma linha não precisa usar fluido de linha para fazer isso, conforme sugerido pela minha resposta selecionada. Eu realmente aprecio isso!
Seong Lee
1
É verdade, mas não se esqueça row-fluidquando chegar a hora de subdividir as linhas internas.
pickypg
7

Verifique este. espero que ajude por completo.

http://jsfiddle.net/j6amM/

.row-fix { margin-bottom:20px;}

.row-fix > [class*="span"]{ height:100px; background:#f1f1f1;}

.row-fix .two-col{ background:none;}

.two-col > [class*="col"]{ height:40px; background:#ccc;}

.two-col > .col1{margin-bottom:20px;}
Manish Sharma
fonte
1

A resposta de Paulo parece derrotar o propósito do bootstrap; o de responder ao tamanho da janela de exibição / tela.

Aninhando linhas e colunas, você pode obter o mesmo resultado, mantendo a capacidade de resposta.

Aqui está uma resposta atualizada para esse problema;

<div class="container-fluid">
  <h1>  Responsive Nested Bootstrap </h1> 
  <div class="row">
    <div class="col-md-5" style="background-color:red;">Span 5</div>
    <div class="col-md-3" style="background-color:blue;">Span 3</div>
    <div class="col-md-2">
      <div class="row">
        <div class="container" style="background-color:green;">Span 2</div>
      </div>
      <div class="row">
        <div class="container" style="background-color:purple;">Span 2</div>
      </div>
    </div>
    <div class="col-md-2" style="background-color:yellow;">Span 2</div>
  </div>
  
  <div class="row">
    <div class="col-md-6">
      <div class="row">
        <div class="container" style="background-color:yellow;">Span 6</div>
      </div>
      <div class="row">
        <div class="container" style="background-color:green;">Span 6</div>
      </div>
    </div>
    <div class="col-md-6" style="background-color:red;">Span 6</div>
  </div>
</div>

Você pode ver o código aqui.

vasavest
fonte
0

div {
  height:50px;
}
.short-div {
  height:25px;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />

<div class="container">
  <h1>Responsive Bootstrap</h1>
  <div class="row">
    <div class="col-lg-5 col-md-5 col-sm-5 col-xs-5" style="background-color:red;">Span 5</div>
    <div class="col-lg-3 col-md-3 col-sm-3 col-xs-3" style="background-color:blue">Span 3</div>
    <div class="col-lg-2 col-md-2 col-sm-3 col-xs-2" style="padding:0px">
      <div class="short-div" style="background-color:green">Span 2</div>
      <div class="short-div" style="background-color:purple">Span 2</div>
    </div>
    <div class="col-lg-2 col-md-2 col-sm-3 col-xs-2" style="background-color:yellow">Span 2</div>
  </div>
</div>
<div class="container-fluid">
  <div class="row-fluid">
    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
      <div class="short-div" style="background-color:#999">Span 6</div>
      <div class="short-div">Span 6</div>
    </div>
    <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6" style="background-color:#ccc">Span 6</div>
  </div>
</div>

SUDIP SINGH
fonte
Isso não está funcionando para mim com <div class = "col-sm-2"> <div class = "col-lg-4 col-md-4 col-sm-4 col-xs-4" style = "background- cor: amarelo; "> <input type =" file "id =" imgInp "name =" img "accept =". png, .jpg, .jpeg "> <! - <input type =" text "src =" "class =" controle de forma "id =" imgName "size =" 40 "> </input> -> <img id =" img-upload "src =" "alt =" Transportador "width =" 300% " height = "50%" class = "círculo arredondado" /> </div> </div> </div>
SUDIP SINGH
2
Adicione explicação ao seu código. Para que o OP e o futuro leitor possam entender facilmente sua resposta.
Sangam Belose 29/04/19