Borrar Filas Al Hacer Columnas Multi-responsive-Bootstrap


Ese título podría no ser muy preciso, pero aquí está la situación:

La vista que no se ve adecuadaComo se puede ver en el HTML, el sistema de cuadrícula va desde 4 imágenes en pantallas xl a 3 en pantallas lg a 2 en cualquier cosa menos.

Estoy tratando de que se muestre correctamente, es decir, la cantidad adecuada de imágenes en cada tamaño de pantalla. Sin embargo, algo funky está pasando y no puede descifrarlo usando clases de bootstraps.

Me parece que tendría que agregar filas dinámicamente en cada punto de ruptura.

Alguna sugerencia?

-- ACTUALIZAR { Acabo de darme cuenta de que col-xl-* no existe. Sin embargo, eso no cambia la situación en absoluto. Por favor, no haga caso de la declaración xl.

-- ACTUALIZACIÓN 2 { Imágenes actualizadas.

-- ACTUALIZACIÓN 3 { Intentaré aclarar mi objetivo. Para esa imagen específica adjunta en mi post, me gustaría que aparecieran 3 cajas por fila, no todas helter skelter.

Cuando se colapsa a 2 cajas por row (dispositivo xs), quiero asegurarme de que cada fila tenga 2 cajas.

Author: karns, 2014-11-15

11 answers

Resolví este problema agregando clearfix elementos donde deberían estar. Quería 3 columnas en md y 2 columnas en sm y así es como lo hice:

<div class="row">
    <div class="col-sm-6 col-md-4"></div>
    <div class="col-sm-6 col-md-4"></div>
    <div class="clearfix visible-sm"></div>
    <div class="col-sm-6 col-md-4"></div>
    <div class="clearfix visible-md"></div>
    <div class="col-sm-6 col-md-4"></div>
    <div class="clearfix visible-sm"></div>
    <div class="col-sm-6 col-md-4"></div>
    <div class="col-sm-6 col-md-4"></div>
    <div class="clearfix visible-md"></div>
    <div class="clearfix visible-sm"></div>
    <div class="col-sm-6 col-md-4"></div>
</div>

Así que usé clearfix visible-sm después de cada segundo div y clearfix visible-md después de cada tercer div. No encuentro esta solución ideal, pero funciona bastante bien.

EDITAR: A partir de Bootstrap v3.2. 0 .visible-* las clases están obsoletas.

Http://getbootstrap.com/css/#responsive-utilities :

Las clases .visible-xs, .visible-sm, .visible-md, y .visible-lg también existe, pero están obsoletos a partir de la v3.2.0. Son aproximadamente equivalentes .visible - * - block, excepto con casos especiales adicionales para alternar elementos relacionados.

EDIT 2: Esta solución funciona siempre y cuando no quieras editar CSS, si tienes la opción de hacerlo, te recomiendo usar La respuesta de Jonas ya que es mucho más simple en mi opinión.

 38
Author: Dygestor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:42

Extiende tu bootstrap.css con este css:

@media (min-width:1200px){
    .auto-clear .col-lg-1:nth-child(12n+1){clear:left;}
    .auto-clear .col-lg-2:nth-child(6n+1){clear:left;}
    .auto-clear .col-lg-3:nth-child(4n+1){clear:left;}
    .auto-clear .col-lg-4:nth-child(3n+1){clear:left;}
    .auto-clear .col-lg-6:nth-child(odd){clear:left;}
}
@media (min-width:992px) and (max-width:1199px){
    .auto-clear .col-md-1:nth-child(12n+1){clear:left;}
    .auto-clear .col-md-2:nth-child(6n+1){clear:left;}
    .auto-clear .col-md-3:nth-child(4n+1){clear:left;}
    .auto-clear .col-md-4:nth-child(3n+1){clear:left;}
    .auto-clear .col-md-6:nth-child(odd){clear:left;}
}
@media (min-width:768px) and (max-width:991px){
    .auto-clear .col-sm-1:nth-child(12n+1){clear:left;}
    .auto-clear .col-sm-2:nth-child(6n+1){clear:left;}
    .auto-clear .col-sm-3:nth-child(4n+1){clear:left;}
    .auto-clear .col-sm-4:nth-child(3n+1){clear:left;}
    .auto-clear .col-sm-6:nth-child(odd){clear:left;}
}
@media (max-width:767px){
    .auto-clear .col-xs-1:nth-child(12n+1){clear:left;}
    .auto-clear .col-xs-2:nth-child(6n+1){clear:left;}
    .auto-clear .col-xs-3:nth-child(4n+1){clear:left;}
    .auto-clear .col-xs-4:nth-child(3n+1){clear:left;}
    .auto-clear .col-xs-6:nth-child(odd){clear:left;}
}

Úsalo como:

<div class="row auto-clear">
    <div class="col-xs-6 col-sm-4 col-md-4 col-lg-3">
        <p>Hey</p>
    </div>
</div>

Nota: esto requiere el uso de todos los tamaños de col y que todos los cols sean del mismo tamaño.

 60
Author: Jonas Äppelgran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-05 09:19:39

An .scss fix usando variables bootstrap, tomadas de @jonas y @yog

@mixin row-first-child($col-type) {
  .col-#{$col-type}- {
    &1:nth-child(12n+1),
    &2:nth-child(6n+1),
    &3:nth-child(4n+1),
    &4:nth-child(3n+1),
    &6:nth-child(odd){
      clear: left;
    }
  }
} 

.auto-clear {
  @media (min-width: $screen-lg-min){
    @include row-first-child(lg);
  }
  @media (min-width: $screen-md-min) and (max-width: $screen-md-max){
    @include row-first-child(md);
  }
  @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max){
    @include row-first-child(sm);
  }
  @media (max-width: $screen-xs-max){
    @include row-first-child(xs);
  }
}
 11
Author: KFunk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-02 21:46:56

La razón por la que su diseño se está rompiendo es debido a la altura dinámica de las imágenes que se presentan. La solución es simple, sólo limitar la altura de las imágenes. Por ejemplo

HTML

<div class="container">
  <div class="row">
    <div id="uploaded">
      <div class="col-xs-6 col-lg-4">
        <div class="file-block">
          <div class="file-thumbnail">
            <img src="http://placehold.it/200x500" alt="">
          </div>
          <div class="file-row-footer">
            <a href="javascript:void(0)"> Delete</a>
          </div>
        </div>
      </div>

      <div class="col-xs-6 col-lg-4">
        <div class="file-block">
          <div class="file-thumbnail">
            <img src="http://placehold.it/200x500" alt="">
          </div>
          <div class="file-row-footer">
            <a href="javascript:void(0)"> Delete</a>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

CSS

.file-block {
  border: 1px solid #ccc;
  border-radius: 10px;
  margin: 20px 0px;
  text-align: center;
}

.file-thumbnail {
  display: block;
  padding: 4px;
  margin-bottom: 20px;
  line-height: 1.42857143;
  height: 180px;
  font: 0/0 a;         /* remove the gap between inline(-block) elements */
}

.file-thumbnail:before {
  content: ' ';
  display: inline-block;
  vertical-align: middle;  /* vertical alignment of the inline element */
  height: 100%;
}

.file-thumbnail img {
  display: inline-block;
  margin: 0 auto;
  max-width: 150px;
  max-height: 180px;
  vertical-align: middle;
}

Echa un vistazo al CodePen para verlo en acción. Espero que esto ayude.

 3
Author: Bart Jedrocha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-15 18:36:07

Puede arreglar esto muy fácilmente con css si no necesita soportar IE8.

.file-row-contain.col-lg-4:nth-child(3n+1),
.file-row-contain.col-xs-6:nth-child(2n+1) { 
    clear: left; 
}

Ver ejemplos

 1
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-03 21:55:37

Añadiendo a la respuesta de @Jonas y @KFunk:

Solución potencial para requerir el uso de todos los tamaños de col (col-xs-6 col-sm-4 col-md-4 col-lg-4).

Clases creadas: auto-clear-xs, auto-clear-sm, auto-clear-md y auto-clear-lg.

He hecho mi respuesta móvil-primero.

Nota: Esto todavía requiere que las columnas sean del mismo tamaño.

HTML

<div class="row auto-clear-xs auto-clear-lg">
    <div class="col-xs-6 col-lg-3">
        <p>Hey</p>
    </div>
</div>

SCSS

@mixin row-first-child($col-type, $clear-type) {
   .col-#{$col-type}- {
    &1:nth-child(12n+1),
    &2:nth-child(6n+1),
    &3:nth-child(4n+1),
    &4:nth-child(3n+1),
    &6:nth-child(odd){
      clear: $clear-type;
    }
  }
}

