页面适配之pt、px、em、rem用法和特点

因为自己也经常做移动端的开发工作,现总结一份页面适配的笔记。

1. pt

点(Points),绝对长度单位。
印刷业上常使用的单位,磅的意思,一般用于页面打印排版。
不知道经常做设计的同学知不知道zeplin这个网站,它用的像素单位都是pt。
1in = 2.54cm = 25.4 mm = 101.6q = 72pt = 6pc = 96px
用法:

div { font-size:10pt; }

这里写图片描述

2. px

相对长度单位。像素(Pixels)。像素px是相对于显示器屏幕分辨率而言的。

div { font-size:10px; }

兼容性和pt一样

px不会因为其它元素的尺寸变化而变化。

像素的大小是会“变”的,也称为“相对长度”,越高位的像素,其拥有的色板也就越丰富,越能表达颜色的真实感。

px特点:比较稳定和精确,但在浏览器放大缩小会出现页面混乱。

一般情况下,我们平时都是用px来定义字体,所以无法用浏览器字体放大的功能,IE无法调整那些使用px作为单位的字体大小。大部分网站能调整是因为用了相对长度单位em或rem。如果改变了浏览器的缩放,web页面样式就会乱掉,这样对于用户来说,就是个大问题了。这时,就提出了相对长度单位。
Firefox能够调整px和em,rem,但是96%以上的中国网民使用IE浏览器(或内核)。

假设就使用浏览器默认的字号16px,来看一些px单位与rem之间的转换关系:
这里写图片描述

如果你要设置一个不同的值,那么需要在根元素中定义,为了方便计算,时常将在元素中设置font-size值为62.5%:

html {
    font-size: 62.5%;
}

相当于在中设置font-size为10px,此时,上面示例中所示的值将会改变:
这里写图片描述

3.em

相对长度单位。相对于当前对象内文本的字体尺寸。
如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。
相对长度单位。像素(Pixels)。

div { font-size:10em; }

兼容性和pt一样。

em特点:
(1)em的值并不是固定的
(2)em会继承父级元素的字体大小

em表示相对于父元素的字体大小,em是相对单位,没有一个固定的度量值,而是由其它元素尺寸来决定的相对值。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。

任意浏览器的默认字体都是16px,所有未经调整的浏览器都符合:1em =16px。那么12px = 0.75em;10px = 0.625em;为了简化font-size的换算,需要在css中的body选择器中声明font-size=62.5%,这就使em值变为:16px*62.5% =10px;这样12px=1.2em;10px=1em,也就是说只需要将你原来数值px除以10就可以了。

使用em的注意点:
1. body选择器中声明Font-size=62.5%;
2. 将你的原来的px数值除以10,然后换上em作为单位;
3. 重新计算那些被放大的字体的em数值。避免字体大小的重复声明。

4. rem

相对长度单位。相对于根元素(即html元素)font-size计算值的倍数。是CSS3新增的一个相对单位(root em,根em)

div { font-size:10rem; }

这里写图片描述

rem可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。

5. px、pt、em、rem转化表:

pt=1/72(英寸) px=1/dpi(英寸) pt=px*dpi/72
以windows下的96dpi来计算,1pt=px*96/72=px*4/3

字号 Pixels Ems Percent Points
八号 6px 0.375em 37.5% 5pt
七号 7px 0.4375em 43.75% 5.5pt
小六 8px 0.5em 50% 6.5pt
9px 0.55em 55% 7pt
六号 10px 0.625em 62.5% 7.5pt
11px 0.7em 70% 8pt
小五 12px 0.75em 75% 9pt
13px 0.8em 80% 10pt
五号 14px 0.875em 87.5% 10.5pt
15px 0.95em 95% 11pt
小四 16px 1em 10% 12pt
17px 1.05em 105% 13pt
18px 1.125em 112.5% 13.5pt
四号 19px 1.2em 120% 14pt
20px 1.25em 125% 14.5pt
小三 21px 1.3em 130% 15pt
三号 22px 1.4em 140% 16pt
23px 1.45em 145% 17pt
小二 24px 1.5em 150% 18pt

6. 下面介绍下使用方法:

现在的使用方法很多,我直接介绍我偏向的这一种了

  1. rem在Sass中的使用方法
@function rem($values){
    $root :16px;
    $unit: rem;
    $list: ();
    @each $v in $values {
        $res:0;
        @if ($v == 0 or $v == auto or unit($v) == rem or unit($v) == em or unit($v) == vw or unit($v) == vh){
            $res: $v;
        }@else{
            $res: ($v + 0px) / $root + $unit;
       }
       $list : append($list , $res);
   }
   @return $list;
}

less也可以同理这么写一个

//SASS
div{
    margin:rem(10px 10rem 0 auto);
}
//编译后CSS
div{
    margin:0.625rem 10rem 0 auto;
}

2.rem在less中的使用方法,这是一种简单的实现方式

html{
    font-size:62.5%;
}
@baseFontSize:10;
.pxTorem(@name, @px){
  @{name}: @px / @baseFontSize * 1rem;
}
.pxTorem(@name, @px1 , @px2){
  @{name}: @px1 / @baseFontSize * 1rem @px2 / @baseFontSize * 1rem;
}
.pxTorem(@name, @px1 , @px2 , @px3 ){
  @{name}: @px1 / @baseFontSize * 1rem @px2 / @baseFontSize * 1rem @px3 / @baseFontSize * 1rem;
}
.pxTorem(@name, @px1 , @px2 , @px3 , @px4){
  @{name}: @px1 / @baseFontSize * 1rem @px2 / @baseFontSize * 1rem @px3 / @baseFontSize * 1rem @px4 / @baseFontSize * 1rem;
}
//LESS
div{
    .pxTorem(width,100);
    .pxTorem(height,100);
    .pxTorem(padding,10,20);
    .pxTorem(margin,10,20,30,40);
}
//编译后 CSS
div{
    width:10rem;
    height:10rem;
    padding:1rem 2rem;
    margin:1rem 2rem 3rem 4rem;
}

7.其它方法

1 . px转rem在线工具
这是我看另一个网友推荐的:
[http://alurk.com/](http://alurk.comhttp://www.ofmonkey.com/front/rem

2.gulp等各类打包工具
这个方法比较激进,打包时直接匹配px,强行转为rem。

var replace = require('gulp-replace');
gulp.task('pxToRem', function(){
  return gulp.src('*.html')
    .pipe(replace(/(\d+)px/g, function(match, p1){
        return Number(p1) / 10 + 'rem';
    }))
    .pipe(gulp.dest('dir'));
});
  1. 基于编辑器sublime Text插件cssrem
    参考https://github.com/flashlizi/cssrem

  2. Idea 也有SCSS SASS LESS对应的自动转换插件

猜你喜欢

转载自blog.csdn.net/weixin_42881744/article/details/81544810