25.移动端像素比

像素简介

1.基本概念

像素

屏幕是由一个一个发光的小点构成,这一个个小点就是像素

分辨率:1920 x 1080 说的就是屏幕中小点的数量

在前端开发中像素分成两种情况讨论,css像素物理像素

  • 物理像素,上述所说的小点点就属于物理像素,凡是截图工具量出来的都是物理像素。

  • css像素,编写网页时我们所用的像素就是css像素

浏览器在显示网页时,需要将css像素转化为物理像素后再呈现

  • 一个css像素最终由几个物理像素呈现,由浏览器决定;
  • 默认情况下pc端,一个css像素 = 一个物理像素 1:1

视口(viewport)

视口就是屏幕中用来显示网页的区域

可以通过查看视口的大小,来观察css像素和物理像素的比值

默认情况下:

视口宽度 1920px(css像素)

     1920px(物理像素)

     此时,css像素物理像素的比值为1:1

放大两倍的情况:

视口宽度 960px(css像素)

     1920px(物理像素)

     此时,css像素物理像素的比值为1:2

我们可以同构改变视口的大小,来改变css像素和物理像素比值         

移动端

在不同的屏幕,单位像素的大小是不同的,像素越小屏幕越清晰

  显示屏 24寸 1920 x 1080

  iphon6 4.7寸 750 x 1334

智能手机的像素点,远远小于 计算机像素点

问题:一个宽度为900px的网页在iphon6中要如何显示?

默认情况下,移动端网页都会将视口设为980像素(css像素)

  以确保pc端网页可以在移动端正常访问,但是网页宽度超过了980像素,移动端浏览器会自动对网页进行缩放以完整显示网页。

一个查看屏幕像素比的网站:https://www.25xt.com/screen/phone.html

所以基本大部分的pc端网站都可以在移动端中正常浏览,但往往都不会有一个很好的体验,为了解决这个问题,大部分网站都会为移动端单独设计一个网页。

 

像素比

移动端默认的窗口大小是980px(css像素)

  默认情况下,移动端的像素比就是 980/移动端宽度 (980/750)

  如果我们直接在网页中编写移动端代码,这样在980的视口下,像素比非常不友好,导致网页中的内容非常非常小。

  编写移动端页面时,必须确保有一个合适的像素比:(上图中的密度)

    1css像素 对应 2个物理像素1:2

    1css像素 对应 3个物理像素1:3

    ......

 

完美视口

可以通过meta标签设置窗口大小

  每一款移动设备设计时,都会有一个最佳的像素比,一般我们只需要将像素比设置为该值就会有一个最佳效果。

  将像素比设置为最佳像素比的视口大小我们称其为完美视口

  以iPhone6为例最佳的像素比为1:2(上图中的密度)

  计算最佳视口大小:750/2 = 350

<!-- 设置视口大小 -->
    <meta name="viewport" content="width=375px">

效果

但是这种限定写死的视口大小只适用于iPhone6,其他设备上就不一定是完美视口了。

有没有一种方法让页面在不同分辨率的手机上都是完美视口呢?

当然有,width=device-width在任何设备上都是完美视口

<!-- 设置视口大小 device-width表示设备的宽度(完美视口) -->
   <meta name="viewport" content="width=device-width, initial-scale=1">

initial-scale=1表示初始化缩放倍数等于1倍,效果和 width=device-width一样,一般情况下用一种就可以,

考虑到极端情况,比如横屏竖屏切换,还是两种都用的好。

 结论:以后再写移动端的页面,就把上面这玩意写上。

 

vw单位

 不同的设备完美美视口的大小是不一样的

  iPhone6 --375

  iPhone6plus --414

由于不同设备视口和像素比不同,所以同样的375个像素在不同设备下得意义是不一样的,

  比如iPhone6中 375就是全屏,而到了puls中就会少了一块

说以在移动端开发中就不要使用px来进行布局了

vw表示视口的宽度(viewport width)

  100vw = 整个视口宽度

  1vw = 1%视口宽度

vw这个单位永远相对于视口宽度进行计算

.box1 {
            width: 100vw;
            height: 100px;
            background-image: url(./img/backimg.jpeg);
        }

 

 

