经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTMLCSS » CSS » 查看文章
CSS 小结笔记之em
来源:cnblogs  作者:Assist  时间:2018/10/8 8:47:16  对本文有异议

1、为什么使用em

em也是css中的一种单位,和px类似。很多人会疑惑为什么有了px之后还要使用em,而且em使用起来相对于px来讲比较麻烦。

em主要是应用于弹性布局,下面给出一个小栗子说明em的强大之处

  1. <!DOCTYPE html>
  2. <html lang="en">
  3.  
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8. <title>Document</title>
  9. <style>
  10. * {
  11. margin: 0;
  12. padding: 0;
  13. }
  14. ul {
  15. list-style: none;
  16. }
  17. .top {
  18. height: 80px;
  19. background-color: black;
  20. }
  21. .main {
  22. width: 960px;
  23. background-color: #ccc;
  24. margin: 0 auto;
  25. overflow: hidden;
  26. }
  27. .left {
  28. width: 30%;
  29. height: 100%;
  30. background-color: aqua;
  31. border: 1px solid red;
  32. float: left;
  33. font-size: 16px;
  34. line-height: 18px;
  35. }
  36. .right {
  37. width: 60%;
  38. height: 100%;
  39. font-size: 1em;
  40. line-height: 1.125em;
  41. background-color: deeppink;
  42. border: 1px solid red;
  43. float: right;
  44. }
  45. </style>
  46. </head>
  47.  
  48. <body>
  49. <div class="top"></div>
  50. <div class="main">
  51. <div class="left">
  52. <ul>
  53. <li>em测试用例,没有em的情况</li>
  54. <li>em测试用例,没有em的情况</li>
  55. <li>em测试用例,没有em的情况</li>
  56. <li>em测试用例,没有em的情况</li>
  57. <li>em测试用例,没有em的情况</li>
  58. <li>em测试用例,没有em的情况</li>
  59. <li>em测试用例,没有em的情况</li>
  60. <li>em测试用例,没有em的情况</li>
  61. <li>em测试用例,没有em的情况</li>
  62. <li>em测试用例,没有em的情况</li>
  63. <li>em测试用例,没有em的情况</li>
  64. <li>em测试用例,没有em的情况</li>
  65. <li>em测试用例,没有em的情况</li>
  66. <li>em测试用例,没有em的情况</li>
  67. <li>em测试用例,没有em的情况</li>
  68. <li>em测试用例,没有em的情况</li>
  69. <li>em测试用例,没有em的情况</li>
  70. <li>em测试用例,没有em的情况</li>
  71. <li>em测试用例,没有em的情况</li>
  72. <li>em测试用例,没有em的情况</li>
  73. </ul>
  74. </div>
  75. <div class="right">
  76. <ul>
  77. <li>em测试用例有em的强大之处</li>
  78. <li>em测试用例有em的强大之处</li>
  79. <li>em测试用例有em的强大之处</li>
  80. <li>em测试用例有em的强大之处</li>
  81. <li>em测试用例有em的强大之处</li>
  82. <li>em测试用例有em的强大之处</li>
  83. <li>em测试用例有em的强大之处</li>
  84. <li>em测试用例有em的强大之处</li>
  85. <li>em测试用例有em的强大之处</li>
  86. <li>em测试用例有em的强大之处</li>
  87. <li>em测试用例有em的强大之处</li>
  88. <li>em测试用例有em的强大之处</li>
  89. <li>em测试用例有em的强大之处</li>
  90. <li>em测试用例有em的强大之处</li>
  91. <li>em测试用例有em的强大之处</li>
  92. <li>em测试用例有em的强大之处</li>
  93. <li>em测试用例有em的强大之处</li>
  94. <li>em测试用例有em的强大之处</li>
  95. <li>em测试用例有em的强大之处</li>
  96. <li>em测试用例有em的强大之处</li>
  97. </ul>
  98. </div>
  99. </div>
  100. </body>
  101.  
  102. </html>
View Code

这里模仿了一个网页的大致布局,给出使用em和px的区别。

在正常情况下,em和px看起来没什么区别。如下图

