如何在小屏幕上更改 div 的顺序?

Posted

技术标签:

【中文标题】如何在小屏幕上更改 div 的顺序?【英文标题】:How to change order of divs on smaller screens? 【发布时间】:2015-11-17 04:11:18 【问题描述】:

当屏幕尺寸小于 480 像素时,我需要重新排序 div。

我不想使用position: absolute,因为绿色区域的高度可能会因文本数量而异。

我需要小屏幕顺序为红色、绿色、红色、绿色、红色、绿色(每个红色都在直接绿色的顶部,宽度为 100%)。

有什么想法吗?非常感谢

*, html, body 
    margin: 0;
    padding: 0;


.container 
    width: 100%;
    display: inline-block;
    box-sizing: border-box;


.full_half 
    display: inline-block;
    width: 50%;
    background-color: green;
    float: left;
    min-height: 100px;


.pic 
    background-color: red;
    height: 100px;


.text 
    box-sizing: border-box;
    padding: 20px 120px;


@media screen and (max-width: 480px) 
    .full_half 
      width: 100%;
    
    
    .text
     padding: 0 0 !important;
    
<div class="container">
    <div class="full_half pic"></div>
    <div class="full_half text">test</div>
</div>
<div class="container">
    <div class="full_half text">test</div>
    <div class="full_half pic"></div>
</div>
<div class="container">
    <div class="full_half pic"></div>
    <div class="full_half text">
        dfdfdfdfdfdffdfdfdfdfdfdfdfdfdfdf<br />
        dfdfdfdfdfdffdfdfdfdfdfdfdfdfdfdf<br />
        dfdfdfdfdfdffdfdfdfdfdfdfdfdfdfdf<br />
    </div>
</div>

已解决:

我终于设法通过将 flexbox 应用于容器来更改顺序(仅当宽度小于 480 像素时)。

css 更改:

@media screen and (max-width: 480px) 
    .container 
      flex-direction: column;
    
    .pic 
      order: 1;
    

    .text
     order: 2;
    

http://jsfiddle.net/vquf7z7b/

【问题讨论】:

【参考方案1】:

使用CSS Flexbox,您可以使用order 属性控制元素的视觉顺序,使用flex-direction 属性控制div 的x/y 方向。

以下是对代码的一些简单调整,可让您的布局正常工作:

CSS

.container 
     display: flex; /* NEW */
    /* width: 100%; */
    /* display: inline-block; */
    /* box-sizing: border-box; */


@media screen and (max-width: 480px) 
    .full_half   width: 100%; 
    .text        padding: 0 0 !important; 
    .container  flex-direction: column;          /* NEW */
    .container:nth-child(2) > .pic  order: -1;   /* NEW */

现在,当屏幕尺寸小于 480 像素时,div 会堆叠在单列中,顺序为红、绿、红、绿、红、绿。

*,
html,
body 
  margin: 0;
  padding: 0;

.container 
  display: flex;

.full_half 
  display: inline-block;
  width: 50%;
  background-color: green;
  float: left;
  min-height: 100px;

.pic 
  background-color: red;
  height: 100px;

.text 
  box-sizing: border-box;
  padding: 20px 120px;

@media screen and (max-width: 480px) 
  .full_half 
    width: 100%;
  
  .text 
    padding: 0 0 !important;
  
  .container 
    flex-direction: column;
  
  .container:nth-child(2) > .pic 
    order: -1;
  
<div class="container">
  <div class="full_half pic"></div>
  <div class="full_half text">test</div>
</div>
<div class="container">
  <div class="full_half text">test</div>
  <div class="full_half pic"></div>
</div>
<div class="container">
  <div class="full_half pic"></div>
  <div class="full_half text">
    dfdfdfdfdfdffdfdfdfdfdfdfdfdfdfdf
    <br />dfdfdfdfdfdffdfdfdfdfdfdfdfdfdfdf
    <br />dfdfdfdfdfdffdfdfdfdfdfdfdfdfdfdf
    <br />
  </div>
</div>

revised fiddle

在上面的示例中,flex 容器 (.container) 的子元素排成一行,这是 flexbox (flex-direction: row) 的默认布局。

每个子元素默认为order: 0。通过在第二个.container 中为div.pic 类赋予-1 的order 值,它被定位在其兄弟之前(div.text 的值为0)。我们也可以将第一个兄弟值设为 1,从而将其移动到 div 之后和 .pic。 Learn more about the order property.

通过将 flex-direction 的值从其默认值 (row) 更改为 column,div 堆叠在一个列中。 Learn more about the flex-direction property.


浏览器支持: 所有主流浏览器都支持 Flexbox,except IE < 10。一些最新的浏览器版本,例如 Safari 8 和 IE10,需要vendor prefixes。要快速添加所需的所有前缀,请使用Autoprefixer。更多详情this answer。

【讨论】:

以上是关于如何在小屏幕上更改 div 的顺序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 div 堆叠没有空格并保留较小尺寸的顺序 - 在 Bootstrap 中

如何让 div 以最紧凑的方式垂直对齐?

如何根据屏幕尺寸从离子菜单中动态更改一侧?

css在小窗口宽度中更改表格中元素的顺序

如何让卡片组不包裹在小屏幕上?

如何在小屏幕上禁用引导对齐选项卡的堆叠