html⾃动适配⼿机屏幕,⼿机web——⾃适应⽹页设计
(htmlcss控制)
⼀. 允许⽹页宽度⾃动调整: "⾃适应⽹页设计"到底是怎么做到的?
其实并不难。 ⾸先,在⽹页代码的头部,加⼊⼀⾏viewport元标签。银行下午几点上班
viewport是⽹页默认的宽度和⾼度,上⾯这⾏代码的意思是,⽹页宽度默认等于屏幕宽度(width=device-width),原始缩放⽐
例(initial-scale=1)为1.0,即⽹页初始⼤⼩占屏幕⾯积的100%。
对于viewport属性,我是真正在接触移动web开发是才遇到的,⼀把的ps布局都是固定的960px,1000px这种。
下⾯三篇⽂章是对viewport属性详细的解释: Viewport(视区概念)——pc端的理解
Viewport(视区概念)——移动端的应⽤ viewport ——视区概念(转)
对于⽼式IE6,7,8浏览器需要js处理,由于主要平台是ios和安卓,所有可以暂时不考虑
⼆.不使⽤绝对宽度 由于⽹页会根据屏幕宽度调整布局,所以不能使⽤绝对宽度的布局,也不能使⽤具有绝对宽度的元素。
这⼀条⾮常重要。 具体说,CSS代码不能指定像素宽度: width:xxx px; 只能指定百分⽐宽度: width: xx%;
或者:width:auto;
这⾥开发是指⼀个⽹页不仅能⽤在ps上,也能同时⽤于移动端,但是对于webapp这种还是需要单独做⼀个webapp使⽤的页⾯。
对于这个知识点,对于我⽬前做的项⽬有⽤处,主要⽤于控制限定数据库⾥读出来的图⽚宽度。 详见:⼿机webapp的jquery mobile初次使⽤⼼得和解决图⽚⾃适应⼤⼩问题
三. 相对⼤⼩的字体 字体也不能使⽤绝对⼤⼩(px),⽽只能使⽤相对⼤⼩(em)。body { font: normal 100% Helvetica, Arial, sans-serif; }
益阳美食上⾯的代码指定,字体⼤⼩是页⾯默认⼤⼩的100%,即16像素。h1 { font-size: 1.5em; }
然后,h1的⼤⼩是默认⼤⼩的1.5倍,即24像素(24/16=1.5)。small { font-size: 0.875em; }
small元素的⼤⼩是默认⼤⼩的0.875倍,即14像素(14/16=0.875)。四.流动布局(fluid grid) "流动布局"的含义是,各个区块的位置都是浮动的,不是固定不变的。main { float: right; width: 70%; } .leftBar { float: left; width: 25%; }
float的好处是,如果宽度太⼩,放不下两个元素,后⾯的元素会⾃动滚动到前⾯元素的下⽅,不会在⽔平⽅向overflow(溢出),避免了⽔平滚动条的出现。 另外,绝对定位(position: absolute)的使⽤,也要⾮常⼩⼼。五. "⾃适应⽹页设计"的核⼼,就是CSS3引⼊的Media Query模块。 它的意思就是,⾃动探测屏幕宽度,然后加载相应的CSS⽂件。
上⾯的代码意思是,如果屏幕宽度⼩于400像素(max-device-width: 400px),就加载tinyScreen.css⽂件。
如果屏幕宽度在400像素到600像素之间,则加载smallScreen.css⽂件。 除了⽤html标签加载CSS⽂件,还可以在现有CSS⽂件中加载。@import url("tinyScreen.css") screen and (max-device-width: 400px);
六. CSS的@media规则 同⼀个CSS⽂件中,也可以根据不同的屏幕分辨率,选择应⽤不同的CSS规则。@media screen and (max-device-width: 400px) { .column { float: none; width:auto; } #sidebar { display:none; } }
上⾯的代码意思是,如果屏幕宽度⼩于400像素,则column块取消浮动(float:none)、宽度⾃动调节(width:auto),sidebar块不显⽰(display:none)。
七. 图⽚的⾃适应(fluid image) 除了布局和⽂本,"⾃适应⽹页设计"还必须实现图⽚的⾃动缩放。
这只要⼀⾏CSS代码:
img { max-width: 100%;} 这⾏代码对于⼤多数嵌⼊⽹页的视频也有效,所以可以写成:
img, object { max-width: 100%;}
⽼版本的IE不⽀持max-width,
所以只好写成: img { width: 100%; }
此外,windows平台缩放图⽚时,可能出现图像失真现象。这时,可以尝试使⽤IE的专有命令:img { -ms-interpolation-
mode: bicubic; } 或者,Ethan Marcotte的imgSizer.js。
addLoadEvent(function() { ElementById("content").getElementsByTagName("i
mg"); llate(imgs); });
不过,有条件的话,最好还是根据不同⼤⼩的屏幕,加载不同分辨率的图⽚。有很多⽅法可以做到这⼀条,服务器端和客户端都可以实现。
8.字体rem⾃适应⼤⼩
先来个css版的。/*移动端适配 width|height|font-size = 视觉稿量出来的值 / 100rem;@lbl*/
@media screen and (max-width:359px) and (min-width:320px){
html,body{
font-size: 50px !important;
}
}
@media screen and (max-width:374px) and (min-width:360px){
html,body{
font-size: 56.25px !important;
}
}
@media screen and (max-width:413px) and (min-width:375px){
html,body{
font-size: 58.5px !important;
}
}
@media screen and (max-width:639px) and (min-width:414px){
html,body{
font-size: 64.6px !important;
让爱永驻心中演讲稿600字初二}
}@media screen and (min-width:640px){
html,body{
font-size: 100px !important;
}
}
rem顾名思义就是root element,这个是⼀个相对的单位,与em的差别在于rem相对的是根节点html的font-size,em相对的是⽗元素
font-size。使⽤rem其实是⽤媒体查询修来改html的font-size,那么使⽤rem的元素的⼤⼩也会相应的改变,所以我们只要写⼀份css就可以适配所有⼿机的屏幕了。虽然rem在某些浏览器下⾯不够精准,但那也只是极少数,如果需要⾮常精准的适配,那么可以使⽤js来计算html的font-size。
很多开发者听到适配的第⼀反应就是⼿机的屏幕宽度多少多少,物理像素多少多少,然后考虑适配。这是从设配的⾓度⼊⼿,拿视觉稿去适配⼿机。难道我们就不能抛开设备从视觉稿⼊⼿吗?那么就来看看。
设计师给的视觉稿,⼀般都是按照640px来设计的。当我们拿到视觉稿时,⾸先把视觉稿的宽度转换为rem,我们并不需要考虑设备的分辨率,只需要按照 视觉稿宽度 = font-size x rem 这个公式来计算就好了。视觉稿的宽度是给定的,我们以640px为例,font-size 与rem是两个变量,我们只需要它们的乘积等于640即可。我们采⽤定⼀变⼀的⽅式,假定rem=6.4,那么初始值font-size就必须等于 100px,我们就可以根据需要适配的屏幕宽度来等⽐例调整font-size。那么如果我们640px的视觉稿需要显⽰成320px呢,我们只需要把font-size对应的缩⼩⼀半就可以了。其他的什么375px、414px、各种的屏幕,只需要等⽐例缩放就好了。⽐如:
320px: font-size = 320 / 640 * 100 = 50px;
360px:font-size = 360 / 640 * 100 = 56.25px;
.........
800px:font-size = 800 / 640 * 100 = 125px;
其实按照⽐例算出来的font-size,我都是向下取⼩数点,这样可以保证元素的宽度不会超过总宽度。只是如果我们的视觉稿宽度给的是640px,但是需要在⼤于640的设备下显⽰的话,那么就会出现图⽚模糊等现象了,所以我们⼀般都使⽤⼤的视觉稿来适配⼩的屏幕。⽐如需要适配⽐640px⼤的屏幕,你可以让设计师根据宽度为960px来设计,然后转换为9.6rem,初始值font-size=100px;再根据需要适配的屏幕宽度来等⽐例调整font-size的⼤⼩就好了。
如果想需要更准确的适配,可以使⽤js动态计算窗⼝的宽度来改变font-size的⼤⼩,阿⾥⼿淘使⽤的flexible也是这样的⽅式,以下是趴下来的⼀份flexible的简化版(function(win) {
var remCalc = {};
var docEl = win.document.documentElement,
tid;
function refreshRem() {
// 获取当前窗⼝的宽度
var width = BoundingClientRect().width;
// ⼤于640px 按640算
if (width > 640) { width = 640 }
// 把窗⼝的宽度固定分为10份 也就是10rem
// 按视觉稿640算 640/10=64px 那么1rem = 64px
// 640视觉中 80px*80px的按钮 转换为rem 80/64 = 1.25rem
// 按钮的宽⾼固定为 1.25rem * 1.25rem
// 当窗⼝宽度缩放为 320px的时候
// 那么 1rem = 32px
// 原来 80px*80px的按钮现在变为 1.25rem * 32px = 40px
// 按钮变为 40px * 40px
// 其他宽度也类似
/
/
// cms做法也类似
// 只是我们把窗⼝宽度固定分为 6.4份,即6.4rem
// 所以 1rem = 100px
// 640视觉中 80px*80px的按钮 转换为rem 80/100 = 0.8rem
// ....其他也差不多
//
//
// 对⽐
// 其实也就是计算rem的问题 视觉稿量出来的值 除64 或 100的问题
// 除100 总⽐ 除64 好⼝算漫画的启示作文400字等着乘凉
/
/ 就算⽤sass写个 @function px2rem代替⼝算
// .8rem 总⽐输⼊ px2rem(80)少⼏个字符
//
//
var rem = width / 10; // cms 只要把这⾏改成 var rem = width /640 * 100
docEl.style.fontSize = rem + "px";
中国电信网上营业厅缴费 = rem;
//误差、兼容性处理
var actualSize = ComputedStyle(document.documentElement)["font-size"]); if (actualSize !== rem && actualSize > 0 && Math.abs(actualSize - rem) > 1) {
var remScaled = rem * rem / actualSize;
docEl.style.fontSize = remScaled + "px"
}
}
//函数节流,避免频繁更新
function dbcRefresh() {
clearTimeout(tid);
tid = setTimeout(refreshRem, 100)
}
//窗⼝更新动态改变font-size
win.addEventListener("resize", function() { dbcRefresh() }, false);
//页⾯显⽰的时候再计算⼀次 难道切换窗⼝之后再切换来窗⼝⼤⼩会变?....
win.addEventListener("pageshow", function(e) {
if (e.persisted) { dbcRefresh() }
}, false);
refreshRem();
<2px = function(d) {
var val = parseFloat(d) * ;
if (typeof d === "string" && d.match(/rem$/)) { val += "px" } return val
};
remCalc.px2rem = function(d) {
var val = parseFloat(d) / ;
if (typeof d === "string" && d.match(/px$/)) { val += "rem" } return val
};
})(window);
// 考拉移动端全站使⽤rem的不是很多
// 主要⽤100%布局 ⽐如width、height、padding
// 也有直接⽤px 字体⼤⼩使⽤px固定不变
// 还有使⽤em的 基于font-size 定line-height
// 全站元素使⽤ box-sizing: border-box
// 多⾏省略号 text-overflow: ellipsis; -webkit-line-clamp: 2;
银行从业证书申请// ⾮主要页⾯很多都是图⽚ 影响seo 看得出很缺前端
// 使⽤rem 最好⽂字都指定字体⼤⼩ 不然会继承html的font-size 【编辑推荐】
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论