Может ли Bootstrap складывать 1-й и 3-й столбцы рядом со 2-м на рабочем столе?

У меня есть довольно простой макет, который я пытаюсь создать на мобильных устройствах:

[A]
[B]
[C]

Но на рабочем столе я пытаюсь сделать [B] больше и переместиться в правую сторону, в то время как A и C складываются в левую.

[ A ][ B ]
[ C ][ B ]

Может ли Bootstrap 4 это сделать, или мне нужно написать собственный CSS-код сетки?

Обновление: вот пример с основным макетом, который у меня есть прямо сейчас:

.a { background-color: red; }
.b { background-color: blue; }
.c { background-color: green; }
img {max-width: 100%; }
<link href = "https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel = "stylesheet" />

<div class = "container">
  <div class = "row">
    <div class = "a col-md-5">
      A
    </div>
    <div class = "b col-md-7">
      <img src = "https://upload.wikimedia.org/wikipedia/commons/8/8f/Example_image.svg" alt = "B (should be right of A and C on desktop)" />
    </div>
    <div class = "c col-md-5">
      <p>C (should be below A and left of B on desktop)</p>
    </div>
  </div>
</div>

https://codepen.io/nfriedly/pen/rqMLBw

Обновление 2: вот несколько изображений, чтобы прояснить ситуацию. ([A] красный, [B] синий (с изображением), [C] зеленый.)

Текущий макет:

Может ли Bootstrap складывать 1-й и 3-й столбцы рядом со 2-м на рабочем столе?

Желаемый макет:

Может ли Bootstrap складывать 1-й и 3-й столбцы рядом со 2-м на рабочем столе?

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
3
0
57
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете сделать [B] абсолютным на рабочем столе и оставить его прилипать к правой стороне контейнера. Используйте этот CSS:

@media (min-width: 600px) {
  .container {position: relative;}
  .b {position: absolute; right: 0; top: 0;}
}

Обратите внимание, что 600px должен быть равен точке останова на рабочем столе.

Вот рабочая версия.

Я пробовал это, но [C] оказывается поверх [B]. Я сказал [C], что это собственный .row, который решил эту проблему, но что-то странное происходит с шириной и положением [B], похоже, это ширина всего .container и слишком далеко вправо, несмотря на то, что справа: 0.

Nathan Friedly 06.10.2018 00:50

Я также добавил к вопросу реальные и ожидаемые изображения, чтобы прояснить его.

Nathan Friedly 06.10.2018 01:15

Я вижу, это работает. Я надеялся избежать абсолютного позиционирования (и! Important), но это сработает, если я не смогу придумать ничего лучше.

Nathan Friedly 06.10.2018 01:55

Если вы используете Bootstrap 4, вы можете упорядочить столбец строки по своему усмотрению, используя свойство «порядок». Например, если вы хотите, чтобы столбец C располагался перед столбцом B, вы можете просто сделать это:

C{ order : 1; }
B{ order : 2;}

А столбец А уже имеет порядок: 0.

Похоже, это не дает желаемого эффекта, если только я вас не понял. Вот пример: codepen.io/nfriedly/pen/dgpXPg

Nathan Friedly 06.10.2018 01:05

Я также добавил к вопросу реальные и ожидаемые изображения, чтобы прояснить его.

Nathan Friedly 06.10.2018 01:15

Вы можете проверить классы упорядочивания, найденные в документация начальной загрузки (переход к изменению порядка).

Вы также можете использовать его с настройками размера экрана, чтобы он следовал этому порядку только при просмотре страницы на экране заданного размера. Это можно сделать, добавив xs, sm, md или lg.

<div class=“col-sm-3 order-md-3”>
    <p> sample </p>
 </div>

Вот такой working example

С другой стороны, ширину столбца также можно увеличить, как this.

Если это не решит вашу проблему. Я по крайней мере надеюсь, что это даст вам представление о том, как это сделать, используя только бутстрап :)

Я не совсем уверен, как это использовать для получения желаемого результата. Я обновил вопрос, добавив образец кода и пару изображений для текущего и желаемого макета.

Nathan Friedly 06.10.2018 01:58

Привет, @NathanFriedly, я добавил в свой ответ рабочий пример :)

C.RaysOfTheSun 06.10.2018 06:46
Ответ принят как подходящий

В конечном итоге кажется, что ответ - «нет, макет Bootstrap на основе flexbox не может этого сделать».

Как и JoostS показал, макет может быть выполнен с использованием position и !important, но это не совсем то, что делает бутстрап. Это больше похоже на то, что бутстрапу заставляют подчиняться, пока я борюсь со мной до самого конца.

Итак, я думаю, что собираюсь полностью отказаться от сетки начальной загрузки и переключиться на что-нибудь, использующее display: grid:

.a { background-color: red; }
.b { background-color: blue; }
.c { background-color: green; }
img {max-width: 100%; }

@media (min-width: 768px) {
  .grid-container {
    border: 1px solid black;
    display: grid;
  }
  .b {
    grid-column: 2;
    grid-row: 1 / span 2;
  }
}
<link href = "https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel = "stylesheet"/>

<div class = "container">
  <div class = "grid-container">
    <div class = "a">
      A
    </div>
    <div class = "b">
      <img src = "https://upload.wikimedia.org/wikipedia/commons/8/8f/Example_image.svg" alt = "B (should be right of A and C on desktop)" />
    </div>
    <div class = "c">
      <p>C (should be below A and left of B on desktop)</p>
    </div>
  </div>
</div>

https://codepen.io/nfriedly/pen/bmweKB?editors=1100

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

Мне нравится это решение. Я смеялся над тем, что «боролся со мной на всем пути вниз», потому что я предложил только две строки CSS в одном медиа-запросе, но я должен признать, что это не метод Bootstrap.

JoostS 06.10.2018 20:28

Хорошо, может быть, я был драматичным немного;)

Nathan Friedly 07.10.2018 03:20

Другие вопросы по теме