.auto-clear-xs{
  @media (min-width: $screen-xs-min){
    @include row-first-child(xs, both);
}
  @media (max-width: $screen-xs-min){
    @include row-first-child(xs, both);
  }
}

.auto-clear-sm{
  @media (min-width: $screen-sm){
    @include row-first-child(xs, none);
    @include row-first-child(sm, both);
  }
}

.auto-clear-md{
  @media (min-width: $screen-md){
    @include row-first-child(xs, none);
    @include row-first-child(sm, none);
    @include row-first-child(md, both);
  }
}

.auto-clear-lg{
  @media (min-width: $screen-lg){
    @include row-first-child(xs, none);
    @include row-first-child(sm, none);
    @include row-first-child(md, none);
    @include row-first-child(lg, both);
  }
}

CSS

@media (min-width: 480px) {
  .auto-clear-xs .col-xs-1:nth-child(12n+1), 
  .auto-clear-xs .col-xs-2:nth-child(6n+1), 
  .auto-clear-xs .col-xs-3:nth-child(4n+1), 
  .auto-clear-xs .col-xs-4:nth-child(3n+1), 
  .auto-clear-xs .col-xs-6:nth-child(odd) {
    clear: both;
  }
}
@media (max-width: 480px) {
  .auto-clear-xs .col-xs-1:nth-child(12n+1), 
  .auto-clear-xs .col-xs-2:nth-child(6n+1), 
  .auto-clear-xs .col-xs-3:nth-child(4n+1), 
  .auto-clear-xs .col-xs-4:nth-child(3n+1), 
  .auto-clear-xs .col-xs-6:nth-child(odd) {
    clear: both;
  }
}


