zoukankan      html  css  js  c++  java
  • 移动布局---3. 二倍图

    3.1 物理像素&物理像素比

    • 物理像素点指的是屏幕显示的最小颗粒,是物理真实存在的。是厂商在出场时就设置好的。比如苹果6、7、8是750*1334
    • 我们开发时的1px不是一定等于一个物理像素的
    • PC端页面,1个px等于1个物理像素的,但是移动端就不尽相同,举例如下:
    <body>
        <div></div>
    </body>
    
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        div {
             300px;
            height: 300px;
            background-color: pink;
        }
    </style>
    

    在移动端iPhone8(宽750px指物理像素)的页面下打开如下:

    宽度为300px(CSS像素)的粉色部分几乎占据了整个屏幕,现调整div盒子的像素,调整到375px(CSS像素)的宽度之后完全占据了整个iPhone8的宽度,由此说明,在iPhone8中375px(CSS像素)=750px(物理像素),1px等于两倍的物理像素。

    • 一个px(CSS像素)所能显示的物理像素的点数,称为物理像素比或屏幕像素比,例如在iPhone8中物理像素比是2
      说明1:购买手机或电脑的时候导购员推荐的物理像素
      说明2:下图iPhone8的375px*667px就是开发时的像素,不是物理像素

    对于为什么物理像素和开发用的px不是一一对应的进一步解释如下:

    • PC端和早期的手机屏幕/普通手机屏幕:1CSS像素=1物理像素
    • Retina(视网膜屏幕)是一种显示技术,可以把更多的物理像素点压缩至一块屏幕里,从而达到更高的分辨率,并提高屏幕显示的细腻程度。效果图如下:

      左边的“京”字是未压缩时候的图,右边的是压缩后的“京”,显然,压缩之后的更清楚。在视网膜屏技术下,一个开发像素里压缩了更多的物理像素。

    3.2 多倍图

    • 对于一张50px*50px(开发像素)的图片,在电脑上打开不会出现问题,但是在手机Retina屏中打开,按照上述物理像素比会放大倍数,这样会造成图片模糊。(我自己的理解是,50px的开发像素在PC端和物理像素一一对应,因此图片可以清楚的显示;但是在手机等高清设备中,比如iPhone8中开发像素是物理像素的两倍,则会导致1个开发像素中挤进去2个物理像素,一个是有效的(图片本身的),一个是无效的(纯色)。在手机屏幕上看,挤入的物理像素一半是无效的,这就导致在手机端显示的图片并不清晰,但是对于文字以及纯色的图片不会出现这个问题,因为文字和纯色的图片本身就是纯色的,挤入的像素也是纯色的,所以不影响)
    • 在标准的viewport设置中,使用倍图来提高图片质量,解决在高清设备中的模糊问题。
    • 通常使用二倍图,因为iPhone6、7、8的影响还存在着3倍图4倍图的情况,这个看实际开发公司需求。
      当前市场上用的最多的还是二倍图这种情况,准备的效果图尺寸一定要比移动端需要的CSS像素大两倍。具体来说:iPhone8:375px(CSS)/750px(物理像素)。
      开发时(在pc端):
      (1)苏宁的某图片选用的是750px(CSS);
      (2)在style中该样式,将该图片缩小为原来的一半375px(CSS);
      (3)放到iPhone8中(每个CSS像素挤入两个物理像素,375px(CSS)变成750px(物理)),再显示为750像素(物理)就不会有模糊的问题了。因为挤入的都是有效的像素。
      二倍图举例:
    <body>
        <!-- 模糊的  -->
        <img src="images/apple50(1).jpg" alt="">
        <!-- 我们采用二倍图 -->
        <img src="images/apple100.jpg" alt="">
    </body>
    
    <style>
        /* 我们需要一个50*50px(CSS像素)的图片,若直接将该图片放到iPhone8中会放大两倍 100*100(物理像素)就会模糊 */
        /* 我们采取的解决办法是:1.放一个100*100px(CSS像素)的图片 */
        /* 2. 手动把图片缩小为50*50*(CSS像素) */
        /* 由于我们准备的图片比实际需要大两倍,这就称为2倍图 */
        
        img:nth-child(2) {
             50px;
            height: 50px;
        }
    </style>
    

    在手机端打开两张图的对比会更明显,第二张图更清晰。

    • 背景图片 主要缩放问题

    3.3 背景缩放background-size

    语法:background-size: 背景图片宽度 背景图片高度

    • 单位:长度|百分比|cover|contain
    • cover把背景图像宽展至足够大,以使背景图像完全覆盖背景区域
    • contain把背景图像宽展至最大尺寸,以使其宽度和高度完全适应内容区域
    <body>
        <div></div>
    </body>
    
    <style>
        div {
             550px;
            height: 500px;
            border: 1px solid red;
            background: url(images/dog.jpg) no-repeat;
            /*1. background-size: 图片宽度 图片高度; */
            /* background-size: 500px 200px; */
            /*2. 只写宽度则高度等比例缩放*/
            /* background-size: 500px; */
            /*3. 里面的单位可以跟百分比 相对于父盒子*/
            /* background-size: 50%;宽度为div的一半 */
            /* 4. cover要完全覆盖div盒子 可能有部分背景图片显示不全 */
            /* background-size: cover; */
            /* 5. contain高度和宽度等比例拉伸 当宽度“或者”高度铺满div盒子的时候就不再进行拉伸了 可能有部分空白区域*/
            background-size: contain;
        }
    </style>
    

    背景缩放

    <body>
        <div></div>
    </body>
    
    <style>
        /* 我们需要一个50*50px(CSS像素)的图片,若直接将该图片放到iPhone8中会放大两倍 100*100(物理像素)就会模糊 */
        /* 我们采取的解决办法是:1.放一个100*100px(CSS像素)的图片 */
        /* 2. 手动把图片缩小为50*50*(CSS像素) */
        /* 由于我们准备的图片比实际需要大两倍,这就称为2倍图 */
        
        div {
             50px;
            height: 50px;
            border: 1px solid red;
            background: url(images/apple100.jpg);
            /* 下面进行缩放 */
            background-size: 50px 50px;
        }
    </style>
    

    对于如何在PS中切出2倍图,3倍图,用到Cutterman插件

  • 相关阅读:
    我的周记17——“世界再美,也美不过我一日三餐,心情再坏,也坏不过我没心没肺”
    【测试-移动端】 聊聊手机端的测试
    Java基础篇---多线程
    BIO和NIO实现文件复制
    IO操作-BIO
    js数组去重
    js json对象操作
    23种设计模式,每天一种设计模式(2)
    23种设计模式,每天一种设计模式
    .net画二叉树
  • 原文地址:https://www.cnblogs.com/deer-cen/p/12093719.html
Copyright © 2011-2022 走看看