Учитывая шаблон, в котором 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 (и оно, вероятно, придется встретить с другими решениями, если это не удастся).
Есть другие элементы, следующие за этим. Было упомянуто хорошее предложение с учетом ограниченного сценария, который я продемонстрировал, - учитывая, что это может быть лучшим ответом, но я также постараюсь убедиться, что элементы, следующие за этим, не будут затронуты.
img { max-width: 100% }
не будет работать внутри переупорядоченных элементов.Решение только для CSS (работает для IE10 + ) - используйте
order
свойство Flexbox :Демо: http://jsfiddle.net/hqya7q6o/596/
Дополнительная информация: https://developer.mozilla.org/en-US/docs/Web/CSS/order
источник
#flex { display: flex; flex-direction: column; }
отобразит строки шириной 100%. jsfiddle.net/2fcj8s9etransform
с помощью более широкой поддержки браузераКак уже говорили другие, это не то, что вы хотели бы делать в CSS. Вы можете выдумать это с абсолютным позиционированием и странными полями, но это просто не надежное решение. Лучший вариант в вашем случае - обратиться к javascript. В jQuery это очень простая задача:
или более обобщенно:
источник
Это можно сделать с помощью Flexbox.
Создайте контейнер, который применяет оба display: flex и flex-flow: column-reverse .
Источники:
источник
Нет абсолютно никакого способа достичь того, чего вы хотите, только с помощью CSS при поддержке пользовательских агентов pre-flexbox (в основном старых IE ) - если только :
Если вышеприведенное верно, то вы можете делать то, что вы хотите, абсолютно позиционируя элементы -
Опять же, если вы не знаете, что нужно для высоты, по крайней мере, #firstDiv, вы не сможете сделать то, что хотите, только с помощью CSS. Если какой-либо из этих материалов является динамическим, вам придется использовать JavaScript.
источник
Вот решение:
Но я подозреваю, что у вас есть какой-то контент, который следует за div обёртки ...
источник
С модулем макета CSS3 flexbox, вы можете заказать div.
источник
Если вы знаете или можете установить размер для элемента to-be-upper, вы можете использовать
В твоем css и дай divам свою позицию.
в противном случае javascript кажется единственным выходом:
или что-то подобное.
редактировать: я только что нашел это, что может быть полезно: w3 document css3 move-to
источник
Отрицательные верхние поля могут достичь этого эффекта, но они должны быть настроены для каждой страницы. Например, эта разметка ...
... и этот CSS ...
... позволит вам вытащить второй абзац над первым.
Конечно, вам придется вручную настроить свой CSS для различной длины описания, чтобы вступительный абзац подпрыгивал на соответствующую величину, но если у вас ограниченный контроль над другими частями и полный контроль над разметкой и CSS, то это может быть вариантом ,
источник
Ну, с небольшим количеством абсолютного позиционирования и некоторой хитрой настройкой поля, я могу приблизиться, но это не идеально или красиво:
"Margin-top: 4em" - это особенно неприятный бит: это поле необходимо отрегулировать в соответствии с количеством контента в firstDiv. В зависимости от ваших точных требований, это может быть возможно, но я все равно надеюсь, что кто-то сможет использовать это для надежного решения.
Комментарий Эрика о JavaScript, вероятно, следует продолжить.
источник
Это можно сделать только с помощью CSS!
Пожалуйста, проверьте мой ответ на этот похожий вопрос:
https://stackoverflow.com/a/25462829/1077230
Я не хочу дважды публиковать свой ответ, но суть в том, что родитель должен стать элементом flexbox. Например:
(здесь используется только префикс поставщика WebKit.)
Затем поменяйте местами div, указав их порядок:
источник
В вашем CSS, поместите первый div влево или вправо. Переместите второй div слева или справа так же, как первый. Примените
clear: left
или такright
же, как вышеупомянутые два div для второго div.Например:
источник
Если вы просто используете CSS, вы можете использовать Flex.
источник
Я искал способ изменить порядок div'ов только для мобильной версии, чтобы потом я мог красиво его оформить. Благодаря ответу nickf я получил этот кусок кода, который хорошо работал для того, что я хотел, поэтому я хотел поделиться им с вами, ребята:
источник
Решение с большей поддержкой браузера, чем flexbox (работает в IE≥9):
В отличие от
display: table;
решения это решение работает, когда.wrapper
есть какое-то количество детей.источник
Просто используйте flex для родительского div, указав
display: flex
иflex-direction : column
. Затем используйте порядок, чтобы определить, какой из дочерних элементов div стоит первымисточник
CSS действительно не должен использоваться для реструктуризации бэкэнда HTML. Тем не менее, это возможно, если вы знаете высоту обоих элементов и чувствуете себя хакером. Кроме того, выбор текста будет испорчен при переходе между элементами div, но это потому, что порядок HTML и CSS противоположен.
Где XXX и YYY - высоты firstDiv и secondDiv соответственно. Это будет работать с конечными элементами, в отличие от верхнего ответа.
источник
У меня есть намного лучший код, созданный мной, он такой большой, просто чтобы показать обе вещи ... создать таблицу 4х4 и выровнять по вертикали более чем одну ячейку.
Он не использует IE взломать, не выровнять по вертикали: middle; вообще...
Не используется для вертикального центрирования display-table, display: table-rom; отображения: настольные ячейки;
Он использует прием контейнера, который имеет два элемента div, один скрытый (позиция не является правильной, но заставляет родительский элемент иметь правильный размер переменной), один видимый сразу после скрытого, но с верхом: -50%; так что это движущая сила, чтобы исправить положение.
См. Классы div, которые делают трюк
Пожалуйста, извините за использование испанского языка в именах классов (это потому, что я говорю по-испански, и это настолько сложно, что если я использую английский, я заблудился).
Полный код:
источник
Немного опоздал на вечеринку, но вы также можете сделать это:
источник
Или установите абсолютную позицию для элемента и отрежьте поля, объявив их от края страницы, а не от края объекта. Используйте% как более подходящий для других размеров экрана и т. Д. Вот как я преодолел проблему ... Спасибо, надеюсь, это то, что вы ищете ...
источник
Для решения только для CSS 1. Либо высота обертки должна быть фиксированной, либо 2. Высота второго div должна быть фиксированной
источник
источник
Это легко с CSS, просто используйте
display:block
иz-index
свойствоВот пример:
HTML:
CSS:
Edit: Это хорошо , чтобы установить некоторые
background-color
кdiv-s
видеть вещи правильно.источник
У меня есть простой способ сделать это.
источник