CSS中的相对单位和绝对单位,以及rem自适应布局

news2024/11/27 17:51:40

在CSS中,我们经常需要指定元素的尺寸、间距和位置。为此,我们可以使用各种单位来定义这些值。本文将重点介绍CSS中的相对单位和绝对单位,并解释它们之间的区别。

相对单位

百分比(%):百分比单位是相对于父元素的尺寸来计算的。例如,如果我们将一个元素的宽度设置为50%,它将占据其父元素宽度的一半。百分比单位在实现响应式设计时非常有用,因为它们可以根据父元素的大小自动调整。

em:em单位是相对于父元素的字体大小来计算的。如果没有父元素,则相对于自身的字体大小。例如,如果我们将一个元素的字体大小设置为2em,它将是父元素字体大小的两倍。em单位也可以用于调整元素的尺寸和间距。

rem:rem单位是相对于根元素(html)的字体大小来计算的。与em单位不同,rem单位不受父元素的影响。这使得rem在实现整体缩放效果时非常有用,因为只需调整根元素的字体大小即可改变所有相关元素的尺寸。

vh和vw:vh单位表示视窗高度的百分比,而vw单位表示视窗宽度的百分比。这些单位可以用于创建基于视窗尺寸的自适应布局。例如,如果我们将一个元素的高度设置为50vh,它将占据视窗高度的一半。

单位描述相对性父元素影响响应式
百分比(%)相对于父元素的尺寸来计算相对单位
em相对于父元素的字体大小来计算相对单位
rem相对于根元素的字体大小来计算相对单位
vh相对于视窗高度的百分比相对单位
vw相对于视窗宽度的百分比相对单位

绝对单位

像素(px):像素是最常见的绝对单位。它表示屏幕上的物理像素点。当我们使用像素作为单位时,元素的尺寸将以固定的像素值显示。这些单位不会自动调整大小,因此在不同设备和屏幕尺寸上可能会导致布局问题。

点(pt):点是印刷行业常用的单位,它等于1/72英寸。与像素类似,点单位也是固定的,不会根据设备或屏幕尺寸进行自适应调整。

厘米(cm)、毫米(mm)和英寸(in):这些单位也是绝对单位,用于表示长度。与像素和点不同,它们是基于物理尺寸的单位。然而,这些单位也不会根据设备或屏幕尺寸进行自适应调整。

单位描述相对性父元素影响响应式
像素(px)物理像素点绝对单位
点(pt)印刷行业常用单位,1/72英寸绝对单位
厘米(cm)物理长度单位绝对单位
毫米(mm)物理长度单位绝对单位
英寸(in)物理长度单位绝对单位

实例演示

当使用相对单位和绝对单位时,我们可以通过一个实例来更好地理解它们之间的区别。假设我们有一个包含文本的

元素,我们希望设置其宽度为父元素宽度的一半,并且字体大小为12像素。

使用相对单位(百分比和em)

<style>
  .container {
    width: 50%;
  }
  
  .text {
    font-size: 2em;
  }
</style>

<div class="container">
  <p class="text">Hello, World!</p>
</div>

在这个例子中,我们将容器的宽度设置为50%。这意味着无论父元素的宽度是多少,容器都会占据其宽度的一半。接下来,我们使用em单位将文本的字体大小设置为父元素字体大小的两倍。这样,无论父元素的字体大小是多少,文本的字体大小都会相应调整。

使用绝对单位(像素和点)

<style>
  .container {
    width: 300px;
  }
  
  .text {
    font-size: 12pt;
  }
</style>

<div class="container">
  <p class="text">Hello, World!</p>
</div>

在这个例子中,我们将容器的宽度设置为300像素。这意味着容器的宽度将始终保持为300像素,无论父元素的大小如何。接下来,我们使用点单位将文本的字体大小设置为12点。点单位是固定的,不会根据父元素或其他因素进行自动调整。

通过这个实例,你可以看到相对单位根据父元素的尺寸和字体大小进行自适应调整,而绝对单位保持固定的大小。这展示了相对单位和绝对单位之间的区别。

rem与px

rem是相对于根元素,这样就意味着,我们只需要在根元素确定一个参考值,这个参考值设置为多少,完全可以根据您自己的需求来定。我们知道,浏览器默认的字号16px,来看一些px单位与rem之间的转换关系:

pxrem
1212/16 = .75
1414/16 = .875
1616/16 = 1
1818/16 = 1.125
2020/16 = 1.25
2424/16 = 1.5
3030/16 = 1.875
3636/16 = 2.25
4242/16 = 2.625
4848/16 = 3

为了方便计算,时常将在元素中设置font-size值为62.5%: 相当于在中设置font-size为10px,此时,上面示例中所示的值将会改变:

pxrem
1212/10 = 1.2
1414/10 = 1.4
1616/10 = 1.6
1818/10 = 1.8
2020/10 = 2.0
2424/10 = 2.4
3030/10 = 3.0
3636/10 = 3.6
4242/10 = 4.2
4848/10 = 4.8

