Как я могу изменить порядок своих div, используя только CSS?

Учитывая шаблон, в котором HTML не может быть изменен из-за других требований, как можно отобразить (переставить) div над другим div, если они не находятся в таком порядке в HTML? Оба div содержат данные, различающиеся по высоте и ширине.

<div id = "wrapper">
    <div id = "firstDiv">
        Content to be below in this situation
    </div>
    <div id = "secondDiv">
        Content to be above in this situation
    </div>
</div>
Other elements

Надеюсь, очевидно, что желаемый результат:

Content to be above in this situation
Content to be below in this situation
Other elements

Когда размеры фиксированы, их легко разместить там, где это необходимо, но мне нужны некоторые идеи, когда содержимое является переменным. Ради этого сценария, пожалуйста, примите во внимание ширину 100% для обоих.

Я специально ищу решение только для CSS (и его, вероятно, придется встретить с другими решениями, если это не сработает).

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

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
285
0
409 613
25

Ответы 25

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

#wrapper { position: relative; margin-top: 4em; }
#firstDiv { position: absolute; top: 0; width: 100%; }
#secondDiv { position: absolute; bottom: 0; width: 100%; }

"Margin-top: 4em" - особенно неприятный момент: это поле необходимо отрегулировать в соответствии с объемом содержимого в firstDiv. В зависимости от ваших конкретных требований это может быть возможно, но я все равно надеюсь, что кто-то сможет использовать это в качестве надежного решения.

Комментарий Эрика о JavaScript, вероятно, следует рассмотреть.

Если вы знаете или можете установить размер верхнего элемента, вы можете использовать

position : absolute;

В вашем css и укажите позицию div.

в противном случае javascript кажется единственным выходом:

fd = document.getElementById( 'firstDiv' );
sd = document.getElementById( 'secondDiv' );
fd.parentNode.removeChild( fd );
sd.parentNode.insertAfter( fd, sd );

или что-то подобное.

изменить: я только что нашел это, что может быть полезно: документ w3 css3 переместить в

Как уже говорили другие, это не то, чем вы хотели бы заниматься в CSS. Вы можете обмануть его абсолютным позиционированием и странными полями, но это просто не надежное решение. Лучшим вариантом в вашем случае будет переход на javascript. В jQuery это очень простая задача:

$('#secondDiv').insertBefore('#firstDiv');

или в более общем смысле:

$('.swapMe').each(function(i, el) {
    $(el).insertBefore($(el).prev());
});

Иногда лучше уступить более сильным. В этом случае это выглядит более элегантно, и вы полностью контролируете ситуацию. По этой причине я считаю, что это аккуратнее и лучше.

landed 08.07.2016 19:35

Вот решение:

<style>
#firstDiv {
    position:absolute; top:100%;
}
#wrapper {
    position:relative; 
}

Но я подозреваю, что у вас есть контент, который следует за оболочкой div ...

Да ... стараюсь не слишком многословно описывать ситуацию, но есть и другие элементы. Хорошее предложение, хотя с учетом ограниченного HTML-кода - может сработать для кого-то другого.

devmode 21.10.2008 04:13

Отрицательные верхние поля могут достичь этого эффекта, но их нужно будет настраивать для каждой страницы. Например, эта разметка ...

<div class = "product">
<h2>Greatest Product Ever</h2>
<p class = "desc">This paragraph appears in the source code directly after the heading and will appear in the search results.</p>
<p class = "sidenote">Note: This information appears in HTML after the product description appearing below.</p>
</div>

... и этот CSS ...

.product { width: 400px; }
.desc { margin-top: 5em; }
.sidenote { margin-top: -7em; }

... позволит вытянуть второй абзац над первым.

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

CSS действительно не следует использовать для реструктуризации бэкэнда HTML. Однако это возможно, если вы знаете высоту обоих задействованных элементов и чувствуете себя хакерским. Кроме того, при переходе между блоками div выбор текста будет неправильным, но это потому, что порядок HTML и CSS противоположен.

#firstDiv { position: relative; top: YYYpx; height: XXXpx; }
#secondDiv { position: relative; top: -XXXpx; height: YYYpx; }

Где XXX и YYY - высота firstDiv и secondDiv соответственно. Это будет работать с конечными элементами, в отличие от верхнего ответа.

Тогда какой должен «использовать для реструктуризации HTML», когда, скажем, помещая контент перед навигацией для программы чтения с экрана?

