html移动端怎么做城市选择,移动端页面单位的选择(px, em, rem, vw)

本文详细介绍了前端开发中常用的像素单位px,em,rem以及vw的差异和使用场景。重点讨论了rem在响应式布局中的应用,并提供了一种动态设置html字体大小以实现自适应布局的方法,确保在不同设备上保持良好的视觉效果。同时,文章还提及了vw单位在视口宽度比例布局中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

px, em, rem的区别:

px:绝对字体大小

em:基于一个基数来计算出相对字体大小。(移动端用的少)

rem:基于根节点(html)的字体大小来计算。

vw:可视区宽度单位。1vw等于可视区宽度的百分之一。

em

跟字体大小有关

#container{

font-size: 20px; /*1em = 20px*/

width: 5em; /* width = 20 * 5px*/

height: 5em; /* height = 20 * 5px*/

}

#box{

width: 20em; /* width = 20 * 20px*/

height: 20em; /* height = 20 * 20px*/

}

l浏览器默认字体是16px,这里父级字体大小是20px,所以#box里的1em = 20px;即#box是一个长宽均为400px的正方形

vw

vw单位和百分比很相似,不同的是vw的值对所有的元素都一样,与他们父元素或父元素的宽度无关

以414宽度的屏幕为例

做一个200 * 200的盒子

html {

font-size: 4vm; /* 4 * 4.14 = 16.56*/

}

#box{

width: 12.077294685990339rem; /* 200 / 16.56 = 12.077294685990339*/

height: 12.077294685990339rem;

}

rem

rem 的字体大小直接与html的字体大小有关。默认是16px = 1rem;

我们可以给html设置10px的字体大小

html {

font-size: 10px /*即: 10px = 1rem*/

}

大多数浏览器(不包括ie8以下)都支持rem单位,如果想都支持,可以

html{

font-size: 10px /* 或者 font-size: 62.5%*/ /* 10/16 = 62.5%*/

}

p{ font-size:15px; font-size:1.5rem}

可是这样在实际开发中,换算起来非常麻烦,所以,我们对此进行了修改,根据手机屏幕的大小,做了自适应。

首先,我们在html的head里边设置html的font-size.

html{

font-size: 100px !important;

}

然后根据设计图的尺寸和手机屏幕的尺寸进行换算。

// designWidth: 设计稿的实际宽度值

// maxWidth: 制作稿的最大宽度值

;(function(designWidth, maxWidth){

var doc = document,

win = window,

docEl = doc.documentElement,

remStyle = doc.createElement("style"),

tid;

function refreshRem() {

var width = docEl.getBoundingClientRect().width;

maxWidth = maxWidth || 540;

width > maxWidth && (width = maxWidth);

var rem = width * 100 / designWidth;

remStyle.innerHTML = 'html{font-size:' + rem + 'px}';

}

if (docEl.firstElementChild) {

docEl.firstElementChild.appendChild(remStyle);

} else {

var wrap = doc.createElement("div");

wrap.appendChild(remStyle);

doc.write(wrap.innerHTML);

wrap = null;

}

// 要等viewport设置好后才能执行refreshRem,不然会执行2次

refreshRem();

win.addEventListener("resize", function() {

clearTimeout(tid); // 防止执行2次

tid = setTimeout(refreshRem, 300)

},false)

win.addEventListener("pageshow", function(e){

if(e.persisted) {

clearTimeout(tid)

tid = setTimeout(refreshRem, 300)

}

}, false)

if (doc.readyState === "complete"){

doc.body.style.fontSize = "16px"

} else {

doc.addEventListener("DOMContentLoaded",function(e){

doc.body.style.fontSize = "16px"

}, false)

}

})(750, 750)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值