【发布时间】:2019-09-11 08:38:47
【问题描述】:
短篇小说
假设我的 HTML 已经确定:
<div id="blockA">Block A</div>
<div id="blockB">Block B</div>
<div id="blockC">Block C</div>
看起来像这样:
------------
| Block A |
------------
| Block B |
------------
| Block C |
------------
现在我想切换块的顺序。我怎样才能只用 CSS 做到这一点?
------------
| Block C |
------------
| Block A |
------------
| Block B |
------------
我知道有一些 hacky 解决方案,例如使用 position:absolute,但这并不能保留 display:block 属性的有效使用。也就是说,当它们变大时,块会向下推动其他块。
长篇大论
当用户使用电脑查看我的网页时,区块按如下顺序显示:
- 一般信息。
- 活动日程。
- iPhone 应用广告
iPhone 应用程序广告放在最后,因为它对计算机用户来说并不是非常重要。一小部分计算机用户会拿出手机安装应用。
如果移动用户来到这个网站,iPhone 应用广告应该是页面上最重要的东西。因此,它应该移到顶部:
- iPhone 应用广告
- 一般信息。
- 活动日程。
我希望 iPhone 和计算机用户共享相同的 HTML,但有一个 CSS 媒体查询来切换块的顺序。
@media only screen and (max-device-width: 480px) {
#blockC {
/* magic order switching */
}
}
【问题讨论】:
-
如果你介意我问一下,为什么你需要只使用 CSS?
-
position: absolute不会改变display: block。 -
position:absolute没有保留display:block的堆叠和推送特性,这是拥有块元素的全部意义。 -
我只是喜欢为 HTML、CSS 和 JS 分配不同的角色。我喜欢HTML只处理信息,CSS只处理外观,而JS只处理用户交互。我对模型视图控制器有强迫症。如果我必须改变我的 HTML 来改变外观,那么我的心就会死去。
-
我不认为想通过 CSS 来做这件事是不合理的——我宁愿把它放在媒体查询后面,让它成为网站布局如何响应而不是拆分的唯一真实来源跨 css 和 js 的逻辑。