CSS中vw vh rem的关系及作用

文章介绍了CSS中的vw、vh和rem单位,它们分别基于视口宽度、高度和根元素字体大小。通过vw/vh和rem的转换关系,可以实现元素尺寸的自适应缩放,以适应不同屏幕尺寸,提供更好的用户体验。示例展示了如何利用calc()函数根据浏览器宽度动态调整根元素字体大小,从而影响使用rem单位的文本大小。

vw、vh和rem都是CSS中的长度单位,它们分别相对于不同的基准值进行计算。

  • vw(Viewport Width):基于视口宽度的相对单位,1vw等于视口宽度的1%。因此,vw可以用来指定元素相对于视口宽度的大小。

  • vh(Viewport Height):基于视口高度的相对单位,1vh等于视口高度的1%。因此,vh可以用来指定元素相对于视口高度的大小。

  • rem(Root EM):相对于根元素(即<html>元素)字体大小的长度单位,1rem等于根元素字体大小的1倍。因此,rem可以用来指定元素相对于根元素字体大小的大小。

可以看出,vw和vh与视口大小相关,而rem与根元素字体大小有关。它们之间的转换关系如下:

在视口宽度为w的情况下,1vw等于w/100像素;在根元素字体大小为f的情况下,1rem等于f像素。因此,可以通过下列公式将vw/vh转换为rem:

  • 1vw = w / 100px = (w / 100px) / (f / 1rem) rem = w / (100 * f) rem
  • 1vh = h / 100px = (h / 100px) / (f / 1rem) rem = h / (100 * f) rem

例如,如果视口宽度为750px,根元素字体大小为16px,则1vw等于7.5px,1vh等于4.8px,1rem等于16px。这样就可以通过vw、vh和rem之间的转换关系,灵活地根据不同的设计需要来选择使用合适的长度单位。

会了vw也就会了vh,因此再举个详细一点的例子:

对于以下的css代码

html {
    font-size: calc(100vw/750);
}

假设我们有一个设计稿,宽度为750px,在这个设计稿中,某一段文字的字号为16px。现在我们希望这个字号可以随着浏览器宽度的变化而自适应缩放,以达到最佳的阅读体验。

为了实现这个自适应缩放的效果,我们可以将根元素(即<html>元素)的字体大小设置成屏幕宽度的一定比例。具体来说,可以将根元素字体大小设置为:

font-size: calc(100vw/750);

其中,calc()函数用来计算数学表达式。在这里,表达式100vw/750表示将当前视口宽度除以设计稿宽度750,得到一个比例值,然后将该比例值作为根元素的字号百分比来设置。

举个例子,如果当前浏览器窗口的宽度是1500px,那么计算得到的根元素字体大小就是:

font-size: calc(100vw/750); /* 100vw/750 = 1500/750 = 2 */
/* 根元素字体大小为2倍于16px,即32px */

也就是说,此时根元素的字体大小是16px的两倍,即32px。在这种情况下,如果某一段文本的字号设置为1rem,那么它的实际字号就是根元素字体大小32px,即32px * 1 = 32px。

如果浏览器窗口大小发生改变,例如缩小为750px,那么计算得到的根元素字体大小就是:

font-size: calc(100vw/750); /* 100vw/750 = 750/750 = 1 */
/* 根元素字体大小为16px */

也就是说,此时根元素字体大小恢复到了设计稿中的大小16px。在这种情况下,如果某一段文本的字号仍然设置为1rem,那么它的实际字号就是根元素字体大小16px,即16px * 1 = 16px。

综上所述,通过将根元素字体大小设置为屏幕宽度的一定比例,可以实现自适应缩放的效果,让网页内容在任何屏幕下都能保持合适的比例和尺寸,从而提供更好的用户体验。

### %(百分比) 百分比单位是相对于父元素的尺寸来计算的。在不同的属性中,它所参照的父元素尺寸不同。例如,在设置宽度时,`width: 50%;` 表示元素的宽度是其父元素宽度的 50%;在设置字体大小时,`font-size: 150%;` 表示元素的字体大小是其父元素字体大小的 150%。 ### vw(视口宽度) `vw` 是相对于视口宽度而定的单位,1vw 相当于视口宽度的 1/100。比如,若视口宽度为 1000px,那么 1vw 就等于 10px,设置 `width: 50vw;` 则元素宽度为 500px。它常用于创建与视口宽度成比例的布局,能使元素在不同宽度的屏幕上自适应显示 [^2]。 ### vh(视口高度) `vh` 相对于视口的高度而定,1vh 相当于视口高度的 1/100。假设视口高度为 800px,1vh 就是 8px,设置 `height: 20vh;` 元素高度即为 160px。同样可用于创建随视口高度自适应的布局 [^2]。 ### em `em` 是相对单位,相对于元素的字体大小。如果元素自身没有设置字体大小,则继承父元素的字体大小。例如,父元素字体大小为 16px,子元素设置 `font-size: 1.5em;`,那么子元素的字体大小就是 24px(16×1.5)。当使用 `em` 作为其他属性(如宽度、边距等)的单位时,也是基于元素的字体大小计算的。在写 CSS 时,可在 `body` 选择器中声明 `Font-size = 62.5%`,将原来的 px 数值除以 10,然后换上 `em` 作为单位,同时要重新计算那些被放大的字体的 `em` 数值,避免字体大小的重复声明 [^1]。 ### rem `rem` 是相对于根元素(即 `html` 元素)的字体大小的单位。无论元素嵌套层级如何,只要设置了 `rem` 单位,其大小都以根元素的字体大小为基准。例如,根元素字体大小设置为 16px,设置 `width: 2rem;`,元素宽度就是 32px(16×2)。为了方便计算,常通过设置根元素字体大小使 1rem 等于 10px [^2]。 ```css /* 设置根元素字体大小 */ html { font-size: 62.5%; /* 使 1rem = 10px */ } /* 使用 rem 单位设置元素宽度 */ div { width: 20rem; /* 宽度为 200px */ } /* 使用 em 单位设置字体大小 */ p { font-size: 1.5em; /* 假设父元素字体大小为 16px,则 p 元素字体大小为 24px */ } /* 使用 vwvh 单位设置元素尺寸 */ section { width: 50vw; /* 宽度为视口宽度的 50% */ height: 30vh; /* 高度为视口高度的 30% */ } /* 使用百分比单位设置元素宽度 */ article { width: 80%; /* 宽度为父元素宽度的 80% */ } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值