前端适配

rem

  • rem是一个单位,比如一个html的font-size是14px,html里面的所有元素的样式使用rem来代替px,则1rem=14px,比如某个div大小为10rem=140px
  1. <!DOCTYPE html>
  2. <html lang="en">
  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>Document</title>
  8. <style>
  9. html {
  10. font-size: 14px;
  11. }
  12. div {
  13. height: 10rem;
  14. width: 10rem;
  15. background: blue;
  16. }
  17. span {
  18. display: block;
  19. height: 20rem;
  20. width: 20rem;
  21. background-color: rgb(122, 193, 193);
  22. }
  23. </style>
  24. </head>
  25. <body>
  26. <div>
  27. </div>
  28. <span>
  29. </span>
  30. </body>
  31. </html>

@media

  1. <!DOCTYPE html>
  2. <html lang="en">
  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>Document</title>
  8. <style>
  9. /* 我们在屏幕上,并且最大宽度是800px 设置我们想要的样式
  10. max-width 小于等于800px
  11. 媒体查询可以根据不同的屏幕尺寸改变不同的样式
  12. */
  13. @media screen and (max-width: 800px) {
  14. body {
  15. background-color: pink;
  16. }
  17. }
  18. /* 当屏幕宽度小于等于500px时使用这个样式 */
  19. @media screen and (max-width:500px) {
  20. body {
  21. background-color: yellow;
  22. }
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. </body>
  28. </html>

媒体查询案例1

  1. <!DOCTYPE html>
  2. <html lang="en">
  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>Document</title>
  8. <style>
  9. /* 当屏幕宽度小于等于550px时,背景颜色为蓝色 */
  10. @media screen and (max-width: 550px) {
  11. body{
  12. background-color: blue;
  13. }
  14. }
  15. /* 当屏幕宽度大于等于556px小于等于779px时背景颜色为绿色 */
  16. /* @media screen and (min-width: 556px) and (max-width:779px) {
  17. body{
  18. background-color: green;
  19. }
  20. } */
  21. /* 下面这种写法也是可行的,推荐使用下面这种写法
  22. 比如现在屏幕宽度大于等于556px还没有达到800px则使用下面背景绿色这个样式
  23. 当屏幕宽度大于等于800px时使用的是大于等于800px背景红色的样式
  24. 也就是后面的样式与前面样式有冲突会覆盖前面的样式 */
  25. @media screen and (min-width: 556px) {
  26. body{
  27. background-color: green;
  28. }
  29. }
  30. /* 当屏幕宽度大于等于800px时,背景颜色为红色 */
  31. @media screen and (min-width: 800px) {
  32. body{
  33. background-color: red;
  34. }
  35. }
  36. </style>
  37. </head>
  38. <body>
  39. </body>
  40. </html>

媒体查询案例2

  1. <!DOCTYPE html>
  2. <html lang="en">
  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>Document</title>
  8. <style>
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. }
  13. /* 当屏幕宽度位于550px~749px,html的font-size为100px */
  14. @media screen and (min-width: 550px) {
  15. html {
  16. font-size: 100px;
  17. }
  18. }
  19. /* 当屏幕宽度大于等于750px,html的font-size为200px */
  20. @media screen and (min-width: 750px) {
  21. html {
  22. font-size: 200px;
  23. }
  24. }
  25. .car {
  26. height: 1rem;
  27. font-size: .5rem;
  28. background-color: green;
  29. line-height: 1rem;
  30. color: white;
  31. text-align: center;
  32. }
  33. </style>
  34. </head>
  35. <body>
  36. <div class="car">购物车</div>
  37. </body>
  38. </html>

Less基础

Less介绍

Less(Leaner Style Sheets) 是一门css扩展语言,也称为css预处理器,在css现有的语法上加入了程序式语言特性

Less中文网址:http://lesscss.cn

常见的css预处理器:Sass、Less、Stylus

Less编译

vscodr Less插件-Easy Less,安装完成之后只要保存以下less文件,会自动编译生成css文件
1657188967274.png
1657188986632.png
1657189005903.png

Less嵌套

  • css写法
  1. div {
  2. height: 100px;
  3. }
  4. div a {
  5. color: red;
  6. }
  7. div a:hover {
  8. background-color: green;
  9. }
  10. .parent {
  11. background-color: blue;
  12. }
  13. .parent .children {
  14. background-color: pink;
  15. }
  • less写法
  1. div {
  2. height: 100px;
  3. a {
  4. color: red;
  5. // 伪类需要在前面加上&
  6. &:hover {
  7. background-color: green;
  8. }
  9. }
  10. }
  11. .parent{
  12. background-color: blue;
  13. .children{
  14. background-color: pink;
  15. }
  16. }

Less运算

  • less代码
  1. @fontSize: 14px;
  2. html {
  3. font-size: @fontSize;
  4. }
  5. div {
  6. height: 250px + 10;
  7. background-color: red;
  8. }
  9. .container {
  10. span {
  11. height: (80rem / @fontSize);
  12. }
  13. }
  14. // 运算符两边要有空格,新版本除法运算要加括号
  15. // 如果两个数值运算只有一个数值有单位,运算结果的单位就是这个单位
  16. // 如果参与运算的两个数值都有单位,运算结果的单位为第一个数值的单位,比如10rem / 5px = 2rem
  • 编译后的css代码
  1. html {
  2. font-size: 14px;
  3. }
  4. div {
  5. height: 260px;
  6. background-color: red;
  7. }
  8. .container span {
  9. height: 5.71428571rem;
  10. }

