Bootstrap 3 - верхняя граница столбца на небольших экранах

У меня есть строка с X возможными столбцами.

<div class="container">
    <div class="row">
        <div class="col-lg-3 col-sm-4 col-xs-6">content</div>
        <div class="col-lg-3 col-sm-4 col-xs-6">content</div>
        <div class="col-lg-3 col-sm-4 col-xs-6">content</div>
        <div class="col-lg-3 col-sm-4 col-xs-6">content</div>
        <div class="col-lg-3 col-sm-4 col-xs-6">content</div>
        <div class="col-lg-3 col-sm-4 col-xs-6">content</div>
        <!-- ... and so on ... -->
    </div>
</div>

Теперь я хотел бы добавить margin-top:20px ко всем маленьким столбцам экрана и тому же маркеру для столбцов большого экрана, если их больше 4, поскольку это приведет к отображению двух "строк" ​​и, следовательно, потребуется некоторое пространство между.

Возможно ли это с использованием только CSS?

Ответы

Ответ 1

Вы можете использовать медиа-запрос для всякой необходимости верхнего поля.

@media (max-width: 767px) {
    .col-xs-6 {
        margin-top:20px;
    }
}

http://www.bootply.com/126007

P.S. - Нет ничего плохого в том, что общая сумма .col-* в .row превышает 12 (т.е.: http://getbootstrap.com/css/#grid-example-mixed). Это просто вызывает обертку. В документах, использующих эту технику, есть несколько примеров. Он обычно не идеален для вложенных строк.

Ответ 2

Мне нужно было что-то похожее, и следующее - это решение, которое я придумал. Документация для будущих читателей (и я)

$res-list: (xs: (0px, 767px), sm: (768px, 991px), md: (992px, 1199px), lg: (1200px, 9999px));
$dir-list: (t: top, r: right, b: bottom, l: left);

@for $r from 1 through 10{
  @each $res-abbr, $res-vals in $res-list{
    @media (min-width: nth($res-vals, 1)) and (max-width: nth($res-vals, 2)) {
      @each $dir-abbr, $dir-name in $dir-list{
        $x: $r * 5;
        .m#{$dir-abbr}-#{$res-abbr}-#{$x}{
          margin-#{$dir-name}: #{$x}px;
        }
        .m#{$dir-abbr}-#{$res-abbr}-#{$r}p{
          margin-#{$dir-name}: #{$r}unquote('%');
        }
      }
    }
  }
}

Этот код SASS генерирует классы по строкам следующего

@media (min-width: 0px) and (max-width: 767px) {
    .mt-xs-5 { margin-top: 5px; }
    .mt-xs-1p { margin-top: 1%; }
    .mr-xs-5 { margin-right: 5px; }
    .mr-xs-1p { margin-right: 1%; }
    .mb-xs-5 { margin-bottom: 5px; }
    .mb-xs-1p { margin-bottom: 1%; }
    .ml-xs-5 { margin-left: 5px; }
    .ml-xs-1p { margin-left: 1%; } 
}

Поэтому редактор содержимого может использовать .mt-xs-10 для применения margin-top: 10px к заданному элементу на экране extra-small.

Я надеюсь, что это поможет кому-то.

Ответ 3

Это старый пост, но ниже - это чистое решение.

[class*="col-"] {
  margin-bottom: 15px;
}

Это хорошо работает для некоторых ситуаций, но при добавлении лишнего, лишнего поля, он не нужен. Чтобы решить эту проблему, мы можем создать новый класс css, который применяет верхний край к столбцам, когда они будут сложены. Я создаю класс с именем .row-grid

.row.row-grid [class*="col-"] + [class*="col-"] {
  margin-top: 15px;
}

@media (min-width: 1200px) {
  .row.row-grid [class*="col-lg-"] + [class*="col-lg-"] {
    margin-top: 0;
  }
}
@media (min-width: 992px) {
  .row.row-grid [class*="col-md-"] + [class*="col-md-"] {
    margin-top: 0;
  }
}
@media (min-width: 768px) {
  .row.row-grid [class*="col-sm-"] + [class*="col-sm-"] {
    margin-top: 0;
  }
}