Bootstrap, левый для небольших устройств

Я создаю сайт в Bootstrap 3. Есть ли способ заставить элемент использовать класс pull-left на небольших устройствах и использовать pull-right на больших?

Что-то вроде: pull-left-sm pull-right-lg.

Мне удалось сделать это с помощью jquery, уловив изменение размера окна. Есть ли другой способ? Pref без дублирования кода в скрытом x pull-left. Или теперь считается более приемлемым дублировать код/контент при переходе на адаптивный дизайн?


person Christoffer Eklund    schedule 20.08.2013    source источник
comment
Дубликат stackoverflow.com/q/19404861/89818 с полным готовым решением здесь: stackoverflow.com/a/41731135/89818   -  person caw    schedule 19.01.2017


Ответы (7)


Вы можете использовать CSS Media Queries.

основное использование будет таким; если вы хотите плавать слева под устройствами шириной 500 пикселей, то

@media (max-width: 500px) {
 .your_class {
    float: left;
  }
}

 @media (min-width: 501px) {
 .your_class {
    float: right;
  }
}
person palerdot    schedule 20.08.2013
comment
Это сработало для меня, но с начальной загрузкой 3 я изменил 500px и 501px на 767px и 768px. - person AJ.; 01.11.2013
comment
Bootstrap 3 включает нужные классы: используйте порядок столбцов. Например. col-md-9 col-md-pull-3 col-lg-8 col-lg-push-4. getbootstrap.com/css/#grid-column-ordering - person ToolmakerSteve; 23.04.2016
comment
это не будет работать в начальной загрузке, потому что начальная загрузка использует !important - person Anthony Kal; 09.07.2017

Просто добавьте это в свой файл SASS:

@media (max-width: $screen-xs-max) {
    .pull-xs-left {
        float: left;
    }
    .pull-xs-right {
        float: right;
    }
}

@media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) {
    .pull-sm-left {
        float: left;
    }
    .pull-sm-right {
        float: right;
    }
}

@media (min-width: $screen-md-min) and (max-width: $screen-md-max) {
    .pull-md-left {
        float: left;
    }
    .pull-md-right {
        float: right;
    }
}

@media (min-width: $screen-lg-min) {
    .pull-lg-left {
        float: left;
    }
    .pull-lg-right {
        float: right;
    }
}

Вставьте фактические значения пикселей для $screen-*, если вы, конечно, используете простой CSS.

HTML:

<div class="pull-md-left pull-lg-left">
    this div is only floated on screen-md and screen-lg
</div>
person Alex    schedule 15.01.2014
comment
@ Алекс, как это можно настроить, чтобы следить за тем, как обрабатываются столбцы? т.е. называя размер экрана, на который вы хотите ориентироваться, и он плавает для этого размера И ВВЕРХ. Не могли бы вы просто удалить настройки максимальной ширины для каждого определения носителя? Я сделал это, но хотел услышать второе мнение, если это лучший метод. - person soycharliente; 30.04.2015
comment
Bootstrap 3 включает нужные классы: используйте порядок столбцов. Например. col-md-9 col-md-pull-3 col-lg-8 col-lg-push-4. getbootstrap.com/css/#grid-column-ordering - person ToolmakerSteve; 23.04.2016
comment
@gtcharlie Да, это способ сделать это. Кроме того, вы можете отказаться от условия @media (max-width: $screen-xs-max) {}, поскольку оно все равно используется по умолчанию. Вы даже можете полностью отказаться от правил для .pull-xs-left и .pull-xs-right, потому что они избыточны, учитывая, что простые .pull-left и .pull-right все еще существуют. - person caw; 19.01.2017

Нет необходимости создавать собственный класс с медиа-запросами. Bootstrap 3 уже имеет плавающий порядок для точек останова мультимедиа в разделе Порядок столбцов.

Синтаксис класса: col-<#grid-size>-(push|pull)-<#cols>, где <#grid-size> — это xs, sm, md или lg, а <#cols> — это расстояние, на которое вы хотите переместить столбец для этого размера сетки. Толкать или тянуть влево или вправо, конечно.

Я использую его все время, так что я знаю, что это работает хорошо.

person Quinn    schedule 28.02.2015
comment
Вот краткий пример: <div class="col-xs-12-pull-left"> - person Ben Downey; 17.03.2016
comment
@BenDowney, но твой образец не работает? .col-xs-push-6 делает left: 50%, это работает для элементов с относительным или абсолютным позиционированием, и, например, если я хочу потянуть влево на рабочем столе, но центрировать на мобильном телефоне, мне все равно нужно transform: translateX(-50%); на внутреннем элементе. Если я правильно понимаю... - person Marko; 05.05.2016

Возможно, вы можете использовать порядок столбцов.

<div class="row">
  <div class="col-md-9 col-md-push-3">.col-md-9 .col-md-push-3</div>
  <div class="col-md-3 col-md-pull-9">.col-md-3 .col-md-pull-9</div>
</div>

Похоже, плавающие столбцы будут добавлены в версию 4, как это сделал @Alex - https://github.com/twbs/bootstrap/issues/13690

person John Magnolia    schedule 06.08.2014

да. Создайте свой собственный стиль. Я не знаю, какой элемент вы пытаетесь перемещать влево/вправо, но создайте файл application.css и создайте для него класс CSS:

/* default, mobile-first styles */
.logo {
    float: left;
}

/* tablets and upwards */
@media (min-width: 768px) {
    .logo {
        float: right;
    }
}

Не бойтесь писать собственный CSS. Bootstrap должен быть именно этим: начальной загрузкой, отправной точкой.

person Martin Bean    schedule 20.08.2013
comment
По какой причине вы выбрали другой ответ, а не мой? - person Martin Bean; 22.08.2013
comment
Нет, нет причин. Они выглядели очень похожими, поэтому я взял первый. Это не меняет того факта, что я по-прежнему очень рад вашему ответу, и если бы я мог выбрать и ваш, я бы так и сделал. Я не имел в виду кого-то не уважать, мои извинения, если я сделал. - person Christoffer Eklund; 05.09.2013
comment
Это решает проблему, но не отвечает в контексте. Конечно, мы можем написать заказ. Но контекст, если вы можете сделать это со стандартными классами начальной загрузки. - person JGallardo; 30.10.2015

Это то, что я использую. изменить @screen-xs-max для других размеров

/* Pull left in mobile resolutions */
@media (max-width: @screen-xs-max) {
    .pull-xs-right {
        float: right !important;
    }
    .pull-xs-left {
        float: left !important;
    }

    .radio-inline.pull-xs-left  + .radio-inline.pull-xs-left ,
    .checkbox-inline.pull-xs-left  + .checkbox-inline.pull-xs-left  {
        margin-left: 0;
    }
    .radio-inline.pull-xs-left, .checkbox-inline.pull-xs-left{
        margin-right: 10px;
    }
}
person aWebDeveloper    schedule 18.06.2014

МЕНЬШЕ версия ответа @Alex

@media (max-width: @screen-xs-max) {
    .pull-xs-left {
        .pull-left();
    }

    .pull-xs-right {
        .pull-right();
    }
}

@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
    .pull-sm-left {
        .pull-left();
    }

    .pull-sm-right {
        .pull-right();
    }
}

@media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
    .pull-md-left {
        .pull-left();
    }

    .pull-md-right {
        .pull-right();
    }
}

@media (min-width: @screen-lg-min) {
    .pull-lg-left {
        .pull-left();
    }

    .pull-lg-right {
        .pull-right();
    }
}
person petrosmm    schedule 14.12.2018