Damian Yerrick 19.04.2018 22:35

Абсолютно невозможно достичь желаемого только с помощью CSS, поддерживая предварительные пользовательские агенты Flexbox (в основном старый IE) - пока не:

  1. Вы знаете точную визуализированную высоту каждого элемента (если да, вы можете абсолютно позиционировать контент). Если вы имеете дело с динамически генерируемым контентом, вам не повезло.
  2. Вы знаете точное количество этих элементов. Опять же, если вам нужно сделать это для нескольких блоков контента, которые генерируются динамически, вам не повезло, особенно если их больше трех или около того.

Если вышесказанное верно, вы можете делать то, что хотите, абсолютно позиционируя элементы -

#wrapper { position: relative; }
#firstDiv { position: absolute; height: 100px; top: 110px; }
#secondDiv { position: absolute; height: 100px; top: 0; }

Опять же, если вы не знаете, какая высота нужна хотя бы для #firstDiv, вы не сможете делать то, что хотите, только с помощью CSS. Если какой-либо из этих материалов является динамическим, вам придется использовать javascript.

Хорошо, я тоже сначала проголосовал против, но вернул. Однако одно уточнение все еще связано с условиями: вы делаете нет, нужно знать количество элементов точный для изменения порядка, пока не это число> 3 (см. ответ, выигравший награду). Это особенно актуально для OP, который хотел поменять местами только 2 элемента.

Sz. 16.03.2018 14:48

Только для решения CSS 1. Либо высота обертки должна быть фиксированной, либо 2. Высота второго div должна быть зафиксирована

Это никак не отвечает на заданный вопрос. Это не более чем комментарий, намекающий на возможное решение.

cimmanon 21.03.2016 18:50

В вашем CSS поместите первый div влево или вправо. Переместите второй div влево или вправо так же, как и первый. Примените clear: left или right так же, как два вышеупомянутых div для второго div.

Например:

#firstDiv {
    float: left;
}

#secondDiv {
    float: left;
    clear: left;
}

<div class = "container"> <div id = "secondDiv"> <p> ... </p> </div> <div id = "firstDiv"> <p> ... </p> </ div> </div>

Vestel 12.10.2012 16:58

В моем случае float: right; ясно: слева; работает отлично

user956584 22.06.2014 19:59

использование clear - отличный способ, но обратите внимание, что вы должны перемещать свой элемент в правильном направлении, а также вы должны перемещать все другие элементы, чтобы сделать это правильно. Vestel, вам следует использовать следующие стили: <style> #secondDiv, #firstDiv {float: left; } #firstDiv {clear: left; } </style> <div class = "container"> контейнер <div id = "secondDiv"> <p> secondDiv </p> </div> <div id = "firstDiv"> <p> firstDiv </p> </div> </div>

Reza Amya 27.07.2014 00:18

Или установите абсолютное положение для элемента и отработайте поля, объявив их от края страницы, а не от края объекта. Используйте%, поскольку он больше подходит для других размеров экрана и т. д. Вот как я решил проблему ... Спасибо, надеюсь, это то, что вы ищете ...

У меня есть гораздо лучший код, сделанный мной, он такой большой, просто чтобы показать обе вещи ... создать таблицу 4x4 и выровнять по вертикали больше, чем одну ячейку.

Он не использует никаких взломов IE, никакого vertical-align: middle; совсем...

Он не используется для вертикального центрирования display-table, display: table-rom; дисплей: таблица-ячейка;

Он использует уловку контейнера, который имеет два блока div, один из которых скрыт (положение неверно, но делает родительский элемент с правильным размером переменной), один видимый сразу после скрытого, но с верхним: -50%; так что он движется в правильное положение.

См. Классы div, которые делают трюк: BloqueTipoContenedor BloqueTipoContenedor_VerticalmenteCentrado BloqueTipoContenido_VerticalmenteCentrado_Oculto BloqueTipoContenido_VerticalmenteCentrado_Visible

Пожалуйста, извините за использование испанского в названиях классов (это потому, что я говорю по-испански, и это настолько сложно, что если я использую английский, я потеряюсь).

Полный код:

