垂直居中基本上是入门CSS必须要掌握的问题了,我们肯定在各种教程中都看到过“CSS垂直居中的N种方法”,通常来说,这些方法已经可以满足各种使用场景了,然而当我们碰到了需要使用某些特殊字体进行混排、或者使文字对齐图标的情况时,也许会发现,无论使用哪种垂直居中的方法,总是感觉文字向上或向下偏移了几像素,不得不专门对它们进行位移,为什么会出现这种情况呢?
对于中文字体,本身的设计上没有基线、升部、降部等说法,每个字都在一个方形盒子中。但是在计算机上显示时,也在一定程度上沿用了西文字体的概念,通常来说,中文字体的方形盒子中文字体底端在baseline和descender之间,顶端超出一点ascender,而标点符号正好在baseline上。
constemSize=2048;constascent=1854;constdescent=434;constcapitalHeight=1467;
//计算前需要已知给定的字体大小constfontSize=FONT_SIZE;//根据文字大小,求得文字的偏移constverticalAlign=((ascent-descent-capitalHeight)/emSize)*fontSize;return(
由此设置以后,外层span将表现得像一个普通的可替换元素参与行内的布局,在一定程度上无视字体metrics的差异,可以使用各种方法对其进行垂直居中。由于这种方案具有固定的计算步骤,因此可以根据具体的开发需求,将其封装为组件、使用CSS自定义属性或使用CSS预处理器对文本进行处理,通过传入字体信息,就能修正文字垂直偏移。
ECMAScript模块(简称ES模块)是一种JavaScript代码重用的机制,于2015年推出,一经推出就受到前端开发者的喜爱。在2015之年,JavaScript还没有一个代码重用的标准机制。多年来,人们对这方面的规范进行了很多尝试,导致现在有多种模块化的方式。
你可能听说过AMD模块,UMD,或CommonJS,这些没有孰优孰劣。最后,在ECMAScript2015中,ES模块出现了。
我们现在有了一个“正式的”模块系统。
理论上,ES模块应该在所有JavaScript环境中。实际上,ES模块的主要应用还是在浏览器上。
ECMAScript模块要想在任何JavaScript环境通用,可能还需要很长的路要走,但方向是正确的。
//utils.jsexportfunctionfuncA(){return"Hellonamedexport!";}exportdefaultfunctionfuncB(){return"Hellodefaultexport!";}这里有两个导出。
第一个是命名导出,后面是exportdefault,表示为默认导出。
假设我们的项目文件夹中有一个名为utils.js的文件,我们可以将这个模块提供的对象导入到另一个文件中。
假设我们在项目文中还有一个Consumer.js的文件。要导入utils.js公开的函数,我们可以这样做:
//consumer.jsimport{funcA}from"./util.js";这种对应我们的命名导入方式.
如果我们要导入utils.js中的默认导出也就是funcB方法,我们可以这样做:
//consumer.jsimport{funcA}from"./util.js";当然,我们可以导入同时导入命名和默认的:
//consumer.jsimportfuncB,{funcA}from"./util.js";funcB();funcA();我们也可以用星号导入整个模块:
import*asmyModulefrom'./util.js';myModule.funcA();myModule.default();注意,这里要使用默认到处的方法是使用default()而不是funcB()。
从远程模块导入:
myModule.js内容如下:
exportfunctionappendResult(element){constresult=Math.random();element.innerText+=result;}动态导入ES模块是静态的,这意味着我们不能在运行时更改导入。随着2020年推出的动态导入(dynamicimports),我们可以动态加载代码来响应用户交互(webpack早在ECMAScript2020推出这个特性之前就提供了动态导入)。
考虑下面的代码: