我想创建一个响应式网站。如果浏览器是移动设备大小的,内容应该以 iPhone 样式列表视图显示如果浏览器是桌面大小的,内容应该用标签显示:
这样做的最佳方法是什么? 我不想为移动/桌面使用单独的文件。我希望它反应灵敏。
这是我所做的一些研究。
尝试 1:纯 CSS 解决方案。
纯 CSS 解决方案将是最好的,因为 CSS 提供媒体查询,可以轻松在布局之间切换。CSS 提供了创建标签的方法。但它似乎没有为 iPhone 样式列表提供方法。(您几乎可以使用手风琴列表来伪造它,但这不会像在真正的 iPhone 应用程序上那样将用户带到单独的页面)。
尝试 2:Jquery 解决方案(见 Fiddle)
- Jquery Mobile提供了一种创建iPhone 样式列表视图的简单方法
- Jquery UI提供了一种创建选项卡的简单方法。
- Enquire.js为媒体查询提供了等效的 Javascript。
在这个小提琴中,我尝试将 Jquery Mobile 和 Jquery Ui 结合起来。Enquire.Js 用于根据屏幕调用必要的库。
当一个库被调用时,它会改变 dom 结构。所以必须删除不需要的库,否则如果用户重新调整浏览器的大小(即在移动桌面之间切换),未使用的库将中断,导致调用库发生冲突。
在我的小提琴中,我试图这样做,但它似乎不起作用:
$(document).ready(function() {
enquire.register("screen and (max-width: 600px)", function() {
$('script[src~="jquery-ui.js"]').remove();
$('link[rel=stylesheet][href~="jquery-ui.css"]').remove();
$('head').append('<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css" />');
$('head').append('<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"><\/script>');
$("#tabs").tabs("destroy");
}).listen();
enquire.register("screen and (min-width: 601px)", function() {
$('script[src~="jquery.mobile-1.0a3.min.js"]').remove();
$('link[rel=stylesheet][href~="jquery.mobile-1.0a3.min.css"]').remove();
$('head').append('<link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/base/jquery-ui.css" />');
$('head').append('<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"><\/script>');
$("#tabs").tabs();
}).listen();
});
即使删除了未使用的库,也会导致新库发生冲突。此外,您必须在调用任何布局之前重新调整浏览器的大小。如果用户不重新调整浏览器的大小,则内容将没有样式。
尝试 3:Dom 克隆(参见 Fiddle)
此尝试类似于尝试 2,除了在页面加载时它将 DOM 存储在一个变量中。然后当用户重新调整浏览器的大小时,现有的 DOM 会被存储的 DOM 替换。我已经按照这里的方法大纲进行了操作,但它似乎不起作用。dom 只是被删除而不是被替换。
我将不胜感激,因为我一直在努力寻找解决方案!(我知道我问过一个与此类似的问题,但我觉得这个新问题与此不同,足以保证发布新帖子。)
尝试 4:动态分配数据属性
Jquery mobile 使用标记中的数据属性来使脚本工作。我尝试过动态应用这些,因此它们仅在浏览器处于移动大小时才写入文档。但是,当重新调整浏览器大小时,桌面选项卡仍然损坏。