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.

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 .


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


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;
}

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;}

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.


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>


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.