<?xml version = "1.0" encoding = "iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1" />
<meta http-equiv = "Content-Language" content = "en" />
<meta name = "language" content = "en" />
<title>Vertical Centering in CSS2 - Example (IE, FF & Chrome tested) - This is so tricky!!!</title>
<style type = "text/css">
 html,body{
  margin:0px;
  padding:0px;
  width:100%;
  height:100%;
 }
 div.BloqueTipoTabla{
  display:table;margin:0px;border:0px;padding:0px;width:100%;height:100%;
 }
 div.BloqueTipoFila_AltoAjustadoAlContenido{
  display:table-row;margin:0px;border:0px;padding:0px;width:100%;height:auto;
 }
 div.BloqueTipoFila_AltoRestante{
  display:table-row;margin:0px;border:0px;padding:0px;width:100%;height:100%;
 }
 div.BloqueTipoCelda_AjustadoAlContenido{
  display:table-cell;margin:0px;border:0px;padding:0px;width:auto;height:auto;
 }
 div.BloqueTipoCelda_RestanteAncho{
  display:table-cell;margin:0px;border:0px;padding:0px;width:100%;height:auto;
 }
 div.BloqueTipoCelda_RestanteAlto{
  display:table-cell;margin:0px;border:0px;padding:0px;width:auto;height:100%;
 }
 div.BloqueTipoCelda_RestanteAnchoAlto{
  display:table-cell;margin:0px;border:0px;padding:0px;width:100%;height:100%;
 }
 div.BloqueTipoContenedor{
  display:block;margin:0px;border:0px;padding:0px;width:100%;height:100%;position:relative;
 }
 div.BloqueTipoContenedor_VerticalmenteCentrado{
  display:block;margin:0px;border:0px;padding:0px;width:100%;height:auto;position:relative;top:50%;
 }
 div.BloqueTipoContenido_VerticalmenteCentrado_Oculto{
  display:block;margin:0px;border:0px;padding:0px;width:100%;height:auto;visibility:hidden;position:relative;top:50%;
 }
 div.BloqueTipoContenido_VerticalmenteCentrado_Visible{
  display:block;margin:0px;border:0px;padding:0px;width:100%;height:auto;visibility:visible;position:absolute;top:-50%;
 }
</style>
</head>
<body>
<h1>Vertical Centering in CSS2 - Example<br />(IE, FF & Chrome tested)<br />This is so tricky!!!</h1>
<div class = "BloqueTipoTabla" style = "margin:0px 0px 0px 25px;width:75%;height:66%;border:1px solid blue;">
 <div class = "BloqueTipoFila_AltoAjustadoAlContenido">
  <div class = "BloqueTipoCelda_AjustadoAlContenido">
   [1,1]
  </div>
  <div class = "BloqueTipoCelda_AjustadoAlContenido">
   [1,2]
  </div>
  <div class = "BloqueTipoCelda_RestanteAncho">
   [1,3]
  </div>
  <div class = "BloqueTipoCelda_AjustadoAlContenido">
   [1,4]
  </div>
 </div>
 <div class = "BloqueTipoFila_AltoAjustadoAlContenido">
  <div class = "BloqueTipoCelda_AjustadoAlContenido">
   [2,1]
  </div>
  <div class = "BloqueTipoCelda_AjustadoAlContenido">
   [2,2]
  </div>
  <div class = "BloqueTipoCelda_RestanteAncho">
   [2,3]
  </div>
  <div class = "BloqueTipoCelda_AjustadoAlContenido">
   [2,4]
  </div>
