每日鸡汤:你所有的烦恼都是做的太少,想的太多
目录
关于css单位的使用是很重要的知识,我之前所接触的项目中很少做适配,最近开始有一个项目使用了rem,现在很有必要总结一下。
px 是像素单位,在完全是像素实现的项目中,所有的距离字号等,都是固定的,不会根据屏幕宽高,或者浏览器的缩放而产生变化,对于我们开发者,直接根据设计图写就行,几乎没有难度,不用思考。
mdn官方文档描述
在 font-size 中使用是相对于父元素的字体大小,在其他属性中使用是相对于自身的字体大小,如 width
也就是说,在font-size属性使用em的时侯,子元素是父元素字体的n倍
- .box {
- font-size: 16px;
- .text {
- font-size: 2em
- }
- }

在其他属性中使用是相对于自身的字体大小(这个例子字体大小是20px )、width的宽度为
20px * 6 = 6em,也就是6个自己的单个字符的宽度
- .box {
- font-size: 20px;
- }
- .text {
- font-size: 20px;
- width: 6em;
- border: 1px solid red;
- }

em的主要应用在,给一段文字增加缩进,比如在排版的时候,中文要求段首空两个字符即可。
- .text {
- text-indent: 2em;
- }

除此之外,em经常用来给字体设置行高的时候使用
line-height:该属性的应用值是这个无单位数字<数字>乘以该元素的字体大小。计算值与指定值相同。大多数情况下,这是设置
line-height的推荐方法,不会在继承时产生不确定的结果。
- // 这两种写法是等价的,无单位 = em = 字体自身的大小
- .text {
- line-height: 2;
- }
-
- .text {
- line-height: 2em
- }
与em不同,无论是font-size还是其他属性,都是相对于根元素(html)的字体大小。所以,一般的适配使用的都是rem,因为只要修改根元素的大小,整个项目总所有用到rem的地方都会等比例同时缩放,很方便。
在很久之前,使用jquery写项目的时候,使用rem,需要在html中加入这么一个脚本。
那么为什么分界线是375呢,因为我们的设计稿是按照375的宽度设计的!
- (function (doc, win) {
- var docEl = doc.documentElement,
- resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
- recalc = function () {
- var clientWidth = docEl.clientWidth;
- if (!clientWidth) return;
- if (clientWidth >= 375) { // 宽度大于375固定设置根元素100px
- docEl.style.fontSize = '100px';
- } else {
- // 宽度小于375,适配移动端,动态计算根元素的font-size
- // 这个计算表达式,得到了一个缩放比例 scale
- docEl.style.fontSize = (clientWidth / 375) * 100 + 'px';
- }
- };
- if (!doc.addEventListener) return;
- win.addEventListener(resizeEvt, recalc, false);
- doc.addEventListener('DOMContentLoaded', recalc, false);
- })(document, window);
然后我们在使用的时候,假设设计稿是这样的:
- .text {
- font-size: 10px;
- margin-top: 20px;
- }
我们需要改成这样:
- .text {
- font-size: 0.1rem;
- margin-top: 0.2rem;
- }
无论是font-size属性,还是其他属性,都按照设计稿的值,除100再使用,为什么除100呢,因为我们的根元素设置的font-size=100,这也是为什么我们选择100这样的整数了,因为好算。你当然可以设置99,98 等任何你喜欢的数字,但是我们在开发的过程中10/99此类的值太难算了,不要自己给自己找麻烦。
或者这样也可以,参考,给根元素设置font-size: 62.5%;
假设,我们使用的是上面的例子,给html的font-size:100px
在我们用光标选中文字复制,并粘贴到富文本编辑器,word 等带格式的编辑器的时候,字体会很大,因为复制的时候保留了字体的字号等属性。
所以对于有这种复制需求的情况,我们可以
有一个很好用的px转rem的插件,不用我们自己算了,只要配置一下就可以。
或者,使用postcss-px2rem-include使用,可以设置根像素大小,和应用的页面
看过100遍文档,不如自己手动写一个项目,记忆的深刻。仅供自己学习记录使用,有问题欢迎指正。