다른 요구 사항으로 인해 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 : flex 및 flex-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 ) – 제외하고는 :
- 각 요소의 정확한 렌더링 높이를 알고 있습니다 (있는 경우 내용을 절대적으로 배치 할 수 있음). 동적으로 생성 된 컨텐츠를 다루는 경우 운이 좋지 않습니다.
- 이러한 요소의 정확한 수를 알고 있습니다. 다시 말하지만, 동적으로 생성되는 여러 컨텐츠 청크에 대해이 작업을 수행해야하는 경우 특히 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>