CSS 만 사용하여 div를 재정렬하려면 어떻게해야합니까? 사항으로 인해 HTML을

다른 요구 사항으로 인해 HTML을 수정할 수없는 템플릿이 주어진 경우 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 전용 솔루션을 찾고 있습니다 (확장되지 않으면 다른 솔루션을 사용해야 할 것입니다).

다음에 다른 요소가 있습니다. 내가 제시 한 제한된 시나리오를 감안할 때 좋은 제안이 언급되었습니다. 이것이 최선의 대답 일 수도 있지만이 요소를 따르는 요소가 영향을받지 않도록하려고합니다.



답변

이 솔루션 은 CSS 만 사용하고 가변 컨텐츠로 작동합니다.

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

답변

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


답변

다른 사람들이 말했듯이, 이것은 CSS에서하고 싶은 것이 아닙니다. 절대 위치와 이상한 여백으로 퍼지 할 수는 있지만 강력한 솔루션은 아닙니다. 귀하의 경우 가장 좋은 옵션은 자바 스크립트로 설정하는 것입니다. jQuery에서 이것은 매우 간단한 작업입니다.

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

또는 더 일반적으로 :

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

답변

Flexbox를 사용하여 수행 할 수 있습니다.

display : flexflex-flow : column-reverse를 모두 적용하는 컨테이너를 만듭니다 .

/* -- 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>

출처 :


답변

사전 인 flexbox 사용자 에이전트 (지원 혼자있을 때 CSS를 통해 원하는 것을 달성 할 수있는 방법 절대적으로 없다 주로 오래된 IE ) – 제외하고는 :

  1. 각 요소의 정확한 렌더링 높이를 알고 있습니다 (있는 경우 내용을 절대적으로 배치 할 수 있음). 동적으로 생성 된 컨텐츠를 다루는 경우 운이 좋지 않습니다.
  2. 이러한 요소의 정확한 수를 알고 있습니다. 다시 말하지만, 동적으로 생성되는 여러 컨텐츠 청크에 대해이 작업을 수행해야하는 경우 특히 3 개 이상인 경우 운이 나빠집니다.

위의 내용이 사실이라면 요소를 절대적으로 배치하여 원하는 것을 할 수 있습니다.

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

다시 말하지만, 적어도 #firstDiv에 대한 높이를 모르는 경우 CSS만으로 원하는 것을 수행 할 수있는 방법이 없습니다. 이 컨텐츠 중 하나라도 동적이면 javascript를 사용해야합니다.


답변

해결책은 다음과 같습니다.

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

하지만 래퍼 div를 따르는 내용이 있다고 생각합니다 …


답변

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>