@media (min-width: 768px) {
  .auto-clear-sm .col-xs-1:nth-child(12n+1), 
  .auto-clear-sm .col-xs-2:nth-child(6n+1), 
  .auto-clear-sm .col-xs-3:nth-child(4n+1), 
  .auto-clear-sm .col-xs-4:nth-child(3n+1), 
  .auto-clear-sm .col-xs-6:nth-child(odd) {
    clear: none;
  }
  .auto-clear-sm .col-sm-1:nth-child(12n+1), 
  .auto-clear-sm .col-sm-2:nth-child(6n+1), 
  .auto-clear-sm .col-sm-3:nth-child(4n+1), 
  .auto-clear-sm .col-sm-4:nth-child(3n+1), 
  .auto-clear-sm .col-sm-6:nth-child(odd) {
    clear: both;
  }
}

@media (min-width: 992px) {
  .auto-clear-md .col-xs-1:nth-child(12n+1), 
  .auto-clear-md .col-xs-2:nth-child(6n+1), 
  .auto-clear-md .col-xs-3:nth-child(4n+1), 
  .auto-clear-md .col-xs-4:nth-child(3n+1), 
  .auto-clear-md .col-xs-6:nth-child(odd) {
    clear: none;
  }
  .auto-clear-md .col-sm-1:nth-child(12n+1), 
  .auto-clear-md .col-sm-2:nth-child(6n+1), 
  .auto-clear-md .col-sm-3:nth-child(4n+1), 
  .auto-clear-md .col-sm-4:nth-child(3n+1), 
  .auto-clear-md .col-sm-6:nth-child(odd) {
    clear: none;
  }
  .auto-clear-md .col-md-1:nth-child(12n+1), 
  .auto-clear-md .col-md-2:nth-child(6n+1), 
  .auto-clear-md .col-md-3:nth-child(4n+1), 
  .auto-clear-md .col-md-4:nth-child(3n+1), 
  .auto-clear-md .col-md-6:nth-child(odd) {
    clear: both;
  }
}

