1.项目中用了模块化设计?详细描述,这个模块化设计在这个项目中的角色是什么,你又做了哪些优化的工作
css模块化设计&&js模块化设计
css模块化设计
问题提出:
1.在同一个页面中,如何用btn这个类名来显示两种不同的按钮
2.两个不同的页面,有相同的样式模块,如何重用css代码
js模块化设计
common.js是放一些比如公司里的注册、登录这些所有的项目通用的东西,而不是局限在页面和页面之间公共的东西,而是公司内所有的大项目,比如说公司有好几个项目,这些项目之间都用到登录注册这些体系中的东西,这是整个公司通用的,而不是某个业务通用的,
layout.js某个项目就布局来说,a页面和b页面都有同样的布局,那么就可以抽象出来一个layoutjs
util.js是一些辅助函数的设计
2.自适应方案设计
物理像素&&逻辑像素&&dpr
css像素 px 逻辑像素
绝大多数的电脑显示器
1920*1080
表示屏幕的宽上排列了1920个像素点
屏幕的高上排列了1080个像素点
物理像素没有确切的大小
16px的字体在大屏幕的1080屏幕上,可能显示更大一些
设备 | 物理像素 | 逻辑像素 | 逻辑像素 |
---|---|---|---|
xxx | 640*960 | 320*480 | 2 |
xxx | 640*1136 | 320*568 | 2 |
xxx | 750*1334 | 375*667 | 2 |
xxx | 1242*2208 | 414*736 | 3 |
iPhone4 iPhone5 iPhone6 四个物理像素点聚合成一个css像素点
因为市面上的设备很多,所以很多公司会采用iPhone678设备的分辨率750*1334
在iPhone5为主要设备时,设计图基本为640*xxx
设置视口,在移动端设计中,必须要设置视口,
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
viewport属于meta标签的一种
content='width=device-width表示让物理像素聚合变成标准的逻辑像素,这样才能让16px的大小在移动端和pc端显示的一样大
为什么使用rem作为单位,因为是基于HTML字体大小单位,他有一个统一标准,这种方案推崇的是在不同设备上显示的效果形同(等比缩放)。因此我们以750的设计图为标准,100px作为标准字体大小,因为要等比放大和缩小,因此根据设备宽度改变HTML大小,因此得到公式
fontsize:设备宽度=100:设计图宽度(750)
fontsize=100*设备宽度/设计图宽度
当页面加载完成后计算字体大小并设置
当页面大小改变后计算字体大小并设置
window.onload = function(){
/*720代表设计师给的设计稿的宽度,你的设计稿是多少,就写多少;100代表换算比例,这里写100是
为了以后好算,比如,你测量的一个宽度是100px,就可以写为1rem,以及1px=0.01rem等等*/
getRem(720,100)
};
window.onresize = function(){
getRem(720,100)
};
function getRem(pwidth,prem){
var html = document.getElementsByTagName("html")[0];
var oWidth = document.body.clientWidth || document.documentElement.clientWidth;
html.style.fontSize = oWidth/pwidth*prem + "px";
}
代码二: 小米官网的写法
!function(n){
var e=n.document,
t=e.documentElement,
i=720,
d=i/100,
o="orientationchange"in n?"orientationchange":"resize",
a=function(){
var n=t.clientWidth||320;n>720&&(n=720);
t.style.fontSize=n/d+"px"
};
e.addEventListener&&(n.addEventListener(o,a,!1),
e.addEventListener("DOMContentLoaded",a,!1))
}(window);
3.代码维护和复用性设计的思考
一个漂亮的项目不在于这个项目的难度有多大,这里面用了哪些算法、js交互有多复杂,这些一点都不重要,项目的亮点是什么,你的代码维护和复用性设计,比如说,产品新增加一个功能,你能用20分钟搞定他吗,如果产品说这个地方要改,一些交互和逻辑你能在短时间内快速的完成吗,还有,线上发现了bug,你能快速定吗,定位以后能快速的修复吗,这个和你代码的设计有关系,你又该怎么去做
如果你学习组件化只考虑js而不考虑css的设计,那么组件化是不完整的
需求变更:交互的耦合和解耦的过程