二(三)倍图

 

 根据不同的视口的像素比,分为2倍图3倍图等;

我们常用的就是2倍图和3倍图,应为兼容性比较强。

 

有道单词书界面

 

单位换算px-->vw

 

 上面有道图是一个三倍图,应为找不到素材所以手机截的屏,图片大小1080 x 2340。直接在浏览器手机窗口打开只能显示1/3。

设计图是

  1080px

使用vw做单位

  100vw

创建一个 426px  x  155px  大小的元素

100vw = 1080px(设计图像素)0.0925925925925925vw = 1px

39.444vw = 426px(设计图像素)

14.352vw = 155px(设计图像素)

.box1 {
            width: 39.444vw;
            height: 14.352vw;
            background-color: red;
            border-radius: 30px;
        }

 

vm适配

  网页中字体大小最小为12px,不能设置一个比12像素还小的像素,如果设置了一个小于12px的字体,则字体自动设置为12px。

这种情况在2022年新版本的浏览器如,火狐、edge上已经不适用了,网页中的字体不再做限制,可以比12px小。

所以在一些新版本浏览器上,rem适配方法已经可以使用了。

 rem单位

  1rem = 1html字体大小

在此图中

  1rem = 1html = 1px = 0.0925925925925925vw

 我们可以在html设置字体大小

        html{ 
            font-size: 0.0925925925925925vw;
        }
        .box1 {
            width: 426rem;
            height: 155rem;
            background-color: red;
            border-radius: 30px;
        }

 

 

 有道单词本界面设计

 

html代码

查看代码
 <!DOCTYPE html>
<html lang="">

<head>
    <title></title>
    <meta charset="UTF-8">
    <!-- 移动端设置完美视口 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 清除样式 -->
    <link href="css/reset.css" rel="stylesheet">
    <!-- 引入图标字体 -->
    <link rel="stylesheet" href="./fontawesome/css/all.css">
    <body>
    <!-- 创建整个视图上半部分容器 -->
    <div class="upper-part">
        <!-- 创建头部 -->
        <ul class="topbar">
            <li class="fas fa-signal"></li>
            <li class="fas fa-signal"></li>
            <li><span>17:06 …</span></li>
            <li class="fas fa fa-wifi"></li>
            <li class="fas fa fa-battery-3"></li>
        </ul>
        <!-- 工具按钮 -->
        <div class="tool-but">
            <button class="setter">设置</button>
            <div class="function">
                <i class="fas fa-ellipsis-h"></i>
                <span>|</span>
                <i class="fas fa-times-circle"></i>
            </div>
        </div>
        <!-- 打卡提醒 -->
        <div class="reminder">
            <span>今日未打卡</span>
            <ul class="days">
                <li><span>2</span></li>
                <li><span>3</span></li>
                <li><span>4</span><i class="point">.</i></li>
                <li><span>5</span></li>
                <li><span>6</span></li>
                <li><span>7</span></li>
                <li><span>8</span></li>
            </ul>
        </div>
        <!-- 标题卡片容器-学习复习 -->
        <ul class="headline">
            <li class="row1">
                <span class="item1">四级英语词汇<i class="fas fa fa-angle-right"></i></span>
                <span class="item2">更换</span>
                <div class="item3"><i class="fas fa-earth"></i>听单词<i class="fas fa fa-angle-right"></i></div>
            </li>
            <li class="row2">
                <span>5/2607 <i class="fas fa-info-circle"></i></span>
            </li>
            <li class="row3">
                <div class="study"><span class="span-big">学习</span><i
                        class="fas fa fa-window-minimize"></i><span>待学习20</span></div>
                <div class="review"><span class="span-big">
                        复习</span><i class="fas fa fa-window-minimize"></i><span>待复习20</span></div>
            </li>
        </ul>
    </div>
</body>

</html>

css代码

