如何用iphone6的设计稿适配iphonex和iphone4

原理分析

  • 巧用padding
  • 巧用百分比

利用这2个小技巧,可以让你在移动端布局更加轻松。

例子一

 <div class="parent">
    <div class="child">div>
 div>
复制代码

 .parent {
            position: absolute;
            width: 50px;
            height: 80px;
            background: red;
        }

    .child {
        padding-top: 20%;
        background: green;
    }
 
复制代码

你们觉得child 的高度是多少呢?40px?不,是10px。怎么算呢?50px*0.2=10px;

结论:

padding-top的百分比大小是基于父容器的宽度来换算的。

问题二:padding-top的百分比大小是基于父容器的宽度来换算的? 例如:

 <div class="parent">
    <div class="child">div>
 div>
复制代码

 .parent {
            width: 50px;
            height: 80px;
            background: red;
        }

    .child {
        position:absoulte;
        padding-top: 20%;
        background: green;
    }
 
复制代码

child没有高度,则说明不适用在绝对定位元素和固定定位上,应该是当元素自身是相对定位或者静态定位的情况下padding-top的百分比大小是基于父容器的宽度来换算的。

好了,举了几个例子有什么用呢?

例子二:

在移动端中,由于手机屏幕的差异性很大,我们很难用一套设计稿去适配所有机型,这时候就得取舍,怎么取舍呢? 先判断设计稿中,有什么元素是一定要保留的,有什么元素可以允许变形或者删减的。 确定好功能性元素之后,我们用一个div容器,将子元素放到这个容器里面,父容器要保持好比例,防止变形。里面的元素基于设计稿的比例按照百分比的形式还原。然后只需要根据不同的屏幕缩放容器的宽度即可适配所有机型。

如何保持好容器的比例呢? 平时我们的设计稿是640*1008;

想要绿色区域保持一定的比例,这时候就需要巧妙利用padding-top的属性。 再往容器里面丢一个wrap-container容器,然后就可以往容器里面用绝对定位的方式去布局。

.red {
    width: 10%;
    padding-top: 10%;
    position: absolute;
    background: red;
    }

    .top-left {
        top: 0%;
        left: 0%;
    }

    .top-right {
        top: 0%;
        right: 0%;
    }

    .bottom-left {
        bottom: 0%;
        left: 0%;
    }

    .bottom-right {
        bottom: 0%;
        right: 0%;
    }

    .container {
        width: 100%;
        height: 100%;

    }

    .wrap-container {
        width: 100%;
        padding-top: 180%;
    }

    .main-container {
        position: absolute;
        width: 80%;
        background-color: palegreen;
        left: 50%;
        transform: translate(-50%, -50%);
        top: 50%;
    }
复制代码

 <div class="container">
    <span class="top-left red">span>
    <span class="top-right red">span>
    <span class="bottom-left red">span>
    <span class="bottom-right red">span>
    <div class="main-container">
        <div class="wrap-container">
        div>
    div>
div>

复制代码

如果是小屏手机应该怎么办? 这时候只需要改变绿色区域容器的宽度,确保不会跟红色重叠。

$(function () {
    $(window).resize(function () {
        var oH = window.innerHeight,
            oW = window.innerWidth;
        var rR = 10 / 18,
            oR = oW / oH;
        var rW = rR * oH * 0.8;
        $('.main-container').width(rW);
    })
})
复制代码

例子三

帧动画可以动态改变比例,只需要控制容器的宽度。

.container{
	position: relative;
	width: 1000%;
}
.man{
	width: 100%;
	padding-bottom: 62.1%;
	background-image: url(img/img.png);
	background-size:500% 100%;
	background-repeat: no-repeat;
	animation: run .5s steps(5)  infinite;
	animation-timing-function:step-start;
}
@keyframes run
{
    0% { background-position:0 0; }
    25%{ background-position:25% 0;}
    50%{ background-position:50% 0; }
    75%{ background-position:75% 0;}
    100%{
    	background-position:100% 0;	
	}
}
复制代码

屏幕变小的情况下,帧动画的大小会随着变化,但是会保持比例。

分析:设定人物的比例大小,如果有多少帧就得设定多少倍,通过移动x轴的百分比改变背景图片。记得设置transition-timing-function Value:steps()模式,不然会平移。

结论

只要巧用padding这个属性,你可以在移动布局中,不需要使用height,完全可以通过宽度来控制高度的大小。这样只需要关心宽度的适配问题。当然如果要出现滚动条的话是需要设置高度的且只能用px。

转载于:https://juejin.im/post/5ae1cb346fb9a07a9b35a8cb

你可能感兴趣的:(如何用iphone6的设计稿适配iphonex和iphone4)