博客列表 >em,rem的原理与应用场景,并实例演示rem / em /vh/ vw的区别与联系

em,rem的原理与应用场景,并实例演示rem / em /vh/ vw的区别与联系

世纪天城
世纪天城原创
2020年12月18日 16:44:381242浏览

em原理与应用
em,rem的运用
1.什么是em?
em: 是浏览器文本的默认字号的相对关键字,大多数浏览器em通常是16px
2.em应用在哪 ?
设置响应式的文本字号,font-size: 是允许被继承的;当前元素的字号,继承自它的父级及其祖先元素(body , html)
注:当前p元素的 font-size: 为1em是 则继承了body设置的16px;如果body设置20排序,则当前元素的1em为20px;em也可以用于任何元素
3.设置盒模型的属性的响应式

  1. em也可以用于设置盒模型的属性的响应式
  2. <div class="div1"></div>
  3. <hr>
  4. 如果给当前元素设置font-size: 设置 则重新定义像素
  5. <div class="div2"></div>
  6. 因为盒子的大小使用em,所以只需要设置盒子的font-size就可以动态的设置大小了

rem

因em: 动态性和继承性,但是也有缺点
我们非常的需要一个固定值的em,它不应该随着它自身和祖先元素的字号大小而变动
而用rem就可以解决掉, rem就是一个固定值的em
html在一个页面中它是唯一的且是最大的包含块,也叫根元素
所以,在html中定义的em大小,可看成一个常量(固定的值)
此时,我们用一个新的关键字rem来引用根元素中的字号大小font-size的值
例如:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. <style>
  9. html{
  10. /* 设置根元素字号 */
  11. font-size: 20px;
  12. }
  13. /* 后面就可以直接使用"rem"来引用定义字号或其它属性 */
  14. div{
  15. /*此时 1.5rem : 1.5 * 20px = 30px; */
  16. font-size: 1.5rem;
  17. width: 10em;/*宽度为 10em*20排序=300px*/
  18. height: 10em;
  19. background-color: burlywood;
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <div></div>
  25. </body>
  26. </html>
  1. 以后的字号,强烈推荐使用rem设置,元素用em设置


vh 与 vw

视口: “可视窗口”,浏览器窗口中用于显示文档的可视区域
vh: 视口的”初始包含块”的高度的百分之一(1/100)
vw: 视口的”初始包含块”的宽度的百分之一(1/100)
初始包含块: 目前 可以简单的理解为”html”
这个主要用于移动端布局

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>视口单位: vh / vw</title>
  8. <style>
  9. div{
  10. width: 80vw; /*宽度的80%*/
  11. height: 100vh;/*高度的100%*/
  12. background-color: cyan;
  13. margin: auto;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. <div>
  19. <p>视口: "可视窗口",浏览器窗口中用于显示文档的可视区域</p>
  20. <p>vh: 视口的"初始包含块"的高度的百分之一(1/100)
  21. vw: 视口的"初始包含块"的宽度的百分之一(1/100)
  22. 初始包含块: 目前 可以简单的理解为"html"
  23. 这个主要用于移动端布局
  24. </p>
  25. </div>
  26. </body>
  27. </html>

总结:em,rem 主要用于内容区的自适应元素,而vh,vw用于设置不同设备的可视窗口。

综合小案例

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>em实现响应式布局</title>
  8. <style>
  9. html{
  10. font-size: 1em;
  11. }
  12. main{
  13. width: 100vw;
  14. height: 100vh;
  15. background-color: indianred;
  16. }
  17. /* vmax,vw,vh同为视口单位 */
  18. /* 相对于视口的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vmax */
  19. /* vw/vh/vmin/vmax是视窗单位,也是相对单位。相对的不是父节点或页面的根节点,而是由视窗(viewport)的大小决定的,单位1,代表类似于1% */
  20. /* main{
  21. width: 80vmax;
  22. height: 80vmax;
  23. background-color: lightgreen;
  24. margin: auto;
  25. } */
  26. div{
  27. width: 30em;
  28. height: 15em;
  29. background-color: burlywood;
  30. margin: auto;
  31. box-sizing: border-box;
  32. padding: 1em;
  33. }
  34. h3{
  35. color: chocolate;
  36. }
  37. p{
  38. font-size: 0.8rem;
  39. text-indent: 2em;
  40. color: #a1a1a1ee;
  41. }
  42. /* 屏幕宽度 >= 800px, 字号放大到30px */
  43. @media screen and (min-width: 800px) {
  44. html{
  45. font-size: 1.5em;
  46. }
  47. div{
  48. background-color: cornflowerblue;
  49. }
  50. }
  51. @media screen and (min-width: 1200px) {
  52. html{
  53. font-size: 1.8em;
  54. }
  55. div{
  56. background-color: rgb(234, 252, 252);
  57. }
  58. }
  59. </style>
  60. </head>
  61. <body>
  62. <main>
  63. <div>
  64. <h3>响应式页面的实现</h3>
  65. <p>目前一般常见的实现响应式有两种方法,一种是利用媒体查询,另外一种是bootstrap下的栅格布局,以后介绍bootstrap的时候来介绍栅格布局,这里主要来说一下如何利用媒体查询实现响应式布局。
  66. 媒体查询,即 @media 查询,媒体查询可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设计响应式的页面,@media 是非常有用的。当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。因为是设置样式,所以将媒体查询相关的代码放在css文件的最下方即可。</p>
  67. </div>
  68. </main>
  69. </body>
  70. </html>



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议