博客列表 >1024作业:em,rem特点,应用场景;使用rem+vw重写课程表案例(无px)

1024作业:em,rem特点,应用场景;使用rem+vw重写课程表案例(无px)

高空中的云
高空中的云原创
2022年10月25日 01:11:11308浏览

em, rem特点,应用场景

em 特点&应用场景

em是相对于父元素的相对长度单位,是取决于自身的font-size大小.换句话说,如果某个元素未直接定义自身的font-size大小,则受其父元素font-size的影响(继承).特别需要说明的是,该元素的属性(width,height,padding,border,margin等)值都会受此影响.因此,在应用到多层嵌套的div时,可能会有很多计算的困扰~

应用场景

  • 解决文字放大缩小的问题
  • 对页面进行响应式开发时,便于修改
  • 结合px,在内容放大的时候边框”相对变小”,牺牲样式,确保内容尽可能被放大(个人开发习惯)

rem 特点&应用场景

rem是相对于root元素的相对长度单位.通俗的说,具备em的优点,并且不管怎么嵌套div,rem只认html这一个”爹”,不存在”多层认爹”的疑惑.当然,只要html改了font-size,所有使用rem的都会被改变.

应用场景

  • 除了上述em应用场景外,rem改动更便捷
  • 有些页面字体缩放效果,使用rem比em更合适
  • 个人感觉,pc端和移动端都可以优先使用rem,遇到一些标题和下拉菜单等样式(当我们缩放页面时,页面布局乱或者不符合预期),可以酌情使用empx进行调整.万事不绝对,有些时候,比如浮动的广告banner还是建议使用px[doge.gif]

其他

有一些特殊情况,

  • 当我们希望宽度拉满的时候,还是建议使用100%.或者不能拘泥于emrem.可以用后者去限制max-width
  • 在页面宽度固定的情况下,尤其是视窗禁止缩放(maximum-scale = 1.0 user-scalable = 0)情况下,比如一些表单页面,或者一些相对更”古老”的系统在特定设备上.用%px能确保列宽更为合适.起码,这时候emrem无法体现更大的优势.

为什么推荐使用rem

简单,用一种最友好和容易写的方式能解决90%以上的问题.

课程表重写

效果图,

核心代码及解释

  1. /*
  2. 朱老师写法
  3. 是把上午,中午休息,下午写到3个tbody中,
  4. 是指除去中午休息这个tbody,其他tbody的第一个tr包含的第一个td的背景色设置为rgb(23, 223, 43)
  5. */
  6. table tbody:not(tbody:nth-of-type(2)) tr:first-of-type td:first-of-type{
  7. background-color: rgb(23, 223, 43);
  8. }

我的做法是只写了一个tbody,所以这个地方”投机取巧”的代码如下

  1. table tbody:nth-of-type(n) tr:nth-of-type(5n+1) td:first-of-type{
  2. background-color: bisque;
  3. }

另外一种”投机取巧”的写法如下:

  1. table tbody:nth-of-type(n) tr:nth-of-type(1) td:first-of-type,
  2. table tbody:nth-of-type(n) tr:nth-last-of-type(3) td:first-of-type{
  3. background-color: bisque;
  4. }

第三种”不要脸”的写法如下:

  1. td[rowspan="4"]{
  2. background-color: bisque;
  3. }

实际中,可能不会去思考如此复杂的选择器,也不会凑巧知道某个或某些特殊块的”独门属性”.大部分时间是能处理好”首尾”或者”奇偶”就足够了.真是遇到这么复杂的情况,应该还是直接用class写一个样式了,或者在js中做相关处理…当然,能用css解决,就不用js.

课程表完整源代码

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>课程表</title>
  8. <style>
  9. .text-align_center {
  10. text-align: center;
  11. }
  12. table {
  13. border-collapse: collapse;
  14. width: 50%;
  15. margin: auto;
  16. text-align: center;
  17. }
  18. table caption {
  19. font-size: 2rem;
  20. margin-top: 1rem;
  21. line-height: 3rem;
  22. }
  23. table thead {
  24. background-color: aquamarine;
  25. }
  26. /*
  27. 朱老师写法
  28. 是把上午,中午休息,下午写到3个tbody中,
  29. 所以这里是指除去中午休息这个tbody,其他tbody的第一个tr包含的第一个td的背景色设置为rgb(23, 223, 43)
  30. */
  31. /* table tbody:not(tbody:nth-of-type(2)) tr:first-of-type td:first-of-type{
  32. background-color: rgb(23, 223, 43);
  33. } */
  34. /* 偷鸡写法一
  35. table tbody:nth-of-type(n) tr:nth-of-type(5n+1) td:first-of-type{
  36. background-color: bisque;
  37. }*/
  38. /* 偷鸡写法二 */
  39. table tbody:nth-of-type(n) tr:nth-of-type(1) td:first-of-type,
  40. table tbody:nth-of-type(n) tr:nth-last-of-type(3) td:first-of-type{
  41. background-color: bisque;
  42. }
  43. /* 偷鸡写法三 */
  44. td[rowspan="4"]{
  45. background-color: bisque;
  46. }
  47. </style>
  48. </head>
  49. <body>
  50. <table border="1" cellpadding="10">
  51. <caption>课程表</caption>
  52. <thead>
  53. <tr>
  54. <th>时间</th>
  55. <th>周一</th>
  56. <th>周二</th>
  57. <th>周三</th>
  58. <th>周四</th>
  59. <th>周五</th>
  60. </tr>
  61. </thead>
  62. <tbody>
  63. <tr>
  64. <td rowspan="4">上午</td>
  65. <td>语文</td>
  66. <td>语文</td>
  67. <td>语文</td>
  68. <td>语文</td>
  69. <td>语文</td>
  70. </tr>
  71. <tr>
  72. <td>语文</td>
  73. <td>语文</td>
  74. <td>语文</td>
  75. <td>语文</td>
  76. <td>语文</td>
  77. </tr>
  78. <tr>
  79. <td>语文</td>
  80. <td>语文</td>
  81. <td>语文</td>
  82. <td>语文</td>
  83. <td>语文</td>
  84. </tr>
  85. <tr>
  86. <td>语文</td>
  87. <td>语文</td>
  88. <td>语文</td>
  89. <td>语文</td>
  90. <td>语文</td>
  91. </tr>
  92. <tr>
  93. <td colspan="6">中午休息</td>
  94. </tr>
  95. <tr>
  96. <td rowspan="4">下午</td>
  97. <td>语文</td>
  98. <td>语文</td>
  99. <td>语文</td>
  100. <td>语文</td>
  101. <td>语文</td>
  102. </tr>
  103. <tr>
  104. <td>语文</td>
  105. <td>语文</td>
  106. <td>语文</td>
  107. <td>语文</td>
  108. <td>语文</td>
  109. </tr>
  110. <tr>
  111. <td>语文</td>
  112. <td>语文</td>
  113. <td>语文</td>
  114. <td>语文</td>
  115. <td>语文</td>
  116. </tr>
  117. </tbody>
  118. <tfoot>
  119. <tr>
  120. <td>备注:</td>
  121. <td colspan="5">每天下午15:30~17:30在校写作业</td>
  122. </tr>
  123. </tfoot>
  124. </table>
  125. </body>
  126. </html>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议