如何在不更改html代码的情况下更改元素的顺序?

Fra*_*ank 10 html css css3

这些是3 inline-block和元素,这意味着它们将彼此相邻排序.

这是一个观看现场活动的小提琴:https://jsfiddle.net/8mdm8eox/

.wrapper {
  background: #fff;
  width: 100%
}

.firstElement,
.secondElement,
.thirdElement {
  display: inline-block;
  width: calc(100%/3)
}

.firstElement {
  background: #000;
  color: #fff
}

.secondElement {
  background: grey
}

.thirdElement {
  background: #ddd
}

@media (max-width: 767px) {}
Run Code Online (Sandbox Code Playgroud)
<div class="wrapper">
  <div class="firstElement">First Element</div>
  <div class="secondElement">Second Element</div>
  <div class="thirdElement">Third Element</div>
</div>
Run Code Online (Sandbox Code Playgroud)

所以这就是我想要的,我想在屏幕宽度为767px或更低时:

@media (max-width: 767px){}
Run Code Online (Sandbox Code Playgroud)

前两个元素是垂直排序的,第三个元素是与另外两个元素水平排序的,所以它们变成了:

   _______________    ________________
   |First Element|    |?              |
   _______________    |              |  
                      |Third Element |
   ________________   |              |
   |Second Element|   |              |
   _________________  _______________
Run Code Online (Sandbox Code Playgroud)

不要担心第三个元素,文本会被破坏,我只想让前两个元素看起来像那样而不改变html.

Mic*_*l_B 5

有多种方法可以在不改变HTML的情况下重新排序元素.

CSS flexbox提供了该order属性.但是,flex可能不是一个很好的选择,因为您希望一个元素跨越两行.您可能会遇到的问题在这里讨论:

但是,CSS网格布局为您的问题提供了许多好的解决方案.该order物业也可在这里使用,但没有必要.

这是使用该grid-template-areas属性的一个解决方案.

.wrapper {
  display: grid;
  grid-gap: 5px;
  grid-template-areas: "first second third";
}

.firstElement {
  grid-area: first;
  background: #000;
  color: #fff
}

.secondElement {
  grid-area: second;
  background: grey
}

.thirdElement {
  grid-area: third;
  background: #ddd
}

@media (max-width: 767px) {
  .wrapper {
    grid-template-areas: "first third" 
                         "second third";
  }
Run Code Online (Sandbox Code Playgroud)
<div class="wrapper">
  <div class="firstElement">First Element</div>
  <div class="secondElement">Second Element</div>
  <div class="thirdElement">Third Element</div>
</div>
Run Code Online (Sandbox Code Playgroud)

jsFiddle演示

浏览器支持CSS Grid.


Dha*_*osh 2

您需要flex-wrap在儿童.wrapper身上使用order

.wrapper {
  max-width: calc(100%/2);  //Just to keep your original width intact
  display: flex;
  flex-wrap:wrap;
}

.firstElement, .secondElement, .thirdElement{
    min-width:50%; //This will force your width to 50% of your wrapper class
}
.firstElement{ order: 1;}
.secondElement{ order: 2;}
.thirdElement{ order: 3;}
Run Code Online (Sandbox Code Playgroud)

.wrapper {
  max-width: calc(100%/2);  //Just to keep your original width intact
  display: flex;
  flex-wrap:wrap;
}

.firstElement, .secondElement, .thirdElement{
    min-width:50%; //This will force your width to 50% of your wrapper class
}
.firstElement{ order: 1;}
.secondElement{ order: 2;}
.thirdElement{ order: 3;}
Run Code Online (Sandbox Code Playgroud)
.wrapper {
  background: #fff;
  max-width: calc(100%/2);
  display: flex;
  flex-wrap: wrap;
}

.firstElement,
.secondElement,
.thirdElement {
  display: inline-block;
  min-width: 50%
}

.firstElement {
  background: #000;
  color: #fff;
  order: 1;
}

.secondElement {
  background: grey;
  order: 3;
}

.thirdElement {
  background: #ddd;
  order: 2;
}

@media (max-width: 767px) {}
Run Code Online (Sandbox Code Playgroud)