</div>
 <div class = "BloqueTipoFila_AltoRestante">
  <div class = "BloqueTipoCelda_RestanteAlto">
   <div class = "BloqueTipoContenedor" style = "border:1px solid lime;">
    <div class = "BloqueTipoContenedor_VerticalmenteCentrado" style = "border:1px dotted red;">
     <div class = "BloqueTipoContenido_VerticalmenteCentrado_Oculto">
     The cell [3,1]
     <br />
     *&nbsp;*&nbsp;*&nbsp;*
     <br />
     *&nbsp;*&nbsp;*&nbsp;*
     <br />
     *&nbsp;*&nbsp;*&nbsp;*
     <br />
     Now&nbsp;is&nbsp;the&nbsp;highest&nbsp;one
     </div>
     <div class = "BloqueTipoContenido_VerticalmenteCentrado_Visible" style = "border:1px dotted blue;">
     The cell [3,1]
     <br />
     *&nbsp;*&nbsp;*&nbsp;*
     <br />
     *&nbsp;*&nbsp;*&nbsp;*
     <br />
     *&nbsp;*&nbsp;*&nbsp;*
     <br />
     Now&nbsp;is&nbsp;the&nbsp;highest&nbsp;one
     </div>
    </div>
   </div>
  </div>
  <div class = "BloqueTipoCelda_RestanteAlto">
   <div class = "BloqueTipoContenedor" style = "border:1px solid lime;">
    <div class = "BloqueTipoContenedor_VerticalmenteCentrado" style = "border:1px dotted red;">
     <div class = "BloqueTipoContenido_VerticalmenteCentrado_Oculto">
      This&nbsp;is<br />cell&nbsp;[3,2]
     </div>
     <div class = "BloqueTipoContenido_VerticalmenteCentrado_Visible" style = "border:1px dotted blue;">
      This&nbsp;is<br />cell&nbsp;[3,2]
     </div>
    </div>
   </div>
  </div>
  <div class = "BloqueTipoCelda_RestanteAnchoAlto">
   <div class = "BloqueTipoContenedor" style = "border:1px solid lime;">
    <div class = "BloqueTipoContenedor_VerticalmenteCentrado" style = "border:1px dotted red;">
     <div class = "BloqueTipoContenido_VerticalmenteCentrado_Oculto">
      This is cell [3,3]
      <br/>
      It is duplicated on source to make the trick to know its variable height
      <br />
      First copy is hidden and second copy is visible
      <br/>
      Other cells of this row are not correctly aligned only on IE!!!
     </div>
     <div class = "BloqueTipoContenido_VerticalmenteCentrado_Visible" style = "border:1px dotted blue;">
      This is cell [3,3]
      <br/>
      It is duplicated on source to make the trick to know its variable height
      <br />
      First copy is hidden and second copy is visible
      <br/>
      Other cells of this row are not correctly aligned only on IE!!!
     </div>
    </div>
   </div>
  </div>
  <div class = "BloqueTipoCelda_RestanteAlto">
   <div class = "BloqueTipoContenedor" style = "border:1px solid lime;">
    <div class = "BloqueTipoContenedor_VerticalmenteCentrado" style = "border:1px dotted red;">
     <div class = "BloqueTipoContenido_VerticalmenteCentrado_Oculto">
      This&nbsp;other is<br />the cell&nbsp;[3,4]
     </div>
     <div class = "BloqueTipoContenido_VerticalmenteCentrado_Visible" style = "border:1px dotted blue;">
      This&nbsp;other is<br />the cell&nbsp;[3,4]
     </div>
    </div>
   </div>
  </div>
 </div>
 <div class = "BloqueTipoFila_AltoAjustadoAlContenido">
  <div class = "BloqueTipoCelda_AjustadoAlContenido">
   [4,1]
  </div>
  <div class = "BloqueTipoCelda_AjustadoAlContenido">
   [4,2]
  </div>
  <div class = "BloqueTipoCelda_RestanteAncho">
   [4,3]
  </div>
  <div class = "BloqueTipoCelda_AjustadoAlContenido">
   [4,4]
  </div>
 </div>
</div>
</body>
</html>

Это решение использует только CSS и работает с переменным содержимым

#wrapper   { display: table; }
#firstDiv  { display: table-footer-group; }
#secondDiv { display: table-header-group; }

Хороший! Не работает для IE8 или ниже, но вы можете использовать условный скрипт для этих браузеров ...

Stuart Wakefield 12.10.2012 01:53

Это правда, что не работает для IE7, но у меня нет проблем с IE8

Jordi 15.10.2012 13:07

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

morphles 10.04.2014 10:14

Следует отметить, что с поплавками это не работает. Вы должны установить float: none; если у вас уже есть поплавок.

Thomas 14.08.2014 21:22

Отличный трюк. Одна вещь, которую я обнаружил, что не работает, - это закругленные углы или возможность указать ширину. Как только я показываю первое погружение "table-footer-group", я теряю способность делать это.

Matt James 30.12.2014 22:11

Однако у меня тоже сработало, мне нужно было добавить width:100%; в класс-оболочку.

NotJay 17.11.2015 00:28

Примечание: img { max-width: 100% } не будет работать внутри переупорядоченных элементов.

Jonas Äppelgran 25.02.2016 13:34

Любая очевидная причина, по которой это не работает для меня сразу при изменении размера окна с использованием экрана @media и (max-width: 480 пикселей)? Кажется, это работает, только если я обновлю браузер с меньшей шириной.

juliusbangert 29.02.2016 18:55