rem自适应布局

使用rem可以实现移动端各种尺寸的自适应布局,原理是根据rem是相对html的单位,通过JS控制实现1rem=100px

假如你有一个块是.box{width:120px;height:80px;} 转为rem则为.box{width:1.2rem; height:.8rem;}

//designWidth:设计稿的实际宽度值,需要根据实际设置
//maxWidth:制作稿的最大宽度值,需要根据实际设置
//这段js的最后面有两个参数记得要设置,一个为设计稿实际宽度,一个为制作稿最大宽度,例如设计稿为750,最大宽度为750,则为(750,750)
;(function(designWidth, maxWidth) {
 var doc = document,
 win = window,
 docEl = doc.documentElement,
 remStyle = document.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;
 }
 //要等 wiewport 设置好后才能执行 refreshRem,不然 refreshRem 会执行2次;
 refreshRem();

 win.addEventListener("resize", function() {
  clearTimeout(tid); //防止执行两次
  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);

使用范例如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="black" name="apple-mobile-web-app-status-bar-style">
<meta content="telephone=no" name="format-detection">
<meta content="email=no" name="format-detection">
<meta name="description" content="不超过150个字符"/>
<meta name="keywords" content=""/>
<meta content="caibaojian" name="author"/>
<title>前端开发博客</title>
<link rel="stylesheet" href="base.css">
<script type="text/javascript">
//引入上面js

</script>
</head>

<body>
 <!-- 正文 -->
</body>
</html>

总结

相对单位(百分比、em、rem、vh、vw)是根据其他因素来计算的,如父元素尺寸、字体大小或视窗尺寸。它们具有灵活性和响应式特性,适用于实现自适应布局和调整大小。

绝对单位(像素、点、厘米、毫米、英寸)是固定的单位,不会根据设备或屏幕尺寸进行自适应调整。它们适用于需要固定尺寸的情况,但在不同设备上可能会导致布局问题。

在选择使用相对单位还是绝对单位时,需根据具体需求和设计目标进行权衡。相对单位适用于响应式设计和自适应布局,而绝对单位适用于需要固定尺寸的情况。合理地使用这些单位可以帮助我们创建出适用不同屏幕尺寸和设备上都表现良好的网页布局。

希望这篇文章能帮助你更好地理解CSS中的相对单位和绝对单位,并在实际开发中做出明智的选择。记住,灵活运用这些单位可以帮助我们创造出适应性强、响应式的网页设计。

outside_default.png

关注公众号:前端开发博客

 👍🏻 点赞 + 在看 支持小编

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

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

相关文章

Go 官方标准编译器中所做的优化

本文是对#102 Go 官方标准编译器中实现的优化集锦汇总[1] 内容的记录与总结. 优化1-4: 字符串和字节切片之间的转化 1.紧跟range关键字的 从字符串到字节切片的转换&#xff1b; package mainimport ( "fmt" "strings" "testing")var cs10086 s…

C#里Bitmap转Halocn的HObject

一般情况下&#xff0c;图像的width是4的倍数的话&#xff0c;用以下代码便可将彩色bitmap转出halcon里的HObject public void Bitmap2HObject(Bitmap bmp, out HObject image){try{Rectangle rect new Rectangle(0, 0, bmp.Width, bmp.Height);BitmapData srcBmpData bmp.L…

通讯录管理系统(个人学习笔记黑马学习)

1、系统需求 通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C来实现一个通讯录管理系统系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人&#xff0c;信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人显示联系人:显示通讯录中所有联系人信…

Vue2项目练手——通用后台管理项目第二节

Vue2项目练手——通用后台管理项目 路由限制重复跳转CommonAside.vue 顶部header组件搭建与样式修改右边用户菜单栏使用的组件图片CommonHeader.vue Vuex实现左侧折叠文件目录store/index.jsstore/tab.jsmain.jsCommonHeader.vueCommonAside.vueMain.vue 路由限制重复跳转 路由…

elementUi中的el-table表格的内容根据后端返回的数据用不同的颜色展示

效果图如下&#xff1a; 首先 首先&#xff1a;需要在表格行加入 <template slot-scope"{ row }"> </template>标签 <el-table-column prop"usable" align"center" label"状态" width"180" ><templ…

MPC模型预测控制器学习笔记(附程序)

本文用于记录学习DR_CAN老师发布的MPC系列视频教程的相关内容&#xff0c;文章中放的源码也是DR_CAN老师提供的程序示例&#xff0c;链接如下&#xff1a; DR_CAN老师的视频教程链接&#xff08;点击可跳转&#xff09; DR_CAN老师提供的程序示例&#xff08;点击可跳转&#x…

探索三丰云:免费虚拟主机与云服务器的新选择**

随着云计算技术的飞速发展&#xff0c;我们有了更多的选择来满足我们的在线业务需求。今天&#xff0c;我想向大家推荐一款我最近发现的优质服务——三丰云。 三丰云&#xff08;https://www.sanfengyun.com&#xff09;是一家提供免费虚拟主机和免费云服务器的公司&#xff0…

热门框架漏洞

文章目录 一、Thinkphp5.0.23 代码执行1.thinkphp5框架2.thinkphp5高危漏洞3.漏洞特征4.THinkphp5.0 远程代码执行--poc5.*TP5实验一(Windows)a.搭建实验环境b.测试phpinfoc.写入shelld.使用菜刀连接 6.*TP5实验二(Linux)a.测试方法b.测试phpinfoc.写入shelld.反弹shell&#x…

Windows系统中Apache Http服务器简单使用

1 简介 Apache HTTP服务器是一个开源的、跨平台的Web服务器软件。它由Apache软件基金会开发和维护。Apache HTTP服务器可以在多种操作系统上运行&#xff0c;如Windows、Linux、Unix等&#xff0c;并且支持多种编程语言和技术&#xff0c;如PHP、Perl、Python、Java等。…

物联网智慧种植农业大棚系统

一、项目背景 智慧农业是是将物联网技术和农业生产箱管理的新型农业&#xff0c;依托部署在农业生产现场的各种传感节点&#xff0c;以物联网网关为通道形成数据传输网络&#xff0c;可以实现控制柜、环境监测传感器、气象监测机器等设备的远程监控&#xff0c;达到及时高校的…

docker 安装 Nginx

1、下载 docker pull nginx:latest 2、本地创建管理目录 mkdir -p /var/docker/nginx/conf mkdir -p /var/docker/nginx/log mkdir -p /var/docker/nginx/html 3、将容器中的相应文件复制到管理目录中 /usr/docker/nginx docker run --name nginx -p 80:80 -d nginxdocke…

小猫爪:嵌入式小知识18-XCP SeedNKey.dll

小猫爪&#xff1a;嵌入式小知识18-XCP SeedNKey.dll 0 目录1 前言2 生成DLL2.1 下载模板代码2.2 函数简介2.2 DLL编译 3 使用DLLEND 0 目录 小猫爪&#xff1a;嵌入式小知识15-XCP基础简介小猫爪&#xff1a;嵌入式小知识16-XCP协议简介小猫爪&#xff1a;嵌入式小知识17-XCP…

OpenGl图像的位移及旋转

一般而言&#xff0c;改变物体的位置时&#xff0c;需要改变每一帧所有顶点的坐标&#xff0c;计算量巨大 可以将每一个顶点用向量值表示&#xff0c;使用位移矩阵&#xff0c;缩放矩阵&#xff0c;旋转矩阵对顶点进行操作。 顶点着色器&#xff1a; #version 330 core layo…

LeetCode--HOT100题(46)

目录 题目描述&#xff1a;114. 二叉树展开为链表&#xff08;中等&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;114. 二叉树展开为链表&#xff08;中等&#xff09; 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链…

解决Jackson解析JSON时出现的Illegal Character错误

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

微信小程序echart导出图片

echarts版本5.1.0 用到的echarts组件是uni插件市场的echart组件 <div style"overflow: hidden;"><dCanvas class"uni-ec-canvass" id"uni-ec-canvas" ref"canvas" canvas-id"mychart-gauge" :ec"ec"&g…

恒运资本:如何利用股票筹码进行选股?有什么方法?

在进行股票之前最重要的便是进行股票的挑选&#xff0c;股票挑选有许多办法&#xff0c;比如说消息面选股、使用筹码进行选股等。那么怎么使用股票筹码进行选股&#xff1f;有什么办法&#xff1f;就下面就由恒运资本为大家剖析&#xff1a; 投资者能够根据以下筹码变动特点来进…

基于猎食者算法优化的BP神经网络(预测应用) - 附代码

基于猎食者算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于猎食者算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.猎食者优化BP神经网络2.1 BP神经网络参数设置2.2 猎食者算法应用 4.测试结果&#xff1a;5.Matlab代…

QT基础教程之八Qt消息机制和事件

QT基础教程之八Qt消息机制和事件 QPainter Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系统基于QPainter&#xff0c;QPainterDevice和QPaintEngine三个类。 QPainter用来执行绘制的操作&#xff1b;QPaintDevice是一个二维空间的抽象&#…

【已解决】激活虚拟环境报错:此时不应有Anaconda3\envs\[envs]\Library\ssl\cacert.pem。

新建虚拟环境后&#xff0c;进入虚拟环境的时候出现这样的报错&#xff1a; 此时不应有Anaconda3 envs yolov5 Library ssl cacert.pem。 但是之前装的虚拟环境也还能再次激活&#xff0c;base环境也无任何问题&#xff0c;仅新装的虚拟环境无法激活。 查遍了百度谷歌&#xff…