拿到设计方案稿后,怎样开展合理布局复原?
假如只必须做非精准的回应式设计方案,那末应用新闻媒体查寻来完成就 OK 了。假如必须精准复原设计方案稿,则1般根据放缩来完成。普遍计划方案有根据 viewport 和根据 rem 的放缩计划方案。
1 viewport 放缩计划方案
在挪动端,能够根据 viewport 放缩网页页面尺寸比率做到目地。
简易来讲,即全部宽高像素与视觉效果稿輸出同样,随后根据网页页面宽度与视觉效果稿的宽度比率,动态性设定 viewport。放缩计划方案关键编码参照:
(function () { var docEl = document.documentElement; var isMobile = window.isMobile /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobi/i.test(navigator.userAgent); function setScale() { var pageScale = 1; if (window.top !== window) { return pageScale; } var width = docEl.clientWidth || 360; var height = docEl.clientHeight || 640; if (width / height >= 360 / 640) { // 高宽比优先选择 pageScale = height / 640; } else { pageScale = width / 360; } var content = 'width=' + 360 + ', initial-scale=' + pageScale + ', maximum-scale=' + pageScale + ', user-scalable=no'; document.getElementById('viewport').setAttribute('content', content); window.pageScale = pageScale; } if (isMobile) { setScale(); } else { docEl.className += ' pc'; } })()
这类计划方案在大家上年的1次 H5 主题活动页设计方案中开展了有关实践活动。
可是假如期待 PC 上也能显示信息,因为沒有 viewport 的放缩定义,只能以固定不动值来设置,这个实际效果就不太理想化。
2 rem 合理布局兼容计划方案
rem 合理布局兼容计划方案被提到的较为多,在各大互联网技术公司商品中都有较为普遍的运用。
简易来讲其方式为:
- 依照设计方案稿与机器设备宽度的占比,动态性测算并设定 html 根标识的 font-size 尺寸;
- css 中,设计方案稿元素的宽、高、相对性部位等赋值,依照同样占比换算为 rem 为企业的值;
- 设计方案稿中的字体样式应用 px 为企业,根据新闻媒体查寻稍作调剂。
下面大家举个事例来讲明。
2.1 动态性设定 html 标识 font-size 尺寸
第1个难题是 html 标识的 font-size 动态性测算。这取决于怎样承诺换算占比,以网页页面宽度10等份为例,关键编码参照:
(function(WIN) { var setFontSize = WIN.setFontSize = function (_width) { var docEl = document.documentElement; // 获得当今对话框的宽度 var width = _width || docEl.clientWidth; // docEl.getBoundingClientRect().width; // 超过 1080px 按 1080 if (width > 1080) { width = 1080; } var rem = width / 10; console.log(rem); docEl.style.fontSize = rem + 'px'; // 一部分机型上的偏差、适配性解决 var actualSize = win.getComputedStyle && parseFloat(win.getComputedStyle(docEl)["font-size"]); if (actualSize !== rem && actualSize > 0 && Math.abs(actualSize - rem) > 1) { var remScaled = rem * rem / actualSize; docEl.style.fontSize = remScaled + 'px'; } } var timer; //涵数节流阀 function dbcRefresh() { clearTimeout(timer); timer = setTimeout(setFontSize, 100); } //对话框升级动态性更改 font-size WIN.addEventListener('resize', dbcRefresh, false); //网页页面显示信息时测算1次 WIN.addEventListener('pageshow', function(e) { if (e.persisted) { dbcRefresh() } }, false); setFontSize(); })(window)
此外,针对全屏显示信息的 H5 主题活动页,对宽高占比有一定的规定,此时理应做的调剂。能够这么来做:
function adjustWarp(warpId = '#warp') { // if (window.isMobile) return; const $win = $(window); const height = $win.height(); let width = $win.width(); // 考虑到导航栏栏状况 if (width / height < 360 / 600) { return; } width = Math.ceil(height * 360 / 640); $(warpId).css({ height, width, postion: 'relative', top: 0, left: 'auto', margin: '0 auto' }); // 再次测算 rem window.setFontSize(width); }
依照这类放缩方式,基本上在任何机器设备上都可以以完成等比放缩的精准合理布局。
2.2 元素尺寸赋值方式
第2个难题是元素尺寸的赋值。
以设计方案稿宽度 1080px 为例,大家将宽度分成 10 等份便于于换算,那末 1rem = 1080 / 10 = 108px 。其换算方式为:
const px2rem = function(px, rem = 108) { let remVal = parseFloat(px) / rem; if (typeof px === "string" && px.match(/px$/)) { remVal += 'rem'; } return remVal; }
比如,设计方案稿中有1个照片尺寸为 460x210 ,相对性网页页面部位 top: 321px; left: 70; 。依照如上换算方法,获得该元素最后的 css 款式应为:
.img_demo { position: absolute; background-size: cover; background-image: url('demo.png'); top: 2.97222rem; left: 0.64814rem; width: 4.25926rem; height: 1.94444rem; }
2.3 rem 合理布局计划方案的开发设计方法
根据以上方式,rem 合理布局计划方案就获得了完成。可是手动式测算 rem 的赋值明显不实际。
根据 less/sass 预解决专用工具,大家只必须设定 mixins 方式,随后依照设计方案稿的具体尺寸来赋值便可。以 less 为例,mixins 参照以下:
// px 转 rem .px2rem(@px, @attr: 'width', @rem: 108rem) { @{attr}: (@px / @rem); } .px2remTLWH(@top, @left, @width, @height, @rem: 108rem) { .px2rem(@top, top, @rem); .px2rem(@left, left, @rem); .px2rem(@width, width, @rem); .px2rem(@height, height, @rem); }
对于前文的示例元素,css 款式能够这样来写:
.img_demo { position: absolute; background-size: cover; background-image: url('demo.png'); .px2remTLWH(321, 70, 460, 210); }
这里,宽和高能够立即根据设计方案稿輸出的照片元素尺寸载入到;top/left 的赋值,能够根据在 Photoshop 中挪动参照线精准定位元素迅速获得。
2.4 字体样式应用 px 为企业
字体样式应用 rem 等比放缩会出現显示信息上的难题,只必须对于性应用新闻媒体查寻设定几种尺寸便可。
示例参照:
// 字体样式回应式 @media screen and (max-width: 321px) { body { font-size: 13px; } } @media screen and (min-width: 321px) and (max-width: 400px) { body { font-size: 14px; } } @media screen and (min-width: 400px) { body { font-size: 16px; } }
以上便是本文的所有內容,期待对大伙儿的学习培训有一定的协助,也期待大伙儿多多适用脚本制作之家。