您的网站需要一个移动策略。您必须选择响应式设计或一个专门的移动网站,对吧?也许并非如此。也许您可以混合搭配各种策略。
我和团队每天都在努力工作 CodePen。但我们是一个三人团队。我们的移动策略是尽我们所能地逐步改进它,因为我们 1) 有时间,以及 2) 对如何处理事情有好的想法。
响应式模板示例
以我们的“近期活动”页面为例。此页面非常简单,编写几个媒体查询来重新排列内容,并使用少量 JavaScript 切换筛选器是一个不错的解决方案。

移动专用模板示例
现在看看我们桌面上的“详情”页面

此页面要复杂得多。它与编辑器视图共享相同的布局。您可以单击并拖动预览区域以使其更大或更小。还有键盘命令。保持桌面大小很尴尬,因为文本非常小。使用正确的元标记并使其以移动设备大小加载会导致非常尴尬的布局和尴尬的滚动(如果可能的话)。
这是我们整个网站上最糟糕的移动视图。

我本可以用 CSS 对此视图进行处理并将其塑造成型。但即使我这样做了,也加载了相当一部分不再有任何用途的 JavaScript。相反,我决定使用移动专用模板。这样,我就可以完全控制 HTML、CSS 和 JavaScript,并且只加载所需的内容。我能够重用几乎所有内容,因为我们从模块化角度处理了所有内容。我可以选择 HTML 部分、JS 模块并编译一个仅包含我需要的那部分的 CSS 文件——几乎不用从头开始编写。
现在,“详情”视图更易用了,而且速度更快。

对于好奇的人,我们使用 browser gem 并在控制器级别选择要渲染的模板。它是在进行 UA 嗅探,感觉不太好,但至少它是服务器端1 并且基于一个持续更新的开源项目。
if browser.mobile?
render :template => 'details/mobile', :layout => "mobile-pages"
else
render :template => 'details/index', :layout => "pages"
end
另外需要说明的是,移动版本上没有您无法在桌面版本上执行的操作。
“嗯,还没准备好”视图示例
CodePen 上的并非每个视图在小屏幕上都很好看。编辑器(可以说是应用程序最重要的页面)既不使用响应式设计也不使用移动模板。

它在 iPad 和大型平板电脑上运行得非常好,但在较小的设备上效果不佳。我们不希望这个视图做得很糟糕。将设计保留在桌面大小可以使其可用,直到我们对它有了好的想法并能够正面解决它。它很可能将是一个移动专用模板。
响应式模板中移动专用部分的示例
查看我们的“个人资料”视图

这是一个响应式模板。我认为它运行良好,**但“选项卡”区域除外**,它被分成两行。这很尴尬,并且随着我们可能添加更多导航而无法扩展。相反,我们只在这个特定位置提供不同的部分,该部分输出一个<select>
菜单导航而不是选项卡。

