颠倒div的孩子的顺序

Ang*_*o A 34 html css

你如何用纯CSS扭转div的孩子的顺序?

例如:

我想要

<div id="parent">
    <div>A</div>
    <div>B</div>
    <div>C</div>
    <div>D</div>
</div>
Run Code Online (Sandbox Code Playgroud)

显示为:

D

C

B

A
Run Code Online (Sandbox Code Playgroud)

我在JSfiddle上创建了一个演示:http: //jsfiddle.net/E7cVs/2/

Pbr*_*n19 75

现代的答案是

#parent {
  display: flex;
  flex-direction: column-reverse;
}
Run Code Online (Sandbox Code Playgroud)

  • 快速说明一下-如果您在`div`上溢出,则在Firefox和IE / Edge中它不会与`column-reverse`一起正确滚动(但在Chrome中效果很好)。快速提琴:http://jsfiddle.net/jbkmy4dc/2/ (2认同)

val*_*als 22

有点棘手,但可以工作; 只是为了给你一个想法:

div#top-to-bottom {
    position: absolute;
    width:50px;
    text-align: left;
    float: left;
    -webkit-transform: scaleY(-1);
    transform: scaleY(-1);
}
div#top-to-bottom > div {
    width: 50px;
    height: 50px;
    position: relative;
    float: right;
    display: block;
    -webkit-transform: scaleY(-1);
    transform: scaleY(-1);
}
Run Code Online (Sandbox Code Playgroud)

镜像在垂直轴上既是容器又是孩子.孩子们沿着容器的倒y轴,但孩子们自己再次抬头.

演示


小智 9

<style>
#parent{
    display: -webkit-flex; /* Safari */
    -webkit-flex-direction: row-reverse; /* Safari 6.1+ */
    display: flex;
    flex-direction: row-reverse;
}
</style>
Run Code Online (Sandbox Code Playgroud)


ban*_*aka 8

仅CSS解决方案:(我将所有选择器切换到类选择器,以便不处理可能发生的特殊问题.只是我和其他人的习惯.我还删除了与示例无关的样式.)

.top-to-bottom {
    position: absolute;
}

.child {
    width: 50px;
    height: 50px;
    margin-top: -100px; /* height * 2 */
}

.child:nth-child(1) {
    margin-top: 150px; /* height * ( num of childs -1 )  */
}

.a {
    background:blue;

}
.b {
    background:red;
}

.c {
    background:purple;
}

.d {
    background:green;
}
Run Code Online (Sandbox Code Playgroud)

演示: http ://jsfiddle.net/zA4Ee/3/

Javascript解决方案:

var parent = document.getElementsByClassName('top-to-bottom')[0],
    divs = parent.children,
    i = divs.length - 1;

for (; i--;) {
    parent.appendChild(divs[i])
}
Run Code Online (Sandbox Code Playgroud)

演示: http ://jsfiddle.net/t6q44/5/

  • 它只是为了切换“switch”类。它不是解决方案的一部分。你根本不需要它。看到 div 改变顺序真是太酷了。 (2认同)

Moh*_*mad 5

您可以使用纯 CSS 来做到这一点,但有一些重要的警告。尝试使用以下方法之一,但两者都退缩了:

  1. 正确浮动您的 div。这仅在您的元素水平显示时才有效。它还会将您的元素向右移动。一旦您清除它们或将它们返回到正常的文档流,订单就会恢复。
  2. 通过使用绝对定位。这对于没有定义高度的元素来说很棘手。

向右浮动将反转它们水平显示的顺序。这是一个 jsFiddle 演示

<div id="parent">
    <div>A</div>
    <div>B</div>
    <div>C</div>
</div>

#parent div {
    float: right;
}
Run Code Online (Sandbox Code Playgroud)

绝对位置将从正常文档流中分离出元素,并允许您按照您的选择精确定位。这是一个小提琴演示

  • 这两种方法我都试过,都没有成功。你能发个小提琴吗? (2认同)
  • @Mohamad 这不是预期的吗?预期顺序是颠倒的。 (2认同)

小智 5

100% 使用此代码:

<style type="text/css">
    .wrapper {
       display: flex;
       flex-direction: column-reverse;
    }
</style>

<div class="wrapper">
   <div class="main">top</div>
   <div class="footer">bottom</div>
</div>
Run Code Online (Sandbox Code Playgroud)