服装行业网站建设规划,网站开发的技术方案,网站百度权重怎么提升,健康湖州网站一、前言 响应式Web设计可以让一个网站同时适配多种设备和多个屏幕#xff0c;可以让网站的布局和功能随用户的使用环境#xff08;屏幕大小、输入方式、设备/浏览器能力#xff09;而变化。本文主要介绍一些响应式布局容易忽略但又很重要的知识点。 二、视口 移动前端中常说…一、前言 响应式Web设计可以让一个网站同时适配多种设备和多个屏幕可以让网站的布局和功能随用户的使用环境屏幕大小、输入方式、设备/浏览器能力而变化。本文主要介绍一些响应式布局容易忽略但又很重要的知识点。 二、视口 移动前端中常说的 viewport 视口就是浏览器中用于呈现网页的区域。视口通常并不等于屏幕大小特别是可以缩放浏览器窗口的情况下。手机端与PC端视口存在差异电脑端的视口宽度等于分辨率而移动端的视口宽度跟分辨率没有关系,宽度默认值是设备厂家指定的。iOS, Android基本都将这个视口分辨率设置为 980px。 1.为什么手机端视口要设为980px? 当年乔布斯设想苹果手机如果在市场上火爆了但是各个网站还没有来得及制作手机端网页那么用户不得不用手机访问电脑版的网页如何用小屏幕访问大屏幕的页面也同样可读呢乔帮主就想着为手机固定一个视口宽度让手机的视口宽度等于世界上绝大多数PC网页的版心宽度就是980px。这样用手机访问电脑版网页的时候旁边刚好没有留白。不过页面缩放后文字会变得非常小用户需要手动放大缩小才能看清楚体验非常差。 2.约束视口 为了解决前面的问题可以在网页的中添加下面这行代码 meta nameviewport contentwidthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalable0 /
复制代码widthdevice-width 视口为设备宽度就是人设置的一个宽度//不设置的话默认为980px
initial-scale1.0 初始化的视口大小是1.0倍
maximum-scale1.0 最大的倍数是1.0倍
user-scalable0 不允许缩放视口
复制代码这个视口的标签告诉浏览器怎么渲染网页。在这里标签想表达的意思是按照设备的宽度device-width来渲染网页内容。事实上在支持这个标签的设备上给你看一看效果你就明白了。 不错呀用户体验大大改善 此时如果用document.documentElement.clientWidth来测试浏览器屏幕宽度你会发现当前视口宽度等于手机屏幕的宽度约数后的视口宽度都是在320~480之间手机竖直使用的时候。 这个视口的尺寸是手机厂商设置的能够保证我们的文字比如16px在自己的这个视口下清晰、大小刚刚合适。所以大屏幕的手机的约束视口 小屏幕手机的约束视口。这就能够保证我们的网页可以用px写字号、写行高。 需要注意的是约束之后的视口宽度不是自己的分辨率每个手机的分辨率都要比自己的视口宽度大得多得多 最最重要的一句话前端开发工程师丝毫不关心手机的分辨率我们只关心视口。 三、图片 人们常说说“一图胜千言”确实如此。我们网页中关于松饼的文字介绍再多也没有图片有吸引力。下面我们就在页面上方添加一张松饼的图片2000像素宽效果类似引诱用户往下看的大题图。 哇真是好大一张图它让整个网页看起来都失衡了水平方向上图片溢出了。不行必须解决这个问题。可以用CSS给图片指定固定宽度但问题是我们想让它能在不同大小的屏幕中自动缩放。比如我们例子中的iPhone屏幕宽度为320像素如果我们把图片设置成320像素宽那么iPhone屏幕旋转后又怎么办呢这时候320像素变成了480像素。 解决方案很简单只要一行CSS代码就可以让图片随容器宽度自动缩放: img {max-width: 100%;
}
复制代码回到手机上刷新页面结果比较符合预期了。 这里声明max-width规则就是要保证所有图片最大显示为其自身的100%即最大只可以显示为自身那么大。此时如果包含图片的元素比如包含图片的body或div比图片固有宽度小图片会缩放占满最大可用空间。 为什么不用width:100%? 要实现图片的自动缩放也可以使用更通用的 width 属性比如width:100%。然而这条规则在这里并不适用。因为这条规则会导致它显示得跟它的容器一样宽。在容器比图片宽得多的情况下图片会被无谓地拉伸。 四、手机浏览器内核 在移动端仅有四个独立的浏览器内核分别为微软的Trident、火狐的Gecko、开源内核Webkit、Opera的Presto。 目前微软的Trident在移动终端上主要为WP7、8系统内置浏览器。Opera的Presto内核主要为 Opera Mobile、OperaMini、欧朋浏览器以及欧朋HD Beta版。Webkit内核的适用范围则较为广泛Android原生浏览器、苹果的Safari、谷歌Chrome(Android4.0使用)都是基于Webkit开源内核开发的。 兼容的前缀
1 -ms-
2 -moz-
3 -o-
4 -webkit-
复制代码中国用户的浏览器市场份额 UC、Android内置、Chrome、Safari、QQ Browser都是webkit内核从图上看占了绝大部分的市场份额。 所以一定要伺候好-webkit-。 有的公司干脆只兼容-webkit-别的兼容比如-ms-都不写。 五、流式布局 百分比布局也叫作流式布局、弹性盒布局。手机网页没有版心都左右撑满。 百分比能够设置的属性是width、height、padding、margin。其他属性比如border、font-size不能用百分比设置的。 如果用百分比写width那么指的是父元素width的百分之多少。如果用百分比写height那么指的是父元素height的百分之多少。如果用百分比写padding那么指的是父元素width的百分之多少无论是水平的padding还是竖直的padding。如果用百分比写margin那么指的是父元素width的百分之多少无论是水平的margin还是竖直的margin。不能用百分比写border的宽度接下来我们看一个例子 div{width:200px;height:300px;padding:10px;}div p{width:50%;height:50%;padding:10%; }此时p的真实宽度是多少
复制代码 此时p的真实宽度是140px*190px 六、媒体查询 1.为什么响应式 Web 设计需要媒体查询 CSS3媒体查询可以让我们针对特定的设备能力或条件为网页应用特定的CSS样式。如果没有媒体查询光用CSS是无法大大修改网页外观的。这个模块让我们可以提前编写出适应很多不可预测因素的CSS规则比如屏幕方向水平或垂直、视口或大或小等等。弹性布局虽然可以让设计适应较多场景也包括某些尺寸的屏幕但有时候确实不够用因为我们还需要对布局进行更细致的调整。媒体查询让这一切成为可能它就相当于CSS中基本的条件逻辑。 2.媒体查询语法 我们在媒体查询外面写的第一条规则是“基本的”样式它适用于任何设备。在此基础上我们再为不同视口、不同能力的设备渐进增加不同的视觉效果和功能。 body {background-color: grey;}
media screen and (min-width:1200px){body{background-color: pink;}
}media screen and (min-width:700px) and (max-width:1200px){body{background-color: blue;}
}
media screen and (max-width:700px){body{background-color: orange;}
}
复制代码其中media就表示媒体查询查询现在看这个网页的设备是什么以及它的宽度是多少。screen表示看这个网页的设备是显示器而不是残疾人听力设备、也不是打印机。后面用and符号罗列所有的可能性。 值得注意媒体查询只能包裹选择器不能包裹k:v对儿。 IE6、7、8不支持媒体查询也为了防止手机端的某些浏览器不支持媒体查询所以不要把所有的选择器都放在媒体查询里面。 七、rem响应式布局 rem响应式布局思想 一般不要给元素设置具体的宽度,但是对于一些小图标可以设定具体宽度值高度值可以设置固定值,设计稿有多大,我们就严格写多大所有设置的固定值都用REM做单位(首先在HTML中设置一个基准值PX和REM的对应比例,然后在效果图上获取PX值,布局的时候转化为REM值)JS获取真实屏幕的宽度,让其除以设计稿的宽度,算出比例,把之前的基准值按照比例进行重新的设定,这样项目就可以在移动端自适应了 什么是rem,它与em有何区别 rem:当前页面中元素的REM单位的样式值都是针对于HTML元素的font-size的值进行动态计算的 em:表示父元素的字号的倍数。(特例在text-indent属性中表示文字宽度) body →font-size:20px;div classbox1 → font-size:2em;box1div classbox2 → font-size:2em;box2div classbox3 → font-size:2em;box3/div/div/div
复制代码 em为单位的时候font-size属性是计算后继承box1计算出来是40px。那么里面的box2、box3继承的都是40px。em单位不仅仅可以用来设置字号还可以设置任何盒模型的属性比如width、height、padding、margin、border rem有一点优势就是可以和媒体查询配合实现响应式布局 media screen and (min-width: 320px) {html {font-size: 14px;}
}
media screen and (min-width: 360px) {html {font-size: 16px;}
}
media screen and (min-width: 400px) {html {font-size: 18px;}
}
复制代码 运用场景 如果我们做的H5页面只在移动端访问这是因为REM不兼容低版本的浏览器。而如果移动端和PC端公用一套代码建议使用流式布局。 如何做个REM响应式布局 1、从UI设计师拿到PSD设计稿,然后在样式中给HTML设定一个font-size的值我们一般都设置一个方便后面计算的值例如100px html{
font-size:100px//1rem100px
}
复制代码2、写页面写样式 首先按照设计稿的尺寸来写样式然后在写样式值的时候需要把得到的像素值除以100计算出对应的REM的值。 值得注意的是真实项目中外层盒子的宽度我们一般还是不写固定值沿用流式布局法的思想我们用百分比的方式布局 margin:0 0.2rem
height:3rem
复制代码3、根据当前屏幕的宽度和设计稿的宽度来计算我们HTML的font-size的值 例如设计稿宽度为640px,其中有一个部分是轮播图它的尺寸是600*300在样式中给HTML设定一个font-size的值为100px,则轮播图大小应该为 6rem×3rem那如果手机屏幕宽度为375px,其font-size应该设置为多少。 375/640*100-fontsize58.59375//此时轮播图能自适应手机屏幕大小
复制代码根据当前屏幕宽度和设计稿宽度的比例动态计算一下当前宽度下的fontsize值应该是多少如果fontsize的值改变了之前设定的所有REM单位的值自动会跟着放大或者缩小。可以通过以下这段代码实现 script
~function{
var desW640,
winWdocument.documentElement.clientwidth,
ratiowinW/desW
document.documentElement.style.fontSizeratio*100“px“
}
/script
复制代码但如果当前屏幕宽度大于设计稿宽度图片会被拉长而失真所以以上代码需要稍微做些修改 //html部分
section idmain
div classbox/div
/section
//js部分
script
~function{
var desW640,
winWdocument.documentElement.clientwidth,
ratiowinW/desW
var oMaindocument.getElementById“main“
if(winWdesW){
oMain.style.widthdesWpx
oMain.style.margin0 auto
return
}
document.documentElement.style.fontSizeratio*100“px“
}
/script
复制代码八、参考 响应式Web设计HTML5和CSS3实战/英本·弗莱恩Ben Frain著奇舞团译