网站设计常用单位:px,%,rem,vh,vw有什么区别以及如何选择?
在网站设计中,选择合适的单位对于元素的尺寸、位置和间距等属性的设置至关重要。不同的单位有着各自的特点和适用场景,理解它们之间的区别能帮助我们更有效地进行网页布局和适配。本文将详细介绍五种常用的单位:像素(px)、百分比(%)、根em(rem)、视口高度(vh)、视口宽度(vw),并探讨它们的优缺点及使用方法。
像素(px):绝对单位
像素是网站设计中的基本单位,代表屏幕上的一个点。作为绝对单位,px不会因屏幕大小、分辨率或字体设置的变化而改变。使用px能确保元素在不同设备上的一致性,但也可能导致元素过大或过小,影响用户体验。
例如,一个宽度为100px的元素,在所有设备上都会显示为100个像素的宽度。在高分辨率屏幕上可能显得较小,而在低分辨率屏幕上则可能显得较大。
百分比(%):相对单位
百分比是基于父元素或参照物尺寸的相对单位。它会根据屏幕大小、分辨率或字体设置的变化而调整。使用%可以确保元素适应不同设备的屏幕宽度,但可能导致元素失去原有的比例和形状。
例如,一个宽度为50%的元素,将占据其父元素宽度的一半。若父元素的宽度发生变化,该元素的宽度也会相应变化。
根em(rem):相对单位
根em是相对于根元素(html)字体大小的单位。作为动态单位,rem会随着根元素字体大小的变化而变化。使用rem可以保持不同设备上元素的字体比例一致,但也可能影响元素的尺寸和布局效果。
例如,若根元素字体大小为16px,则1rem等于16px。一个宽度为2rem的元素,在任何设备上都将显示为32px。若根元素字体大小发生变化,该元素的宽度也会相应变化。
这种单位在移动端开发中比较常见,可以通过js控制根元素(或者用@media)来达到适配各种分辨率的字体大小的效果。
视口高度(vh):相对单位
vh是相对于视口(浏览器窗口中显示网页内容的区域)高度的百分比单位。它是动态的,会随视口高度的变化而变化。使用vh可以确保元素在不同设备上占据视口高度的一定比例,但可能会改变元素的高度和形状。
例如,一个高度为50vh的元素,将占据视口高度的一半。若视口高度发生变化,该元素的高度也会相应变化。
视口宽度(vw):相对单位
vw是相对于视口宽度的百分比单位。与vh类似,它是动态的,会随视口宽度的变化而变化。使用vw可以确保元素在不同设备上占据视口宽度的一定比例,但可能会改变元素的宽度。
例如,一个宽度为50vw的元素,将占据视口宽度的一半。若视口宽度发生变化,该元素的宽度也会相应变化。
扩展
1、页面自适应缩放代码
页面基准750px,html font-size值的计算JavaScript代码:
[pre]
(function(doc, win) {
var htmlFont = function() {
var docEl = doc.documentElement,
l = docEl.clientWidth,
f;
f = l / 7.5;
l > 750 ? docEl.style.fontSize = 100 + "px" : docEl.style.fontSize = f + "px"
};
htmlFont();
win.addEventListener("resize", htmlFont, false)
})(document, window);
[/pre]
注:把这段 原生JS 放到 HTML 的 head 标签中即可(需设置meta缩放比1:1)
[pre]<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />[/pre]
2、高清版
和上面一下还是把这段 原生JS 放到 HTML 的 head 标签中即可(注:不要手动设置viewport,该方案自动帮你设置,通过修改viewport 属性放大缩小 initial-scale)
[pre]
!function(e){function t(a){if(i[a])return i[a].exports;var n=i[a]={exports:{},id:a,loaded:!1};return e[a].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var i={};return t.m=e,t.c=i,t.p="",t(0)}([function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=window;t["default"]=i.flex=function(e,t){var a=e||100,n=t||1,r=i.document,o=navigator.userAgent,d=o.match(/Android[\S\s]+AppleWebkit\/(\d{3})/i),l=o.match(/U3\/((\d+|\.){5,})/i),c=l&&parseInt(l[1].split(".").join(""),10)>=80,p=navigator.appVersion.match(/(iphone|ipad|ipod)/gi),s=i.devicePixelRatio||1;p||d&&d[1]>534||c||(s=1);var u=1/s,m=r.querySelector('meta[name="viewport"]');m||(m=r.createElement("meta"),m.setAttribute("name","viewport"),r.head.appendChild(m)),m.setAttribute("content","width=device-width,user-scalable=no,initial-scale="+u+",maximum-scale="+u+",minimum-scale="+u),r.documentElement.style.fontSize=a/2*s*n+"px"},e.exports=t["default"]}]); flex(100, 1);
[/pre]
这是阿里团队的高清方案布局代码,所谓高清方案就是根据设备屏幕的DPR(设备像素比,又称DPPX,比如dpr=2时,表示1个CSS像素由4个物理像素点组成) 动态设置 html 的font-size, 同时根据设备DPR调整页面的缩放值,进而达到高清效果。
3、zoom缩放
[pre]function bodyScale() {
var devicewidth = document.documentElement.clientWidth;
var scale = devicewidth / 1920; // 设计稿的尺寸宽度
document.body.style.zoom = scale;
}
window.onload = window.onresize = function () {
bodyScale();
};[/pre]
设置设计稿的宽度,通过识别当前屏幕宽度对页面整体进行zoom缩放,这种腾讯的落地页用的比较多。
总结
px、%、rem、vh和vw是网站设计中常用的单位,每个都有其优势和局限性。选择合适的单位应基于设计需求和预期效果:
- 对于需要在不同设备上保持一致效果的元素,使用px。
- 对于需要适应屏幕宽度的元素,使用%。
- 对于需要保持字体比例一致的元素,使用rem。
- 对于需要占据视口高度一定比例的元素,使用vh。
- 对于需要占据视口宽度一定比例的元素,使用vw。
当然,这些原则并非一成不变,我们可以根据具体需求和设计目标灵活组合使用这些单位,以实现更佳的网页布局和适配效果。
延伸阅读:
PC+移动双端页面自适应屏幕缩放适配JS代码
很多前端重构工程师在进行网页还原的时候在自适应这一块会面临一些困扰,不能兼容其他屏幕的情况出现,今天分享一些代码希望可以...
便宜SSL域名证书怎么申请?附购买指南+部署教程
最近国内所有大厂基本都申请不到一年有效期的免费SSL证书了,那么付费的便宜SSL证书有哪些值得购买呢?今天迅马网络来盘点...
Sectigo国际品牌SSL加密证书:守护您的网络安全,让信任无处不在
在数字化时代,网络安全问题日益突出,数据泄露、网站被黑等事件频发,给企业带来了巨大的经济损失和信誉危机。为了确保您的网站...
一年有效期SSL证书怎么申请?——为何选择Sectigo证书进行网站安全加密
随着互联网的快速发展,网络安全问题日益凸显。为了保障网站数据传输的安全性,越来越多的网站开始采用SSL证书进行加密。本文...
免费SSL证书有哪些?Sectigo品牌证书和免费的区别
在当今的数字时代,网络安全已经成为企业和个人用户关注的焦点。随着数据泄露和网络攻击事件的频发,SSL证书作为保护网站数据...