接下来,按住ctrl键并连续按 ‘-’(减号)键,对页面不断进行缩小。缩小到25%时会出现很明显的差别(这里使用的是chrome浏览器,其他浏览器如果没有这种状况,可以在浏览器中手动去改动字体大小,在增大字体的情况下可以看出类似的情况发生)具体如下图

 可以看到使用px的左边已经完全崩溃了,看不出来具体的文字了。而右边使用em的仍然可以清楚的看到文字。造成这种现象的主要原因是em是相对大小,使用em时对页面进放大或缩小不会造成太大的影响。

 既然是相对大小,那么就会有参考大小,em的参考大小是当前元素的字体大小。这时又会引发一个问题,既然是当前元素的字体大小作为参考,那么当前字体以em为单位时又是以什么作为参考呢?这时是以其父级元素的字体大小作为参考。

 因此当整个页面都是使用em作为字体大小的情况下,页面中的1em就是浏览器默认的字体大小为16px;

2、em的具体使用:

 1、设置body{font-size:1em} 

  在设置好body的字体大小的情况下,由于body字体是继承浏览器默认是16px,那么这时只要网页上全是用em,那么1em=16px;

 2、开始计算元素具体需要的大小

  (1)如果元素的字体大小是继承于上层即16px,那么在元素内部1em=16px;因此计算方法如下

      需要的em值=当前元素的px值/父元素的字体大小值px(一般是16px)

      例如:1px=1/16=0.0625em,18px=18/16=1.125em

  (2)如果元素的字体大小是自己设置的

      当前元素的字体大小的em值=当前元素字体大小px/父元素字体大小px

      当前元素需要的其他em值=当前元素的px值/元素自身的字体大小px

     下面通过一个例子进行具体的解释 

  1. <!DOCTYPE html>
  2. <html lang="en">
  3.  
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8. <title>Document</title>
  9. <style>
  10. body {
  11. font-size: 1em;
  12. }
  13. .son1 {
  14. font-size: 2em;
  15. height: 5em;
  16. width: 5em;
  17. border: 0.0625em solid red;
  18. background-color: aqua;
  19. margin: 0 auto;
  20. }
  21. .son2 {
  22. font-size: 32px;
  23. height: 160px;
  24. width: 160px;
  25. border: 2px solid red;
  26. background-color: aqua;
  27. margin: 100px auto;
  28. }
  29. </style>
  30. </head>
  31.  
  32. <body>
  33. <div class="fa">
  34. <div class="son1">aaa son1</div>
  35. <div class="son2">aaa son2</div>
  36. </div>
  37. </body>
  38.  
  39. </html>

 

  打开浏览器中显示的.son1盒子的盒子模型,以及网页结果图具体入下

  

  可以发现.son1 和.son2 一模一样。

  .son1 的字体大小为 2em 对应的px为 2*16=32px;(反过来可以验证公式 当前元素的字体大小的em值(2)=当前元素字体大小px(32)/父元素字体大小px(16

  高度宽度为5em 对应px为 5*32=160px;(反过来可以验证公式当前元素需要的其他em值5=当前元素的px值160/元素自身的字体大小px32

注意:在ie5/6中还需要添html { font-size:100%} 以保证弹性布局(但是目前ie5/6基本没有,而且这条是根据文章 The Incredible Em & Elastic Layouts with CSS 得知的,本人并没有试出来具体问题在哪。。先记下,以后遇到类似情况使用)

 

3、rem的使用

  rem使用方法和em类似,不过rem是相对于根元素的大小(即html的字体大小),而不是自身的大小。2中的栗子中的.son1 的相关带em的属性全改为rem 代码如下

  1. <!DOCTYPE html>
  2. <html lang="en">
  3.  
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=\, initial-scale=1.0">
  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8. <title>Document</title>
  9. <style>
  10. .son1 {
  11. font-size: 2rem;
  12. height: 5rem;
  13. width: 5rem;
  14. border: 0.0625rem solid red;
  15. background-color: aqua;
  16. margin: 0 auto;
  17. }
  18. .son2 {
  19. font-size: 32px;
  20. height: 160px;
  21. width: 160px;
  22. border: 2px solid red;
  23. background-color: aqua;
  24. margin: 100px auto;
  25. }
  26. </style>
  27. </head>
  28.  
  29. <body>
  30. <div class="fa">
  31. <div class="son1">aaa son1</div>
  32. <div class="son2">aaa son2</div>
  33. </div>
  34. </body>
  35.  
  36. </html>
View Code

结果图为:

 因为.son1 中的单位全改为rem,参考对象为html字体的大小即为16px,所以.son1字体大小为2*16=32px  ,宽度和高度为5*16=80px,边框为1px

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号