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

news2024/11/17 21:39:29

目录

前言

零.视口介绍

一.px

二.em

三.rem【重要】

3.1rem介绍

3.2rem与em的区别

四.vw、vh、vmax、vmin

五.注意问题

5.1如何使1rem = 10px?

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

5.3更多问题

前言

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

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

<!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;

<!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%”即可:

html {
    font-size:62.5%;
}

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

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

5.3更多问题

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1697536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】——并发控制

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

手机端如何访问本地vue+vite项目,实现实时调试?

一、应用场景 h5&#xff08;vuevite&#xff09;嵌入app后&#xff0c;出现某种问题时&#xff0c;需要每次发布坏境后&#xff0c;才能才看效果&#xff0c;这种来回很耗时间&#xff0c;本文章在于解决手机端直接访问本地启动应用项目&#xff0c;无需重复发布坏境 二、实…

南京观海微电子---2种 电流检测中的高低边采样电阻和共模抑制比问题

电流检测有两种方法&#xff1a; 一种是用封装好的电流检测芯片采样电阻&#xff1b; 另一种是自己搭建运放电路 高端检测&#xff1a; 低端检测&#xff1a; 自己搭建运放电路&#xff1a;&#xff08;这种对电阻的精度要求较高&#xff0c;对称电路中电阻的一致性&#xff…

WindowsCMD窗口配置OhMyPosh

WindowsCMD窗口配置OhMyPosh 文章目录 WindowsCMD窗口配置OhMyPosh1. 按装Clink1. 安装Oh-My-Posh2. 安装Clink2. 安装后的位置 2. 编写Lua脚本1. oh-my-posh Lua脚本2. 重启cmd窗口看效果 OhMyPosh对Windows CMD 没有现成的支持。 然而可以使用Clink来做到这一点&#xff0c;它…

【线程的互斥】

线程的互斥 临界区资源多个线程的运行多个线程对同一资源的竞争原子性保持线程之间地互斥互斥量(锁的原理)为什么是原子的 正确使用锁 临界区资源 进程创建线程&#xff0c;是共享内存的&#xff0c;可以对共享的资源有很方便的操作&#xff0c;当一些共享资源可以被多个线程进…

【编译原理--- 汇编、编译、解释系统】

汇编、编译、解释系统 1.编译方式和解释方式 程序种类是否生成目标程序是否参与程序的运行过程程序执行速度可移植性编译程序生成不参与快差解释程序不生成参与慢好 编译方式过程&#xff1a;词法分析、语法分析、语义分析、&#xff08;中间代码生成、代码优化、&#xff0…

重生奇迹MU格斗家上手最轻松的职业

重生奇迹MU格斗家玩法攻略&#xff0c;有一个比较奇葩的职业&#xff0c;那就是格斗家。格斗家拥有其他职业没有的优势&#xff0c;就是加体力和敏捷都可以提升攻击力百分比。格斗家玩法攻略 目前格斗家最多的就是敏格玩法&#xff0c;配合智力MM加成后的幽冥光速拳可以说是第…

修改VSCode中md文件中上传图片的路径

vs上打开md上传一个图片默认的路径是当前文件夹&#xff0c;可以发现&#xff0c;图片一多&#xff0c;非常的乱。 我们希望的是在单独的一个文件中存放图片即可。 使用ctrl , 快捷键&#xff0c;输入markdown 添加一个新的key/value。 **/*.md assets/${documentBaseName}/…

抖音运营_如何做好抖音直播

目录 如何做好抖音直播 一 带货主播应具备的技能 1 专业技能 2 语言表达能力 3 场控应变技能 4 熟悉平台规则 二 选品技巧 1 选择与账号属性相关的产品 2 选择试用过的产品 3 选择热销产品 4 选择低客单价产品 三 直播间产品的管理 四 打造转化率高的直播间 1 突出…

探秘SpringBoot默认线程池:了解其运行原理与工作方式(@Async和ThreadPoolTaskExecutor)

文章目录 文章导图Spring封装的几种线程池SpringBoot默认线程池TaskExecutionAutoConfiguration&#xff08;SpringBoot 2.1后&#xff09;主要作用优势使用场景如果没有它 2.1版本以后如何查看参数方式一&#xff1a;通过Async注解--采用ThreadPoolTaskExecutordetermineAsync…