查看代码
  <style>
        /* 将UI的px尺寸转换为vw尺寸 100vw / 1080px =  0.0925925925925925vw*/
        /* 设置 1 html字体大小为 0.0925925925925925vw ==> 1px=0.0925925925925925vw*/
        html {
            font-size: 0.0925925925925925vw;
        }

        /* 应为我们更改了默认12px的像素大小,一些字体和图标不会显示
        所以要重新定义一下 */
        .fas,
        span,
        i {
            font-size: 12px;
        }

        /* 上半部分容器 */
        .upper-part {
            width: 100%;
            height: 920rem;
            background-color: rgb(230, 237, 251);
            display: flex;
            /* 主轴方向 */
            flex-direction: column;
            justify-content: space-around;
        }

        /* 最顶部 信号 WiFi 等 */
        .topbar {
            display: flex;
        }

        .topbar li:nth-child(1) {
            margin-left: 131rem;
        }

        .topbar li:nth-child(2) {
            margin-left: 30rem;
        }

        .topbar li:nth-child(3) {
            margin-left: 50rem;
            margin-right: 520rem;
        }

        .topbar li:nth-child(4) {
            margin-right: 10rem;
        }

        /* 第二行 设置按钮那一行 */
        .tool-but {
            display: flex;
        }

        .setter {
            width: 140rem;
            height: 80rem;
            /* margin: auto; */
            background-color: transparent;
            border: 1rem solid #cdcee0;
            border-radius: 20rem;
            margin-left: 657rem;
            margin-right: 25rem;
        }

        .function {
            width: 225rem;
            height: 90rem;
            background-color: #ffffff;
            border-radius: 50rem;
            display: flex;
            justify-content: space-evenly;
            align-items: center;
        }

        .function i,
        .function span {
            font-size: 50rem;
            color: #31333a;
        }

        /* 打卡提醒和天数那一行 */
        .reminder {
            display: flex;
            align-items: center;
            justify-content: space-around;
        }

        .reminder span {
            font-size: 50rem;
        }

        .reminder .days {
            width: 570rem;
            height: 90rem;
            background-color: #e4e3f5;
            border-radius: 50rem;
            display: flex;
            justify-content: space-evenly;
            align-items: center;
            color: #8b93a0;
        }

        .days li:nth-child(3) {
            width: 60rem;
            height: 60rem;
            background-color: #fff;
            border-radius: 50rem;
            text-align: center;
            line-height: 60rem;
            position: relative;
        }

        .days .point {
            position: absolute;
            top: 22rem;
            left: 25rem;
            color: #4268f1;
            font-size: 65rem;
        }

        /* 标题卡片容器-学习复习  */
        .headline {
            width: 980rem;
            height: 460rem;
            background-color: #ffffff;
            margin: 0 auto;
            box-sizing: border-box;
            border-radius: 50rem;
            display: flex;
            flex-direction: column;
            justify-content: space-around;
        }

        .headline li {
            justify-content: space-around;
        }

        .row1 {
            display: flex;
            align-items: center;
        }

        .row1 .item1 {
            font-size: 50rem;
            font-weight: bolder;
            padding-left: 66rem;
        }

        .row1 .item1 i {
            vertical-align: 4rem;
        }

        .row1 .item2 {
            margin-left: 60rem;
            margin-right: 200rem;
        }

        .row1 .item3 {
            height: 70rem;
            width: 243rem;
            font-size: 40rem;
            color: #ea3f48;
            /* background-color: #42b1f1; */
            border-radius: 50rem 0rem 0rem 50rem;
            background-image: linear-gradient(to right, rgb(245, 130, 130), #fff);
            display: flex;
            align-items: center;
        }

        .row1 .item3 i {
            margin-right: 10rem;
            margin-left: 10rem;
        }

        .row2 {
            padding-left: 66rem;
        }

        .row3 {
            display: flex;
        }

        .row3 .study,
        .row3 .review {
            width: 405rem;
            height: 135rem;
            border-radius: 100rem;
        }

        .study,
        .review {
            display: flex;
            justify-content: center;
            align-items: center;
            color: #e4e3f5;
        }

        .study i,
        .review i {
            transform: rotateZ(90deg);
            font-size: 30rem;
            color: rgba(217, 215, 215, 0.5);
            margin-left: 15rem;
        }

        .study {
            background-color: #fc4c3f;
        }

        .review {
            background-color: #3664ff;
        }

        .span-big {
            font-size: 50rem;
        }
    </style>

效果:

 

 

 

 

 

posted @ 2022-10-02 19:09  莫扎特03  阅读(371)  评论(0)    收藏  举报