现在用手机上网的比例越来越高,怎样能让这些用户在手机上也能愉快地浏览自己的网站呢?一般有这么几种做法:
- 手机APP(mobile app) 提供网站APP
- 手机版(dedicated mobile design) 设计专门的网页给手机用户使用
- 自适应式(又称响应式)网页设计(responsive web design) 让网页依据用户浏览设备的不同做相应调节
此外还有 progressive web design, adaptive web design等方式。
Discuz官方提供过多种手机版。它们的共同特点手机上向服务器发的请求和电脑版基本上是用同样的脚本文件处理的,仅依赖不同的模板内容来提供不同的客户端界面。
| 名称 | 首发版本 | 手机支持 | 模板文件夹 | JS文件夹 | CSS文件夹 | 特点 |
| 标准版 | Discuz! X2.0 | 最初为各类手机使用,从3.0起主要为Windows Phone所用,在3.4里不是任何手机的默认版,但用户可以点击标准版链接来切换到标准版 | template/default/mobile | 无 | 无 | 使用html |
| 极简版 | Discuz! X3.0 | 诺基亚和爱立信等老式手机 | template/default/wml | 无 | 无 | 使用wml |
| 触屏版 | Discuz! X3.0 | iPhone和安卓等智能手机 | template/default/touch | static/js/mobile | static/image/mobile | 使用html和js |
| 新触屏版 | Discuz! X3.4 | iPhone和安卓等智能手机 | template/default/m | template/default/m/js | template/default/m/css | 使用html和js |
标准版和极简版不使用javascript。触屏版和新触屏版使用javascript,而且基于jQuery,因而javascript代码和电脑版的相比更为简练。
但是这些手机版都只支持论坛,所以不适合以博客为主的网站。而且在新型智能手机上的浏览器和电脑上一样支持html5和javascript的情况下,仅仅因为手机屏幕小就得单独造一套页面/模板,也有些不值,还容易造成电脑和手机页面的脱节。另一种做法是只使用一套页面/模板。用css风格来调节页面使之能在大小不同的设备上都能合适的显示,这就是自适应网页设计的想法。本文讨论下在对Discuz网站做不多的改动后,就可以使之产生自适应的效果。在前文(
链接)中,我们讨论过Discuz提供的窄屏和宽屏两种风格。窄屏就是不管浏览器的大小,网页内容的宽度都固定为960px。宽屏则是网页内容占据了整个浏览器的宽度,但不小于960px。我们的修改是在宽屏的基础上去掉最小宽度的限制,因而成为可以适合任何尺度浏览器的全屏风格。
迈向自适应的第一步是在网页头部加上自适应meta标签:
这句话在电脑上不起作用,但在手机上则会产生明显的效果。因为手机在显示网页时会先按浏览器是高解析度设置来决定网页内容的布局,再缩小到手机屏幕的尺寸显示。所以一般手机上浏览器里可以显示很多内容,但字体可能异常的小。加了这句后手机就按屏幕的大小来显示网页内容了。这样做后,网页上的字看上去就大多了。比较下面的左图和中图可以看出差异。
| 手机上显示的版块页 |
手机上显示的版块页(加了viewport设置) |
手机上显示的自适应版块页 |
|
|
|
但是这样做的后果是网页上的很多内容就显示在屏幕外了,需要用滚动条才能看到。出现这种情况一方面是因为有些网页内容有固定的宽度设置,另一方面是有些内容显示出来的宽度超出了屏幕宽度。
我们可以用加媒体查询(media query)条件的css风格语句来依据浏览器可视区域(viewport)的大小来调节网页显示的内容,使得显示内容的宽度不超过可视区域的宽度。首先我们要决定大型和小型设备的划分。当今最流行的响应式网页设计框架Bootstrap 4.1是这样设置临界点的(
链接):
| | 浏览器可视区域的宽度 | 典型设备 |
| 超小 | [0. 576px) | 竖立 iPhone X (375px) |
| 小号 | [576px, 768px) | 横握 iPhone X (724px) |
| 中号 | [768px, 992px) | 竖立 iPad (768px) |
| 大号 | [992px, 1200px) | 横握 iPad (1024px) |
| 超大 | [1200px, +∞) | 电脑 (1920px) |
我们接下来的讨论也按此来对小型设备添加特别的风格。
在小型设备上,我们可以选择不显示一些次要的内容。比如版块页下方的快速发贴栏里右端的表情选择:
@media screen and (max-width: 575.98px) {
#fastsmiliesdiv { /* 快速发贴框右侧的表情栏 */
display: none;
}
}
对于Discuz设置的固定宽度的内容,我们需要设法更改设置。比如在common.css里对页头有最小宽度的设置:
#toptb { min-width: 960px; }
我们可以删掉这个语句,或者在不修改这个文件的前提下,在我们自己添加的风格文件里加上
#toptb { min-width: unset; }
还有在手机上如果输入框里的字体小于16px的话,点击输入框来输入文字时手机会自动放大网页,造成页面的跳动。而Discuz默认设置是14px,所以对小型设备,我们要将输入框里字体设成16px:
@media screen and (max-width: 767.98px) {
input,button,select,textarea {
font-size: 16px;
}
}
加上类似这样的风格语句后,我们的网页就可以成为一个自适应的网页,比如板块页在手机上就成了上方右图的样子。