С этими правилами firstDiv и secondDiv больше не будут подчиняться width: 100%; (хотя их родительский элемент не сжался).

aderchox 16.02.2020 20:59

Это легко с css, просто используйте свойство display:block и z-index

Вот пример:

HTML:

<body>
    <div class = "wrapper">

        <div class = "header">
            header
        </div>

        <div class = "content">
            content
        </div>
    </div>
</body>

CSS:

.wrapper
{
    [...]
}

.header
{
    [...]
    z-index:9001;
    display:block;
    [...]
}

.content
{
    [...]
    z-index:9000;
    [...]
}

Обновлено: хорошо установить background-color на div-s, чтобы все правильно видеть.

Я искал способ изменить порядок div только для мобильной версии, чтобы тогда я мог красиво оформить его. Благодаря ответу nickf мне удалось сделать этот фрагмент кода, который хорошо работал для того, что я хотел, поэтому я решил поделиться им с вами, ребята:

//  changing the order of the sidebar so it goes after the content for mobile versions
jQuery(window).resize(function(){
    if ( jQuery(window).width() < 480 )
    {
        jQuery('#main-content').insertBefore('#sidebar');
    }
    if ( jQuery(window).width() > 480 )
    {
        jQuery('#sidebar').insertBefore('#main-content');
    }
    jQuery(window).height(); // New height
    jQuery(window).width(); // New width
});

Это можно сделать с помощью Flexbox.

Создайте контейнер, который применяет как дисплей: гибкий, так и гибкий поток: обратный столбец.

/* -- Where the Magic Happens -- */

.container {
  
  /* Setup Flexbox */
  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;

  /* Reverse Column Order */
  -webkit-flex-flow: column-reverse;
  flex-flow: column-reverse;

}


/* -- Styling Only -- */

.container > div {
  background: red;
  color: white;
  padding: 10px;
}

.container > div:last-of-type {
  background: blue;
}
<div class = "container">
  
  <div class = "first">

     first

  </div>
  
  <div class = "second">

    second

  </div>
  
</div>

Источники:

.move-wrap {
    display: table;
    table-layout: fixed; // prevent some responsive bugs
    width: 100%; // set a width if u like
    /* TODO: js-fallback IE7 if u like ms */
}

.move-down {
    display: table-footer-group;
}

.move-up {
    display: table-header-group;
}

Это решение было опубликовано на 3 года раньше вашего: stackoverflow.com/a/12069537/1652962

cimmanon 21.03.2016 18:59

Решение только для CSS (работает для IE10 +) - используйте свойство Flexbox order:

Демо: http://jsfiddle.net/hqya7q6o/596/

#flex { display: flex; flex-direction: column; }
#a { order: 2; }
#b { order: 1; }
#c { order: 3; }
<div id = "flex">
   <div id = "a">A</div>
   <div id = "b">B</div>
   <div id = "c">C</div>
</div>

Более подробная информация: https://developer.mozilla.org/en-US/docs/Web/CSS/order

Заказ работает здесь. Но дети не получают 100% ширины. Вместо этого они делят свои места в одном ряду. Есть идеи, как с помощью этого метода можно использовать 100% ширину для каждого дочернего элемента?

aniskhan001 12.06.2016 20:58
#flex { display: flex; flex-direction: column; } отобразит строки шириной 100%. jsfiddle.net/2fcj8s9e
Justin 13.06.2016 17:22

Это можно сделать с помощью transform с более широкой поддержкой браузера.

Finesse 22.09.2016 04:26

Не поддерживается на iPhone 6s и ниже.

AntonAL 28.03.2018 22:44

Это решение позволяет вам выбрать любой желаемый порядок для любого количества div. Это должно быть общепринятым решением ИМО.

mareoraft 17.08.2018 00:49

Это чистое решение.

Sleek Geek 02.03.2021 05:51

У меня есть простой способ сделать это.

<!--  HTML  -->

<div class = "wrapper">

    <div class = "sm-hide">This content hides when at your layouts chosen breaking point.</div>

    <div>Content that stays in place</div>

    <div class = "sm-show">This content is set to show at your layouts chosen breaking point.</div>

</div>

<!--  CSS  -->

    .sm-hide {display:block;}
    .sm-show {display:none;}

@media (max-width:598px) {
    .sm-hide {display:none;}
    .sm-show {display:block;}
}