@media (min-width: 1200px) {
  .auto-clear-lg .col-xs-1:nth-child(12n+1), 
  .auto-clear-lg .col-xs-2:nth-child(6n+1), 
  .auto-clear-lg .col-xs-3:nth-child(4n+1), 
  .auto-clear-lg .col-xs-4:nth-child(3n+1), 
  .auto-clear-lg .col-xs-6:nth-child(odd) {
    clear: none;
  }
  .auto-clear-lg .col-sm-1:nth-child(12n+1), 
  .auto-clear-lg .col-sm-2:nth-child(6n+1), 
  .auto-clear-lg .col-sm-3:nth-child(4n+1), 
  .auto-clear-lg .col-sm-4:nth-child(3n+1), 
  .auto-clear-lg .col-sm-6:nth-child(odd) {
    clear: none;
  }
  .auto-clear-lg .col-md-1:nth-child(12n+1), 
  .auto-clear-lg .col-md-2:nth-child(6n+1), 
  .auto-clear-lg .col-md-3:nth-child(4n+1), 
  .auto-clear-lg .col-md-4:nth-child(3n+1), 
  .auto-clear-lg .col-md-6:nth-child(odd) {
    clear: none;
  }
  .auto-clear-lg .col-lg-1:nth-child(12n+1), 
  .auto-clear-lg .col-lg-2:nth-child(6n+1), 
  .auto-clear-lg .col-lg-3:nth-child(4n+1), 
  .auto-clear-lg .col-lg-4:nth-child(3n+1), 
  .auto-clear-lg .col-lg-6:nth-child(odd) {
    clear: both;
  }
}
 1
Author: Eva G-M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-12 16:50:23

Así es realmente como se supone que debe ser. La cuadrícula Bootstrap consta de 12 columnas, le estás diciendo que el tamaño de un elemento lg para ser 4/12 que es un tercio y un elemento xs para ser 6/12 que es la mitad de la anchura disponible.

Si marca el estilo aplicado verá que col-xs-6 es lo mismo que establecer el ancho de un elemento en 50% y 33.33% para col-lg-4.

Puede leer más sobre el sistema de cuadrícula aquí

EDITAR: Creo que entiendo su problema ahora, sin viendo tu código probablemente no pueda darte una solución exacta. Sin embargo, el problema parece ser la altura variable de sus cajas, si las tiene todas a la misma altura, debería darle la cantidad correcta de cajas por línea.

 0
Author: Faro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-14 22:36:14

Parece que la única solución a su problema es establecer una altura mínima o una altura fija a sus elementos para que no haya inconsistencias que causen sus problemas.

Añadir esto:

.file-row-contain {
  min-height:250px;
}

...ajuste la altura según sus necesidades

 0
Author: scooterlord,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-15 16:48:36

También estaba buscando una solución y como mi HTML se renderiza a través de un CMS, no pude usar la solución de la respuesta aceptada.

Así que mi solución es:

.teaser {
  // break into new line after last element
  > div:last-child {
    clear: right;
  }
}