无论如何,这样会更好一些。
这是一个过程
我写这篇博文并不是为了炫耀 CodePen 作为移动设计完美典范。它当然不是。我认为考虑混合和迭代方法来进行移动开发很有趣。
没有单独的域名/URL、没有单独的存储库/代码库、没有单独的团队。所有内容都作为一个大型怪物组合在一起。我认为它应该如此。
非常相关
1 我觉得服务器端 UA 嗅探稍微好一点,因为 1) 立即提供正确的模板,而不是重定向;以及 2) 客户端 UA 测试意味着仅为此目的提供一大块 JavaScript。
我现在在我的个人网站上使用此技术,尽管我正在将其迁移到一个完全响应式的网站,并取消服务器端设备检测部分。
如果您只是检查设备是移动设备还是非移动设备,我认为无需担心太多,但如果您开始依赖 UA 设备检测来对更广泛的设备进行分类,例如移动设备、平板电脑、台式机、电视,您就会遇到麻烦。我 写了一些关于 UA 嗅探的担忧 和服务器端设备检测。
我绝对认为,无论您是选择创建单独的移动网站还是完全响应式的网站,两者都应该使用媒体查询、流体网格/图像。对于 #RWD 网站来说,这毫无疑问,但我认为人们忘记了媒体查询、流体网格/图像在单独的移动网站上也很有用。
很高兴看到 CodePen 上的一些视图在移动设备上得到了改进!
没错
很棒的文章,我前几天注意到 Codepen 的变化,这是一个巨大的改进。加载速度更快,而且易于使用。
我认为选择移动模板是一个很棒的选择,因为它允许移动用户以他们需要的方式格式化内容。
当然,这引发了一个问题,什么是移动设备?或者更准确地说,屏幕要小到什么程度才能算作移动设备?
平板电脑是移动设备吗?还是缩小浏览器窗口?
提供移动模板是一个不错的选择,但它也存在一些问题。
确实如此。在这种情况下,它实际上只是检测 UA 中的 iOS、Android、Blackberry 浏览器等。这种方法可能在未来几年内不会有效。
我真正想看到的是两全其美:服务器端检测屏幕尺寸=)
是的!我非常希望如此。
我很高兴你们正在解决手机上的 Codepen 问题。我迫不及待地想在手机/iPad 上使用 Codepen。如果真的实现了,我甚至可能会购买 Codepen Pro :D
我认为它在 iPad 上运行得相当不错。
确实如此,但有些东西(比如粘贴文本)无法正常工作。
有趣的文章,设计也很不错。
关于“新建笔”页面,是否可以考虑将HTML、CSS和JS分别放到不同的标签页中?
我们可能会这么做,甚至可能把预览也作为一个标签页,因为空间非常有限。
老实说,我希望在桌面版本中也能选择将所有内容都显示为标签页!
再次感谢这些提示!我真心希望没有设计师真的在手机上受折磨去创建项目。还是用一个好用的键盘或者至少平板电脑吧!
顺便说一句,我喜欢Codepen
也许我错过了文章中的某些内容,但为什么使用UA嗅探?为什么不简单地根据视口宽度来设计,例如小于640px作为移动断点(或者更好…使用em单位)?
至于服务器端视口检测,您可以设置一个cookie,在服务器端代码的下一个请求中可以使用它。这并不完美,但在没有cookie时使用智能默认值的情况下,它可以在某些情况下工作。
这可能是处理检测的一种好方法。您会损失设置cookie所需的第一个请求(只是一个重定向,不算太糟糕)。然后每个后续请求都将包含cookie,您可以提供正确的模板。没有UA嗅探,并且可以更细粒度地控制。我想偶尔会有人用超窄的桌面浏览器打开网站,然后就会卡在移动布局上——这会有点尴尬。也许您可以让cookie只持续12个小时左右。我希望能够在初始标头中发送视口宽度——这可以向浏览器大咖们提个建议。
@Chris:您可以在js中通过浏览器窗口大小调整事件来重置cookie。服务器总是落后一个请求,这是事实,但只有极端情况才会成为问题,如果cookie不存在,可以使用一个好的默认值来解决这个问题。
很棒的博客。非常有帮助。
当您说“使用浏览器gem并在控制器级别选择要渲染的模板”时,“控制器”是什么意思?这是客户端的新术语吗?
示例站点(CodePen)使用Ruby on Rails,这是一个MVC(模型-视图-控制器)框架。我不是解释这类事物的专家,但简单来说…
这将大多数逻辑都保留在视图之外,这是一种不错的工作方式(设计师会喜欢你)。因为控制器决定显示哪个视图,所以它是放置一些逻辑的理想位置(如果为移动设备,则使用此模板;如果不是移动设备,则使用其他模板)。
Chris,我必须说——我爱上了Codepen。继续努力!
我同意,Anthony。Codepen太棒了!
非常感谢这些信息。我相信我会在我的新项目中使用它们。
Chris,我们在重新设计我们的旗舰网站时也有同样的想法。关于虽然小屏幕版本不需要但仍然加载了额外的javascript的问题,我们通过使用javascript媒体查询和require.js来避免臃肿,在加载过程的早期通过js媒体查询检查我们需要什么,并将其动态加载到页面中。
测试
清晰明了
非常感谢Chris.. 我希望有一个像Twitter Bootstrap那样的响应式Bootstrap CSS/JavaScript,他们有一节关于如何使用一些现成的CSS类的内容..
如果你能提供一个公开的bootstrap.. 我们就可以使用它。
我认为我们可以使用我称之为DivDaving的东西,“它几乎是使用Div来构建网站的每个部分的方式”,隐藏所有其他控件。你对此怎么看?让它在所有浏览器和所有屏幕上都能正常工作。
也许可以看看Detector,它结合了浏览器、功能和屏幕尺寸检测。
在绝对必要时我会使用UA嗅探器——我在一个PHP项目中遇到一个问题,我的客户希望轮播在桌面上的显示方式非常固定,但在iPad上查看时,他们希望有很多触摸事件和滑动操作。
我想到的最好的方法是为主页面创建一个模板,该模板将导入页面的各个部分,并且某些部分(如轮播)将以不同的方式导入和渲染。
这很酷,因为您可以在任何设备上使用相同的URL(没有“http://m.website.com”之类的东西)。
这绝对是一个让您的移动网站脱颖而出并拥有定制页面的好方法,尽管与构建响应式网站相比,它需要额外的工作来编写全新的设计。我个人喜欢我的响应式设计的外观,除非我必须为我的某个客户创建非常特定的设计,否则我甚至不会费心尝试制作移动网站。当然,这只是我个人的观点,每个人都有不同的看法。
我使用以下卡片式响应式设计
1- 我有一个特殊的网站下载器。我获取手机的屏幕尺寸或根据尺寸确定是电脑,并且不需要其他设计,例如
‘operamini’=>array(‘pattern’=>’Opera.Mini|Opera.Mobi|Android.*Opera’,’dev’=>’agent’,
‘model’=>’mobi_v’,’db_config’=>$db_mobile_config,’add_themes’=>’operamini’,
‘screen’=>’240-320’,’ItIs_mobile’=>TRUE),
2-识别用户代理上的设备和加载参数
3-如果没有设置尺寸参数(没有'screen'),则从标准尺寸列表中选择
4-预先花费解析器内容。结果以JSON的形式存储,它提供了快速下载内容的功能。
5-生成全局标签,例如:'model'、'computer'、'mobile'、'screen'、'portrait'、'landscape'、'width'等
6-使用参数'model'、'add_themes'、'screen'…找到合适的模板
7-响应式使用BBCode。例如[photo]。作为控件,使用系统,屏幕上应该放置多少张照片。
8-内容可以根据语言和显示设备进行准备。全局标签可以选择所需的内容
英语:http://www.cotonti.mobi/page.php?al=example_nefertiti/en
俄语:http://www.cotonti.mobi/page.php?al=example_nefertiti
移动设备:http://www.cotonti.mobi/page.php?al=example_nefertiti&it=mobile
9-以及其他解决方案
抱歉,英语不好
所以有几点。我不是CodePen的用户,我知道我的评论肯定会引起CodePen忠实用户的强烈反响,好吧,各得其所,但我觉得在好的IDE中编写代码是一种更有益的体验。CodePen只是用来以类似存储库的方式向其他人展示HTML/CSS/JS,它不是用来作为编辑器使用的,对吧?换句话说,为什么我不直接在我的电脑上测试我的代码?我只是想了解使用它的原因。此外,当我开始在HTML和CSS编辑器中输入一些文本时,我点击后退按钮返回到我之前的位置,却总是出现“停留在页面上/离开页面”提示,以至于我不得不关闭浏览器才能摆脱它(我使用的是Chrome)。如果CodePen对很多人有用,那当然很好,这并非批评,但我试图理解这个工具的价值,考虑到它可能花费了多少时间,尤其是在市场上已经存在很多编辑器和IDE的情况下。
嘿,Gary,
你没有错——CodePen的目的不是取代你的IDE。也许有一天会!它的目的是在浏览器中直接提供一些东西,以便快速创建示例以进行共享、协作、反馈以及其他许多原因。
“停留在页面上”提示是为了让你感到困扰,这样你就不会意外离开页面并丢失工作。您可以点击“离开页面”,它将允许您离开。
感谢你的快速回复,Chris,这确实有助于解释一些事情。CodePen编辑器本身非常令人印象深刻。事实上,我之前犹豫是否在这里发表任何评论,因为这篇文章并不是完全关于CodePen的……对此表示歉意。
关于提示,顺便说一下,我确实也尝试了“离开页面”,但结果一样。不太确定是不是因为我之前点击了几次“停留在页面”选项,但我确实搞得一团糟;)
我喜欢这篇文章描述了我认为使用所有可用资源来应对各种挑战的最务实的方案。坚持一种解决方案会限制使用各种工具和技术的益处和自由。
响应式 + 条件 CSS/服务器端模板 + JS + 其他任何有意义的东西都是可行的方案。
我特别喜欢这段话:“我们的移动策略是尽最大努力逐步改进它,因为我们 1) 有时间,以及 2) 有好的想法来处理事情。”,因为它反映了开发团队在现实世界中的工作方式。
很棒的文章。
我听说过 respond.js 和 css3-mediaqueries.js,它们可以在不支持媒体查询的浏览器中添加对媒体查询的支持。但这些只在启用了 JavaScript 的浏览器中有效。那么,为什么我们不能通过 JavaScript 或 jQuery 本身来修改 CSS 呢?将媒体查询转换为 jQuery 代码非常容易。想知道这样做是否正确,或者我是否遗漏了什么。
继续努力,Chris。我喜欢你的网站,我希望你能在 Lynda 上发布更多内容,特别是在 WordPress 主题设计方面。谢谢