如何进行适配

  • 利用vscode开发,安装px to rem插件将px单位转换成为rem,安装完成之后,点击该插件的设置按钮,选择扩展设置,将Root Font Size 设置为你设计稿的字体大小
  • 编写测试类,注意:如果使用媒体查询使用的是min-width,要从小到大来写,要不然不会起到你意料之中的适配效果
  • 如下是测试代码
  1. <!DOCTYPE html>
  2. <html lang="en">
  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>Document</title>
  8. <link rel="stylesheet" href="./less/example.css">
  9. <style>
  10. /* 假如我根据的设计稿是1920*1080大小的,将宽度划分10等份,那么html的font-size=1920/10=192px,
  11. 在开发的过程中就以192px为基准,为了适应其他的屏幕大小,需要在媒体查询中为每个屏幕大小设置其html 的font-size大小,
  12. 为(屏幕宽度/10px) */
  13. /* 如果屏幕大小为500*360,那么1rem=500/10=50px */
  14. @media screen and (min-width:500px) {
  15. html {
  16. font-size: 50px;
  17. }
  18. }
  19. /* 如果屏幕大小为640*360,那么1rem=640/10=64px */
  20. @media screen and (min-width:640px) {
  21. html {
  22. font-size: 64px;
  23. }
  24. }
  25. /* 如果屏幕大小为740*360,那么1rem=740/10=74px */
  26. @media screen and (min-width:740px) {
  27. html {
  28. font-size: 74px;
  29. }
  30. }
  31. /* 如果屏幕大小为915*412,那么1rem=915/10=91.5px */
  32. @media screen and (min-width:915px) {
  33. html {
  34. font-size: 91.5px;
  35. }
  36. }
  37. /* 如果屏幕大小为1024*768,那么1rem=1024/10=102.4px */
  38. @media screen and (min-width:1024px) {
  39. html {
  40. font-size: 102.4px;
  41. }
  42. }
  43. /* 如果屏幕大小为1300*500的,划分10等份,那么1rem=1300/10=130px */
  44. @media screen and (min-width: 1300px) {
  45. html {
  46. font-size: 130px;
  47. }
  48. }
  49. /* 如果屏幕大小是1400*1080的,划分10等份,那么1rem=1400/10=140px */
  50. @media screen and (min-width: 1400px) {
  51. html {
  52. font-size: 140px;
  53. }
  54. }
  55. /* 如果屏幕大小是1500*1080的,划分10等份,那么1rem=1500/10=150px */
  56. @media screen and (min-width: 1500px) {
  57. html {
  58. font-size: 150px;
  59. }
  60. }
  61. /* 如果屏幕大小是1920*1080的,划分10等份,那么1rem=1920/10=192px */
  62. @media screen and (min-width: 1920px) {
  63. html {
  64. font-size: 192px;
  65. }
  66. }
  67. </style>
  68. </head>
  69. <body>
  70. <div class="header">
  71. <span>头部</span>
  72. <span>头部</span>
  73. <span>头部</span>
  74. <span>头部</span>
  75. </div>
  76. <div class="content">
  77. 内容
  78. </div>
  79. </body>
  80. </html>
  1. .header {
  2. border: 0.0052rem solid red;
  3. height: 1.0417rem;
  4. width: 8.8542rem;
  5. display: flex;
  6. margin: auto;
  7. justify-content: center;
  8. align-items: center;
  9. margin-bottom: 0.1042rem;
  10. }
  11. .header span {
  12. background-color: blue;
  13. color: white;
  14. height: 0.5208rem;
  15. text-align: center;
  16. line-height: 0.5208rem;
  17. margin: 0 0.1042rem;
  18. width: 1.5625rem;
  19. font-size: 0.2604rem;
  20. }
  21. .content {
  22. width: 8.8542rem;
  23. height: 2.6042rem;
  24. text-align: center;
  25. line-height: 2.6042rem;
  26. background-color: pink;
  27. margin: auto;
  28. }
  1. .header {
  2. border: .0052rem solid red;
  3. height: 1.0417rem;
  4. width: 8.8542rem;
  5. display: flex;
  6. margin: auto;
  7. justify-content: center;
  8. align-items: center;
  9. margin-bottom: .1042rem;
  10. span {
  11. background-color: blue;
  12. color: white;
  13. height: .5208rem;
  14. text-align: center;
  15. line-height: .5208rem;
  16. margin: 0 .1042rem;
  17. width: 1.5625rem;
  18. font-size: .2604rem;
  19. }
  20. }
  21. .content {
  22. width: 8.8542rem;
  23. height: 2.6042rem;
  24. text-align: center;
  25. line-height: 2.6042rem;
  26. background-color: pink;
  27. margin: auto;
  28. }