Jenkins 构建 Maven 项目:构建服务器和部署服务器分离的情况

bash内容 #!/bin/bash#删除历史数据 rm -rf ruoyi-admin.jar# appname$1 appnamevideo.xxxxx.com #获取传入的参数 echo "arg:$appname"#获取正在运行的jar包pid # pidps -ef | grep $1 | grep java -jar | awk {printf $2} pidps -ef | grep $appname | grep java …

C# 深拷贝和浅拷贝

文章目录 1.深拷贝2.浅拷贝3.拷贝类4.浅拷贝的实现5.深拷贝实现5.1 浅拷贝对象&#xff0c;对引用类型重新一个个赋值5.2 反射实现5.3 利用XML序列化和反序列化实现 1.深拷贝 拷贝一个对象时&#xff0c;不仅仅把对象的引用进行复制&#xff0c;还把该对象引用的值也一起拷贝。…

聊聊ChatGPT的本质

这是鼎叔的第九十八篇原创文章。行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。 阶段性总结下我对ChatGPT的基础理解&#xff0c;算是一篇学习思考笔记吧。其中难免有很多不准确的&#xff0c;或过于简略的地方&#xff0c;将来再迭代学习。 OpenAI做ChatGPT的底层逻辑…

mfc140.dll丢失原因和mfc140.dll丢失修复办法分享

mfc140.dll是与微软基础类库&#xff08;Microsoft Foundation Classes, MFC&#xff09;紧密相关的动态链接库&#xff08;DLL&#xff09;文件。MFC是微软为C开发者设计的一个应用程序框架&#xff0c;用于简化Windows应用程序的开发工作。以下是mfc140.dll文件的一些关键属性…

spring boot 整合j2cache 项目启动警告 Redis mode [null] not defined. Using ‘single‘

好 之前的文章 spring boot 整合j2cache 基础操作 在spring boot环境中整合了 j2cache 我们 项目启动时 日志会有一个关键信息 Redis的模式 没有定义 默认使用 single Redis 的这个模式有四种 大家可以自己去网上找一下 做个了解 不用很纠结 我们直接在 j2cache.properties …

医院门诊互联电子病历|基于SSM+vue的医院门诊互联电子病历管理信息系统的设计与实现(源码+数据库+文档)

医院门诊互联电子病历管理信息系统 目录 基于SSM&#xff0b;vue的医院门诊互联电子病历管理信息系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2后台登录模块 5.2.1管理员功能 5.2.2用户功能 5.2.3医生功能 四、数据库设计 五、核心代码…

requests_html使用介绍

文章目录 一、requests_html 基本介绍二、requests_html 基本使用三、发送带有参数的请求四、图片抓取实战案例 一、requests_html 基本介绍 A、装库: pip install requests_html B、介绍: requests 和 requests_html 是同一个作者 二、requests_html 基本使用 A、导包: fro…

辐射度技术在AI去衣中的魅力与科学

引言&#xff1a; 在当今的数字化时代&#xff0c;人工智能正逐渐渗透到我们生活的方方面面。其中&#xff0c;AI去衣技术作为一项颇具争议但又不失其科技创新的应用&#xff0c;正引起越来越多的关注和讨论。而在实现高质量图像渲染的过程中&#xff0c;辐射度技术凭借其卓越的…

Linux指令初识

ls:显示当前目录底下的指定文件或目录 ls -l更详细的信息 ls -a显示当前目录下的所有文件 命令中的选项可以一次传递多个 ,例如&#xff1a;ls -al 命令和选项有必须一个或多个空格 以.开头的文件&#xff0c;为隐藏文件ls -a可以看到,ls -l看不见 支持命令拼在一起&#…

Rust开源Web框架Salvo源码编译

1.克隆源码: https://github.com/salvo-rs/salvo.git 2.进入salve目录并运行cargo build编译 编译成功 3.编译生成的库 4.安装salve-cli git clone --recursive https://github.com/salvo-rs/salvo-cli.git 编译salve-cli