根据设备宽度使用 CSS 更改 div 顺序

2024-04-29

我正在开发一个响应式网站,遇到了一个有趣的问题。我有一些并排的 div。可能有 2 到 6 个左右。当屏幕不够宽而无法正确显示所有内容时,div 会垂直堆叠。使用 CSS 就足够简单了。

问题是,我需要它们根据布局采用不同的顺序。这很容易用 2 或 3 个 div 来完成(根据宽度更改 div 顺序 https://stackoverflow.com/questions/22159235/changing-divs-order-based-on-width),但当您添加第四个时,挑战明显更大。

我可以用position: absolute;并手动设置位置,但这会导致父级缩小并且无法正确包含它们。

更复杂的是,我无法使用 JavaScript。

使用两列:

(未经测试)

HTML:

<div id="container">
    <div class="column-half column-half-2">
        First div on mobile, right div on desktop
    </div>
    <div class="column-half column-half-1">
        Second div on mobile, left div on desktop
    </div>
</div>

CSS:

.container {
    width: 80%;
    max-width: 1200px;
    margin: 0 auto;
    padding-bottom: 20px;
    position: relative;
}
.column-half {
    display: table-cell;
    padding: 25px;
    vertical-align: top;
    width: 40%;
}
.column-half-1 {
    float: left;
}
.column-half-2 {
    float: right;
}

HTML,有 4 列:

<div id="container">
    <div class="column-quarter column-quarter-3">
        First div on mobile, third div on desktop
    </div>
    <div class="column-quarter column-quarter-2">
        Second div on mobile, second div on desktop
    </div>
    <div class="column-quarter column-quarter-1">
        Third div on mobile, first div on desktop
    </div>
    <div class="column-quarter column-quarter-4">
        Fourth div on mobile, fourth div on desktop
    </div>
</div>

这在 CSS 中是可行的,这要归功于精彩的flexbox https://drafts.csswg.org/css-flexbox-1/规格使用order https://developer.mozilla.org/en-US/docs/Web/CSS/order and flex-flow https://developer.mozilla.org/en-US/docs/Web/CSS/flex-flow属性,我们可以实现您想要的。无前缀,IE11 和所有常青浏览器都将支持此功能。 IE10 前缀-ms-order并且不支持flex-flow.

该解决方案考虑了您列出的所有限制:

  • 将给定顺序的元素列表显示为一行。
  • 当窗口太小时,将它们更改为以列形式显示。
  • 当元素显示在列中时更改元素的顺序。

由于 Stack Snippets 的限制,您需要在全页模式下查看演示,并调整浏览器大小才能看到效果。

.container div {
    width: 100px;
    height: 50px;
    display: inline-block;
}

.one { background: red; }
.two { background: orange; }
.three { background: yellow; }
.four { background: green; }
.five { background: blue; }

@media screen and (max-width: 531px) {
    .container { display: flex; flex-flow: column; }
    .five { order: 1; }
    .four { order: 2;  }
    .three { order: 3; }
    .two { order: 4; }
    .one { order: 5 }
}
<div class="container">
    <div class="one">I'm first</div>
    <div class="two">I'm second</div>
    <div class="three">I'm third</div>
    <div class="four">I'm fourth</div>
    <div class="five">I'm fifth</div>
</div>

或者,这里有一个JSFiddle http://jsfiddle.net/chdhhm74/ demo.


您也可以简单地使用flex-flow: column-reverse没有order分配给每个 div 的属性(如果您非常反对冗长的 CSS)。相同的演示限制适用;全屏查看此演示并相应地调整浏览器窗口的大小。

.container div {
    width: 100px;
    height: 50px;
    display: inline-block;
}

.one { background: red; }
.two { background: orange; }
.three { background: yellow; }
.four { background: green; }
.five { background: blue; }

@media screen and (max-width: 531px) {
    .container { display: flex; flex-flow: column-reverse; }
}
<div class="container">
    <div class="one">I'm first</div>
    <div class="two">I'm second</div>
    <div class="three">I'm third</div>
    <div class="four">I'm fourth</div>
    <div class="five">I'm fifth</div>
</div>

值得指出的是flex-flow是包含两者的简写属性flex-direction and flex-wrap特性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据设备宽度使用 CSS 更改 div 顺序 的相关文章

  • 获取自定义属性的值

    如何使用 JavaScript 获取自定义属性的值 Like strong 我试过了 getAttribute 和 jQuery 的 attr 没有成功 您可以使用纯 JavaScript 来完成此操作 document getElemen
  • 使用 webkit 转换 Html 到 PDF

    从 Html 生成 PDF 时 webkit 转换不起作用 我需要将 div 旋转 45 度 使用 webkit 变换后 它在屏幕上看起来没问题 但使用 winnovatives Html 到 PDF 转换器时 输出是平坦的而不是旋转的 有
  • 使用 Java 处理 HTML(多部分表单数据)文件上传

    我正在为概念验证 Web 应用程序开发多文件上传解决方案 我正在使用 java servlet 来处理 AJAX 文件上传 我的问题是java如何处理从HTML表单上传文件 如果有人可以解释如何处理基本的 HTML 文件上传 那么我可能可以
  • TransitionEnd 事件未触发?

    我有多个元素 每个元素都以 某种程度上 持续时间进行动画处理 我使用 CSS3 过渡 jQuery 库和transitionend辅助函数来自大卫 沃尔什 https davidwalsh name css animation callba
  • 隐藏滚动条,但仍然可以滚动

    我希望能够滚动整个页面 但不显示滚动条 在谷歌浏览器中它是 webkit scrollbar display none 但 Mozilla Firefox 和 Internet Explorer 似乎不是这样工作的 我也在 CSS 中尝试过
  • 添加自定义 CSS 到 Jekyll

    我是 Jekyll 新手 我正在按顺序使用自定义 html 和 css 制作一个网站 Jekyll 默认下载 minima 主题 所以我用以下 html 覆盖了主页 all my html
  • 最小高度:自动在 Opera 中不起作用

    我注意到min height不在 Opera 中工作 我正在尝试这样的事情 div class content div div class content newstyle div 我的 CSS 代码是 content min height
  • 的 CSS margin-top 影响父级的边距

    我已经研究这个问题有一段时间了 但还没有找到直接的答案 当向元素添加页边距顶部时 就我而言 它主要发生在标题上 在许多情况下 边距顶部是与父级共享的 HTML div h1 My title h1 div CSS div padding 2

  • jQuery:如何将 jQuery 日期选择器放入 Bootstrap Popover 中? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我试图在引导弹出窗口中显示 jquery datepicker 并尝试了解决方案引导程序弹出窗口内的日期选择器 关闭 https
  • 在 javascript 中循环 html 复选框

    实际上我有一个关于如何在java脚本中循环复选框的问题 假设我在jsp循环中创建了html复选框 我希望在javascript中对这些复选框进行验证 我应该怎么做 通常对于单个对象 我们可以执行 window document form c
  • Firefox 30 不再隐藏选择框箭头

    我一直使用的 技巧 是 select moz appearance none text indent 0 01px text overflow 在 FF 上进行自定义选择框 但自从版本 30 发布以来 它完全停止工作 我试图找出这是否已被弃
  • 查找第一个可滚动父级

    我遇到这种情况 需要将元素滚动到视口中 问题是我不知道哪个元素是可滚动的 例如 在纵向中 主体是可滚动的 而在横向中 它是另一个元素 还有更多情况会更改可滚动元素 现在的问题是 给定一个需要滚动到视口中的元素 找到其第一个可滚动父元素的最佳
  • 过滤文件上传仅用于文本文件

    我使用的是 Firefox 版本 14 0 1 我需要过滤上传文件窗口以仅显示 txt files 我的浏览器不仅仅支持文本文件 text plain 我可以通过指定此格式来限制图像文件 image 但我只需要过滤文本文件在文件选择器窗口中
  • Firefox 背景图像在切换标签后消失

    我在渲染背景图像时遇到一些非常奇怪的问题 我不确定这是 Firefox 的错误还是我的错 每次我在 Firefox 中打开项目站点时 所有背景图像都会正确加载并显示 当我切换到另一个选项卡并在一段时间后切换回来后 所有背景图像都消失了 我检
  • 有史以来最复杂的 CSS 渲染错误 (IE9)

    在 IE9 中看一下 http jsfiddle net dalgard n6PDB show http jsfiddle net dalgard n6PDB show screen dump 阅读这些评论 IE9 Upon moving
  • 如何在不知道id的情况下从内页获取父iframe元素?

    让我们想象一下我有这样的东西 div div test html 是空页面 自定义hash属性始终具有不同的值 出于安全原因两个页面位于同一域 iframe 元素的数量和顺序是随机的 我的问
  • 如何在C#中使用默认浏览器打开带有锚点(#)的html文件

    我正在尝试在 C 中打开上下文帮助文件 当我没有指定锚点时 它工作得很好 Process Start C Help Help htm 但是当我指定锚点时 它不会打开 Process Start C Help Help htm Toc3420
  • 是否可以对 Flexbox 插入、删除和项目位置进行动画处理?

    这个问题最初是在 2012 年提出的 https stackoverflow com questions 11106876 is it possible to animate flexbox inserts removes但是提供的答案并未
  • <输入类型=按钮> 与 <按钮> [重复]

    这个问题在这里已经有答案了 我有点困惑 这些有什么区别呢 请不要引用非常旧的帖子 我注意到在 html 和样式表中访问某些样式是不同的内联样式
  • localStorage 获取 NULL?

    我不知道为什么 因为我之前已经这样做过并且工作正常 我认为这可能是因为浏览器问题 错误 localStorage setItem foo bar alert localStorage getItem foo 我使用的是 Firefox 3

随机推荐

  • R Doplot() 坐标定位器()

    我绘制了 2 个 fasta 序列的点图 使用 seqinr 包中的 dotPlot 我需要从图中提取一些值 x y Dotplot 输出是图像 通用点图可能就是这个 例如 我需要局部对齐的开始和结束值 由紫色线表示所以这里有一个例子 l
  • 了解 JAXB @XmlRootElement 注释

    我正在使用教程在这里 http www vogella com articles JAXB article html jaxb用于理解 JAXB 当作者开始创建文档的根时 作者开始如下 This statement means that c
  • 在rails生产环境中禁用服务器端缓存

    我即将部署一个包含敏感数据的应用程序 因此 不应将任何数据存储到磁盘上 有没有办法禁用服务器端缓存 我找不到任何 我碰巧遇到了这个问题 并且假设您不再需要答案 但是 我相信您正在寻找的是以下内容 config action controll
  • 在javascript中将字符串转换为数字

    我想解析包含经度和纬度的用户输入 我想做的是将字符串强制转换为数字 保留其符号和小数位 但我想做的是当用户输入无效时显示一条消息 我应该遵循哪一个 parseFloat x second new Number x third x fourt
  • 我的 ViewModel 列表中每个项目的数据验证

    要使用正则表达式进行验证 我通常这样做 In my ViewModel RegularExpression MyRegex ErrorMessageResourceName MyErrorMessage public string MyFi
  • 写入 BigQuery 时处理卡住

    我正在使用云数据流将数据从 Pub Sub 消息导入到 BigQuery 表 我正在使用 DynamicDestinations 因为这些消息可以放入不同的表中 我最近注意到该进程开始消耗所有资源 并且消息表明该进程被卡住开始显示 Proc
  • Python 词干分析器问题:词干错误

    你好 我正在尝试用 python 词干分析器来词干 我尝试了 Porter 和 Lancaster 但他们也有同样的问题 他们无法正确阻止以 er 或 e 结尾的单词 例如 它们源于 computer gt comput rotate gt
  • Knockout 将 css 类绑定到观察到的模型属性

    我想将 divs css 类绑定到视图模型的属性 如下所示 div 但这会产生结果 div class 0 1 2 3 这是视图模型 myViewModel selectedPriority ko observable High Compa
  • 什么时候调用CloseHandle?

    我有一个主线程 它接收需要一些时间的操作 所以我创建一个线程并将工作委托给它 当主线程接收作业时 将调用此执行函数 每个作业都执行此执行 Return type execute Arguments here if a file read c
  • Google Chrome 的互联网历史记录脚本

    我并不是在寻找 最佳 或最有效的脚本来执行此操作 但我想知道是否存在一个脚本可以从 Google Chrome 中提取一天的互联网历史记录并将其记录到 txt 文件中 我更喜欢用 Python 或 MATLAB 编写 如果你们有不同的方法
  • mysqli_fetch_assoc() 期望参数 1 为 mysqli_result,布尔值给出

    看来我的 mysqli query 不起作用 我该怎么办 在密码附近的查询中使用 AND 而不是逗号 这就是查询返回 false 并抛出该错误的原因 select
  • 绘制 UML 时何时使用属性(属性)而不是关联/聚合/组合

    好吧 我有点困惑 当尝试在 UML 图中显示关系时 我应该向类添加属性 还是绘制与类的关联 例如 假设我有一个 DFA 类 其中包含 10 个状态对象 每个状态对象都有一组不同的通往 DFA 中各种状态的路径 我应该绘制从 DFA 到 St
  • 使用 SharpPcap 和 Packet.Net 发送我自己的 ARP 数据包

    到目前为止 我尝试使用 SharpPcap 发送我用 Packet Net 创建的 ARP 数据包 但没有成功 问题是即使我使用发送数据包device SendPacket它实际上没有被发送 我不知道为什么 这是我的代码 ARPPacket
  • 使用PHP exec调用Node脚本并在finally方法之前将数据返回给PHP

    我有一个 PHP 脚本 它使用exec函数来执行 Node 脚本并将一些数据返回到同一 PHP 脚本 我的问题是我需要将数据返回给 PHP 而不必等待中的清理代码finally完成 我在下面编写了一些示例代码 向您展示代码的流程并说明我的问
  • 如何通过函数参数使用 fstream(特别是 ofstream)

    嗨 我是一个c 初学者 这是我的作业之一 我有点卡住了 这不是我的全部代码 它只是我需要帮助的一小部分 我想做的是有一个函数专门用于将具有该函数的所有内容导出到text文件名为 results txt 因此 当我打开文件时 应该会显示 do
  • 将 Ruby 程序作为 Windows 服务运行?

    是否可以将 ruby 应用程序作为 Windows 服务运行 我看到有一个相关的问题讨论运行Java 应用程序作为 Windows 服务 https stackoverflow com questions 25530 best method
  • 如何在android中使用Ontouchevent突出显示此pdf页面

    这里我想使用android中的onTouchevent来突出显示这段文字 您可以使用 OnTouchListener 来获取事件的 x 和 y 然后将屏幕绘制为位图 并根据字母的左上角显示和字母的大小使用bitmap getPixel 看看
  • WSO2 API 管理器 - 我可以隐藏公共商店中的租户商店吗?

    是否可以隐藏租户商店 以便它们在公共商店中不可见 而只能通过其直接租户特定商店 URL 可见 例如 https api mydomain com store tenant mycustomer com https api mydomain
  • struct{} 和 struct{}{} 在 Go 中如何工作?

    我想知道 Go 中的 struct 和 struct 是什么意思 示例如下 array index struct or make map type struct struct is a keyword https golang org re
  • 根据设备宽度使用 CSS 更改 div 顺序

    我正在开发一个响应式网站 遇到了一个有趣的问题 我有一些并排的 div 可能有 2 到 6 个左右 当屏幕不够宽而无法正确显示所有内容时 div 会垂直堆叠 使用 CSS 就足够简单了 问题是 我需要它们根据布局采用不同的顺序 这很容易用