再谈翻页H5不同屏幕不同分辨率下的适配法则

从前我写过一篇《翻页H5全分辨率适配最佳实践》,那篇对于不同屏幕不同分辨率下的适配讲的太简单,其实是我想的太简单。想要尽可能完美的适配,其中的花花还是有很多的。

工作台分辨率

从前我讲了,工作台以320x520作为标准分辨率,然后让浏览器根据initial-scale来放大显示。

div层级关系

我认为的比较理想的层级关系是:

div.ancestor>div.page>div.editarea>div.element

也就是说:

1、div.ancestor是祖先层,每个人有自己的写法,在本文里不说,但是宽高必须是视口宽高,也就是百分之百。

2、page层,负责设背景图,它的宽高都始终是百分之百,也就是视口宽高。

3、editarea层,这个层作为一个调整层最重要,下文有详细说明。

4、element层,是具体浮动元素,也就是内容。

内容布局

今天主要讲讲内容布局。由于我们要适配高视口和矮视口,而320x520是最高的视口,所以,设计师做设计,内容注定不应该充满整个画面,也就是说,内容不能从顶线一直铺到底线。既然要有一定的空隙,那么就涉及到空隙留在什么地方。具体分成四种情况:(1)内容居中(2)内容居上(3)内容居下(4)内容占满。

这就相当于word里面的:(1)居中(2)左对齐(3)右对齐(4)两端对齐。可以对照想象一下。

下面分别讲述。

主体内容集中在中部,上下留白

这种布局是最主流的布局,设计师要求程序员:

1、浮动元素集中在中部,留天留地。

2、背景图的主体元素也在中部,留天留地。

应对设计师的这种要求,程序员应该做的是:

1、背景图:

background-position: 50% top;
background-size: cover;

2、editarea样式:

.editarea{
  position: relative;
  width: 100%;
  top: calc((100% - 520px) / 2);
  height: 520px;
}

这里注意top: calc((100% - 520px) / 2);的妙用,简单说,我们希望editarea跟祖先元素中心点重合,也就是居中对齐,而且希望editarea的高度大于视口,是固定值520px。如下图所示:

再谈翻页H5不同屏幕不同分辨率下的适配法则_第1张图片
Paste_Image.png

为什么要这么搞呢?为什么editarea的高度不能是视口100%呢?

因为这涉及到浮动元素的定位问题。我们可以用top、left、bottom、right定位一个元素,但并不存在一种叫center的属性,也就是说我们没办法简单的以容器中心点为坐标来定位元素,只能从四个边开始丈量。

当我们以320x520为画布,摆放好了所有的浮动元素,每个浮动元素都有自己的top值,假设editarea的高度是视口100%,那么非常靠近底部的元素,在视口中就会被裁剪。这当然不是我们想要的。因此,我搞一个向上的偏移,这就让所有浮动内容都在手机屏幕中显示了出来。

3、浮动元素:原则上都使用top: xxxpx,不使用bottom: xxxpx,除非你确定某个浮动元素必须下对齐,而且它在任何视口都不影响其他元素,也不影响背景。另外,浮动元素绝对不允许吸顶或者吸底,因为这样百分百会被裁剪。

主体内容在上方,从上向下铺内容

设计师要求程序员:

1、浮动内容,必须从顶部开始往下排列,到屏幕的底部的时候没有主体内容。比较高的视口下,底部会看到一些无内容区,比较矮的视口下,底部被裁剪。

2、背景图,优先显示顶部内容,背景图的底部不设计实质内容,可以被窗口裁剪。

应对设计师的这种要求,程序员应该做的是:

1、背景图:

background-position: 50% top;
background-size: cover;

2、editarea样式没啥特别的:

.editarea{
    position: relative;
    width: 100%:
    height: 100%;
}

简单解释这里为啥不用top修正位置了呢?因为你的内容要求从顶部往下排,当然就不用修正位置了。

3、浮动元素:原则上都使用top: xxxpx,不使用bottom: xxxpx,除非你确定某个浮动元素必须下对齐,而且它在任何视口都不影响其他元素,也不影响背景。

主体内容全部在下方,从下往上铺内容

这个跟上面相反,内容集中在下部,比如,设计师做了一个舞台,这个舞台是重点,不允许被裁剪,如果裁剪的话,站在舞台上的人就等于悬空了,而且,这个舞台决不允许被裁剪,哪怕是裁剪一部分都会让人看不懂这是个什么东西。这种情况就是所谓主要内容在下部。

再谈翻页H5不同屏幕不同分辨率下的适配法则_第2张图片
Paste_Image.png

此时设计师要求程序员:

1、浮动内容,必须从底部开始往上排列,到屏幕的顶部的时候没有主体内容。比较高的视口下,顶部会看到一些无内容的天花板,比较矮的视口下,天花板允许被裁剪。

2、背景图,优先显示底部内容,背景图的顶部不设计实质内容,可以被裁剪。

应对设计师的这种要求,程序员应该做的是:

1、背景图:

background-position: 50% bottom;
background-size: cover;

2、editarea样式跟上面一样:

.editarea{
    position: relative;
    width: 100%:
    height: 100%;
}

3、浮动元素:原则上都使用bottom: xxxpx,不得使用top: xxxpx,除非你确定某个浮动元素必须在顶部,而且确认它在任何视口都不影响其他元素,也不影响背景。

主体内容占满全屏

这个就有点意思了,也就是说:

设计师要求程序员:

1、屏幕顶部的内容必须全露,而且尽量吸顶。

2、屏幕底部的内容也必须全露,而且尽量吸底。

3、屏幕中央的内容占据的面积可大可小,比较疏松,均匀分布。

这种“主体内容占满全屏”的例子有:

1、弹幕,假设你设定弹幕有10行,要求铺满全屏,那么就是从顶部开始均匀往下铺10行。弹幕当然不允许被裁剪,而且必须均匀分布。高视口下,行间距就大一点,低视口下,行间距就小一点。

2、局部滚动列表,这个列表尽管是局部滚动的,但是我们当然希望它尽量占满全屏。

应对设计师的这种要求,程序员应该做的是:

1、背景图:

background-position: 50% 50%;
background-size: cover;

2、editarea样式跟上面一样:

.editarea{
    position: relative;
    width: 100%:
    height: 100%;
}

3、浮动元素:如果要均匀分布,原则上都使用top: xxx%,注意,用百分比,而不用px值。

类总结

page层:

.bpt {
    background-position: 50% top;
}

.bpb {
    background-position: 50% bottom;
}

page层默认是background-position: 50% 50%;,根据需要再追加.bpt或.bpb。

editarea层:

.editarea {
    position: relative;
    margin: 0 16px;
    width: 288px;
    height: 520px;
    top: calc((100% - 520px) / 2);
    tap-highlight-color: transparent;
    overflow: hidden;
}

.editarea-w100 {
    margin: 0;
    width: 320px;
}

.editarea-h100 {
    height: 100%;
}

你可能感兴趣的:(再谈翻页H5不同屏幕不同分辨率下的适配法则)