使用 CSS (Crocodoc) 更改 DOM 元素顺序

tim*_*son 1 javascript css iframe cross-domain crocodoc

是否可以使用 CSS 更改 DOM 元素顺序?我有一个 iframe,我想将工具栏从iframe 的主要内容的上方更改为下方

所以从这个:

<iframe>
<html>
  <body>
    <div id='toolbar'></div>
    <div id='main_content'></div>
    <div id='other_stuff'></div>
  </body>
</html>
</iframe>
Run Code Online (Sandbox Code Playgroud)

对此:

<iframe>
<html>
  <body>
    <div id='main_content'></div>
    <div id='toolbar'></div>
    <div id='other_stuff'></div>
  </body>
</html>
</iframe>
Run Code Online (Sandbox Code Playgroud)

如果使用 CSS 无法做到这一点,有人可以建议如何在 Javascript 中做到这一点吗?操纵 iframe 内容总是让我感到困惑 *^%$。作为一个实际应用,我实际上指的是使用 Crocodoc (https://crocodoc.com/docs/walkthrough/skinning/) 生成iframe,所以我的目的是让这个问题和答案对使用此服务的人有价值也。

jan*_*s86 5

我参加聚会已经很晚了,但我只是想让你们知道您实际上可以单独使用 CSS 更改 DOM 顺序。

虽然要做到这一点,我们必须使用 CSS3 flexbox 语法。所以基本上 IE10+,在我的情况下通常不是问题,因为我用它来操纵移动网站。

那么我们该怎么做呢?父元素需要成为一个 flexbox 元素。例如:

(这里只使用了 webkit 供应商前缀。没有它的 css 令人眼花缭乱)

#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;
}
Run Code Online (Sandbox Code Playgroud)

然后,通过指示它们的顺序来交换 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;
}
Run Code Online (Sandbox Code Playgroud)

祝你好运!