CSS单位px、rem、em、vw、vh的区别

目录

前言

零.视口介绍

一.px

二.em

三.rem【重要】

3.1rem介绍

3.2rem与em的区别

四.vw、vh、vmax、vmin

五.注意问题

[5.1如何使1rem = 10px?](#5.1如何使1rem = 10px?)

5.2如果父元素没有指定高度,那么子元素的百分比高度是多少?

5.3更多问题

前言

这几天在写个人网站,因为要适配移动端桌面端 ,因此了解到了一个新的布局 :"响应式布局"(后面有时间会单独讲一下这个布局 ),现在我们来讨论一下CSS3中的单位,只有掌握好了这些单位,我们才可以熟练使用"响应式布局"

为方便沟通,给出一个示例代码,后续关于单位的讨论都是基于示例代码:

html 复制代码
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>单位区别</title>
		<style>
			div {
				width: 100px;
				height: 100px;
			}
		</style>
	</head>
	<body style="display: flex;">
		<div style="background-color: aqua;"></div>
		<div style="background-color: red"></div>
		<div style="background-color: black;"></div>
	</body>
</html>

效果图

后续我们将使用"不同的单位修改<div>盒子的宽度"来展示效果

零.视口介绍

在学习单位之前,我们需要先了解什么是"视口"

  • 视口是用户在网页上的可见区域
  • 视口随设备而已,一般移动端的视口会比桌面端视口更小
  • 视口是可见区域,不包括浏览器的UI、菜单栏等,即你正在浏览的文档的那一部分
  • 视口的大小是可变的,就比如在桌面端通过缩放/扩大窗口来修改视口大小

下面介绍三个属性用来查询视口大小:

  1. window.innerWidth、window.innerHeight:用CSS像素单位表示的浏览器窗口的视口宽度\高度,包括垂直\水平滚动条
  2. window.outerWidth、window.outerHeight:包括了浏览器外边框的窗口宽度\ 长度
  3. element.clientWidth、element.clientWidth:对于内联元素或者没有CSS样式的元素为0,否则它是元素内部的宽度\长度(以像素为单位),该属性包括:"内边距"、"外边框"、"垂直滚动条",不包括"边框"

注意

  • 在实测中,innerWidth和outerWidth是相同的,但是outerHeight比innerHeight高100px,这是因为outerHieght的测量包括浏览器框架在内(地址栏和书签栏),而浏览器没有左右边框

一.px

px 是"pixel "像素的缩写,相对长度单位,是接触HTML 第一个学到的单位,也是网页设计的基本单位,像素px 是"相对于显示器屏幕分辨率而言的"

因此,使用像素px 设置布局最大的问题就是:"在2.5k分辨率的屏幕上开发的界面,换到1K的屏幕上可能就会变得拥挤且杂乱"

用我们上面的例子,三个**<div>** 盒子的宽度都是100px ,此时将页面"缩小\放大",可以发现**<div>** 盒子的大小是固定

(哪怕将网页缩小到这样了,大小也不会改变)

二.em

em相对长度 单位,相对于当前对象内文本的字体尺寸(参考物是父元素的font-size)

(如果父元素的字体尺寸没有设置,则相对于浏览器的默认字体尺寸)

特点

  1. em的值不是固定的
  2. em会继承父级元素的字体大小

1em = 父元素的font-size大小

2em = 父元素的font-size大小 * 2

以此类推

例如下面的代码,我们指定html 的"font-size "大小为20px;

html 复制代码
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>单位区别</title>
		<style>
			html {
				font-size: 20px;
			}
			div {
				width: 1.5em;
				height: 100px;
			}
		</style>
	</head>
	<body style="display: flex;">
		<div style="background-color: aqua;"></div>
		<div style="background-color: red"></div>
		<div style="background-color: black;"></div>
	</body>
</html>

效果图

三.rem【重要】

3.1rem介绍

remCSS3 新增的一个相对单位rem 是相对于HTML根元素的**字体大小(font-size)**来计算的长度单位

如果没有设置html字体大小那么就会以浏览器默认字体大小 (一般是16px)

优点:

只需要设置根目录字体的大小就可以把整个页面的比例调好,因此"rem"多用于响应式布局

3.2rem与em的区别

  • rem是相对于根元素(html)的字体大小,而em是相对于其父元素的字体大小

两者使用规则

  • 如果这个属性根据它的font-size进行测量,则使用em
  • 其它的一切事物属性均使用rem

四.vw、vh、vmax、vmin

vw、vh、vmax、vmin 这四个单位都是基于视口

  • vw是相对于视口的宽度而定的,1vw相当于视口宽度的1/100
  • vh是相对于视口的高度而定的,1vh相当于视口高度的1/100
  • vmax是相对于视口高度和宽度(window.innerWidth和window.innerHeight)中的最大值
  • vmin是相对于视口高度和宽度(window.innerWidth和window.innerHeight)中的最小值

五.注意问题

5.1如何使1rem = 10px?

给html标签添加font-size为"62.5%"即可:

css 复制代码
html {
    font-size:62.5%;
}

5.2如果父元素没有指定高度,那么子元素的百分比高度是多少?

会按照子元素的实际高度,设置百分比没有效果

5.3更多问题

如果后面有更多常见问题,作者将会在这里实时更新,欢迎读者朋友们关注!

相关推荐
zhougl9962 小时前
html处理Base文件流
linux·前端·html
花花鱼2 小时前
node-modules-inspector 可视化node_modules
前端·javascript·vue.js
HBR666_2 小时前
marked库(高效将 Markdown 转换为 HTML 的利器)
前端·markdown
careybobo3 小时前
海康摄像头通过Web插件进行预览播放和控制
前端
杉之5 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
喝拿铁写前端5 小时前
字段聚类,到底有什么用?——从系统混乱到结构认知的第一步
前端
再学一点就睡5 小时前
大文件上传之切片上传以及开发全流程之前端篇
前端·javascript
木木黄木木6 小时前
html5炫酷图片悬停效果实现详解
前端·html·html5
请来次降维打击!!!6 小时前
优选算法系列(5.位运算)
java·前端·c++·算法
難釋懷7 小时前
JavaScript基础-移动端常见特效
开发语言·前端·javascript