【发布时间】:2014-07-07 23:18:58
【问题描述】:
我正在编写一个响应式网站(假设是一个断点以使事情变得简单),它最终会看起来像这样:
宽屏:
=================
HEADER
=================
HERO
=================
NAV | SEARCH
-----------------
窄屏:
=================
HEADER
=================
NAV | SEARCH
-----------------
HERO
=================
如您所见,这不仅仅涉及 CSS 和媒体查询。正在进行一些 DOM 重组。显然这是一个简化的示例,根据视口大小提供完全不同的 HTML 文件可能是有意义的。
但是...如果宽屏和窄屏版本之间的代码 90% 相同怎么办?当 DOM 树中只有几个元素被移动时,复制所有代码肯定不是一个好主意。
我现在的做法是:
<header>...</header>
<section class="hero">...</section>
<section class="controls">
<nav>...</nav>
<form class="search">...</form>
</section>
<script>
if(viewport.width < 768){
$('.controls').insertAfter('header');
}
</script>
然而,这个解决方案会用 jQuery 弄乱我的文件,在页面元素全部加载后重写它们。这对性能也不是太好。
您对更好的前进方式有什么想法吗?
编辑:为了响应重复的标志,是的 display:table 解决方案适用于这个特定的例子。所以它在技术上是重复的。但是我在这里接受的 flexbox 解决方案是一个更强大、更适合该任务的工具。
【问题讨论】:
-
讨厌说“扔另一个库”,但您可能会对IntentionJS 感兴趣。
-
IntentionJS 令人印象深刻,但出于“放置操作”(本示例中我唯一需要的功能)的目的,它看起来并没有少写标记。
-
虽然 IntentionJS 看起来比 jQuery 执行得更快。
标签: javascript jquery css dom responsive-design