Ваше решение вполне может решить проблему, но не могли бы вы объяснить, почему и как это происходит. На S / O есть куча новичков, и они могут чему-то научиться на вашем опыте. То, что для вас может быть очевидным решением, для них может быть не так.

Taryn East 29.01.2015 07:50

Блоки кода сами по себе обычно не являются полезными ответами и, скорее всего, вызовут отрицательные голоса. Пожалуйста, объяснять, что делает показываемое вами решение, и почему как этот код отвечает на вопрос.

j_s_stack 29.01.2015 08:04

Это можно сделать только с помощью CSS!

Пожалуйста, проверьте мой ответ на этот аналогичный вопрос:

https://stackoverflow.com/a/25462829/1077230

Я не хочу дважды публиковать свой ответ, но суть в том, что родительский элемент должен стать элементом flexbox. Например:

(здесь используется только префикс поставщика webkit.)

#main {
    display: -webkit-box;
    display: -webkit-flex;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-flex-direction: column;
    flex-direction: column;
    -webkit-box-align: start;
    -webkit-align-items: flex-start;
    align-items: flex-start;
}

Затем поменяйте местами div, указав их порядок с помощью:

#main > div#one{
    -webkit-box-ordinal-group: 2;
    -moz-box-ordinal-group: 2;
    -ms-flex-order: 2;
    -webkit-order: 2;
    order: 2;
    overflow:visible;
}

#main > div#two{
    -webkit-box-ordinal-group: 1;
    -moz-box-ordinal-group: 1;
    -ms-flex-order: 1;
    -webkit-order: 1;
    order: 1;
}

С помощью модуля макета CSS3 flexbox вы можете заказывать блоки div.

#wrapper {
  display: flex;
  flex-direction: column;
}
#firstDiv {
  order: 2;
}

<div id = "wrapper">
  <div id = "firstDiv">
    Content1
  </div>
  <div id = "secondDiv">
    Content2
  </div>
</div>

Я рекомендую использовать order: -1, если вы хотите сделать 1 элемент из множества «липких» сверху :)

jave.web 27.10.2020 12:48

Просто используйте flex для родительского div, указав display: flex и flex-direction : column. Затем используйте порядок, чтобы определить, какой из дочерних div идет первым.

Как вы думаете, почему этот ответ на 7-летний вопрос лучше тех, что уже были опубликованы? Если вы хотите участвовать в SO, пожалуйста, найдите вопросы без (хороших) ответов и попытайтесь ответить на них так, чтобы это было полезно для всех посетителей.

Marki555 17.08.2016 22:24

Решение с большей поддержкой браузера, чем flexbox (работает в IE≥9):

#wrapper {
  -webkit-transform: scaleY(-1);
  -ms-transform: scaleY(-1);
  transform: scaleY(-1);
}
#wrapper > * {
  -webkit-transform: scaleY(-1);
  -ms-transform: scaleY(-1);
  transform: scaleY(-1);
}
<div id = "wrapper">
    <div id = "firstDiv">
        Content to be below in this situation
    </div>
    <div id = "secondDiv">
        Content to be above in this situation
    </div>
</div>
Other elements

В отличие от решения display: table; это решение работает, когда .wrapper имеет любое количество дочерних элементов.

Что, если div содержит изображение>?

Ramji Seetharaman 14.01.2018 20:02

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

<div style = "height: 500px; width: 500px;">

<div class = "bottom" style = "height: 250px; width: 500px; background: red; margin-top: 250px;"></div>

<div class = "top" style = "height: 250px; width: 500px; background: blue; margin-top: -500px;"></div>

Если вы просто используете css, вы можете использовать flex.

.price {
    display: flex;
    align-items: center;
    justify-content: center;

    flex-direction: row-reverse; //revert horizontally
    //flex-direction: column-reverse; revert vertically
}
<div class = "price">
      <div>first block</div>
      <div>second block</div>
</div>

Заказ только для мобильных и сохраните родной порядок для рабочего стола:

// HTML

<div>
  <div class = "gridInverseMobile1">First</div>
  <div class = "gridInverseMobile1">Second</div>
</div>

// css

@media only screen and (max-width: 960px) {
  .gridInverseMobile1 {
    order: 2;
    -webkit-order: 2;
  }
  .gridInverseMobile2 {
    order: 1;
    -webkit-order: 1;
  }
}

Результат:

Desktop: First | Second
Mobile: Second | First

источник: https://www.w3schools.com/cssref/css3_pr_order.asp

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