.teaser {
  // two colums
  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
    > div:nth-child(2n+1) {
      clear: left;
    }
  }
}

.teaser {
  // three colums
  @media (min-width: @screen-md-min) {
    > div:nth-child(3n+1) {
      clear: left;
    }
  }
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<div class="row teaser">
    <div class="col-sm-6 col-md-4">div1</div>
    <div class="col-sm-6 col-md-4">div2<br>more content</div>
    <div class="col-sm-6 col-md-4">div3</div>
    <div class="col-sm-6 col-md-4">div4</div>
    <div class="col-sm-6 col-md-4">div5<br>more content content<br>content</div>
    <div class="col-sm-6 col-md-4">div6</div>
    <div class="col-sm-6 col-md-4">div7<br>more content</div>
    <div class="col-sm-6 col-md-4">div8</div>
</div>

Espero que esto ayude a alguien: -)

 0
Author: chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-02 17:47:23

Bootstrap 4 introduce las clases hidden-*-up y hidden-*-down. Utilidad muy práctica (y elegante) para situaciones como estas.

Clases disponibles

  • Las clases .hidden-*-up ocultan el elemento cuando el viewport está en el punto de interrupción dado o más ancho. Por ejemplo, .hidden-md-up oculta una elemento en viewports medianos, grandes y extragrandes.
  • Las clases .hidden-*-down ocultan el elemento cuando el viewport está en el punto de interrupción dado o más pequeño. Por ejemplo, .hidden-md-down oculta un elemento en las vistas extra-pequeñas, pequeñas y medianas.
  • No hay clases de utilidad receptivas explícitas "visible"/"show"; usted hace visible un elemento simplemente no ocultándolo en ese punto de interrupción Tamaño.
  • Puede combinar una clase .hidden-*-up con una clase .hidden-*-down para mostrar un elemento solo en un intervalo dado de tamaños de pantalla. Para ejemplo, .hidden-sm-down.hidden-xl-up muestra el elemento solo en vistas medianas y grandes. Usando múltiples clases .hidden-*-up o múltiples clases .hidden-*-down son redundantes y sin sentido.
  • Estas clases no intentan acomodar casos menos comunes donde la visibilidad de un elemento no se puede expresar como un solo contiguo rango de tamaños de punto de interrupción de la ventana; en su lugar, deberá usar CSS personalizado en tales casos.

Http://v4-alpha.getbootstrap.com/layout/responsive-utilities /

 0
Author: matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-16 01:35:34

En caso de que su número de col- cajas en una fila es DINÁMICO y diferente para la resolución como es en mi caso que basado en sus clases col- hacer el operador de módulo. Tome el ejemplo de abajo ejemplo.

<div class="row">
    <?php $elementCounter = 0; ?>
    <?php foreach ( $this->programs as $program ): ?>
        <div class="col-xs-6 col-sm-3"> DATA </div>
        <?php $elementCounter++; ?>
        <?php if( $elementCounter % 4 == 0 ): ?>
            <div class="clearfix hidden-xs"></div>
        <?php elseif( $elementCounter % 2 == 0 ): ?>
            <div class="clearfix visible-xs"></div>
        <?php endif; ?>
    <?php endforeach; ?>
</div>

Col-xs-6 significa que tiene 2 cajas en una fila para dispositivos extra pequeños. así que para ello he añadido que $elementCounter % 2 == 0 condición por lo que es cierto para cada segundo elemento ( DESPUÉS ). y se agregó clearfix con visible-xs para que no tenga efecto en el escritorio u otro resolucion.

Col-sm-3 significa 4 cajas en fila para dispositivos pequeños y superiores, por lo que en ese caso he agregado $elementCounter % 4 == 0 y con eso hidden-xs para que clearfix esté oculto para dispositivos xs y sea visible para dispositivos pequeños y superiores. De esta manera se puede modificar en consecuencia.

 0
Author: Shahzaib Hayat Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-16 13:42:14