[关闭]
@brizer 2016-03-04T15:23:05.000000Z 字数 4039 阅读 1798

Sass之移动端适配解决方案


前言

最近涉足移动端Web开发,在适配各个机型的过程中遇到了一些麻烦,于是整理yidongWeb开发适配解决方案。


思路

首先我们需要使用sass,确切地说是scss,两者的区别在于前者是缩减来控制,而后者是传统的大括号控制法。

我们的思路就是通过媒介查询来对不同大小的屏幕设置不同的font-size,然后其他的所有需要px的地方全部通过自定义sass函数来解决。


具体实现

定义rem函数如下:

  1. $brower-default-font-size:20px !default;
  2. @function rem($px) {
  3. @return $px / $brower-default-font-size * 1rem;
  4. }

这里取20px,是因为移动端Web的视觉稿默认是640px宽度的。

然后各个屏幕适配根字体大小如下:

  1. @media only screen and (max-width: 1080px),
  2. only screen and (max-device-width:1080px) {
  3. html,
  4. body {
  5. font-size: 33.75px;
  6. }
  7. }
  8. @media only screen and (max-width: 960px),
  9. only screen and (max-device-width:960px) {
  10. html,
  11. body {
  12. font-size: 30px;
  13. }
  14. }
  15. @media only screen and (max-width: 800px),
  16. only screen and (max-device-width:800px) {
  17. html,
  18. body {
  19. font-size: 25px;
  20. }
  21. }
  22. @media only screen and (max-width: 720px),
  23. only screen and (max-device-width:720px) {
  24. html,
  25. body {
  26. font-size: 22.5px;
  27. }
  28. }
  29. @media only screen and (max-width: 640px),
  30. only screen and (max-device-width:640px) {
  31. html,
  32. body {
  33. font-size: 20px;
  34. }
  35. }
  36. @media only screen and (max-width: 600px),
  37. only screen and (max-device-width:600px) {
  38. html,
  39. body {
  40. font-size: 18.75px;
  41. }
  42. }
  43. @media only screen and (max-width: 540px),
  44. only screen and (max-device-width:540px) {
  45. html,
  46. body {
  47. font-size: 16.875px;
  48. }
  49. }
  50. @media only screen and (max-width: 480px),
  51. only screen and (max-device-width:480px) {
  52. html,
  53. body {
  54. font-size: 15px;
  55. }
  56. }
  57. @media only screen and (max-width: 414px),
  58. only screen and (max-device-width:414px) {
  59. html,
  60. body {
  61. font-size: 12.9375px;
  62. }
  63. }
  64. @media only screen and (max-width: 400px),
  65. only screen and (max-device-width:400px) {
  66. html,
  67. body {
  68. font-size: 12.5px;
  69. }
  70. }
  71. @media only screen and (max-width: 375px),
  72. only screen and (max-device-width:375px) {
  73. html,
  74. body {
  75. font-size: 11.71875px;
  76. }
  77. }
  78. @media only screen and (max-width: 360px),
  79. only screen and (max-device-width:360px) {
  80. html,
  81. body {
  82. font-size: 11.25px;
  83. }
  84. }
  85. @media only screen and (max-width: 320px),
  86. only screen and (max-device-width:320px) {
  87. html,
  88. body {
  89. font-size: 10px;
  90. }
  91. }
  92. @media only screen and (max-width: 240px),
  93. only screen and (max-device-width:240px) {
  94. html,
  95. body {
  96. font-size: 7.5px;
  97. }
  98. }

只需将以上内容定义为一个scss文件,比如_mobileRem.scss。然后在其他scss文件中通过@import引入即可:

  1. @import "common/_mobileRem";

当然不要忘了文件路径。

最后在使用的时候只需要将通过设计稿测量出来的px当做rem函数的参数即可:

  1. .m-FAB-banner {
  2. padding-top:rem(50px);
  3. padding-bottom:rem(130px);
  4. text-align:center;
  5. font-size: rem(26px);
  6. line-height: rem(42px);
  7. background: url(http://nos.netease.com/edu-image/57D6BC0DCE688F64B512C6D2A6D0C4E1.jpg) 100% 100% no-repeat;
  8. background-size:100% 100%;
  9. p {
  10. padding:rem(30px) rem(20px) 0 rem(20px);
  11. color:#fff;
  12. }
  13. }

注意事项

这里需要注意一点的是,即使是通过rem来管理单位,width属性还是不能完全适配。这里width、padding-left等水平方向上的单位必须通过测量的px/640px的百分比来进行布局,否则后果不堪设想。


感悟

做了几天移动端Web适配的工作,感觉移动端确实好麻烦,即使DOM元素比PC端少很多,但是适配各个机型确实相当麻烦。想起老师一句话,css是一笔一笔画出来的。唉,真的是这个样子。

最后放上完整的_mobileRem.scss文件内容:

  1. $brower-default-font-size:20px !default;
  2. @function rem($px) {
  3. @return $px / $brower-default-font-size * 1rem;
  4. }
  5. @media only screen and (max-width: 1080px),
  6. only screen and (max-device-width:1080px) {
  7. html,
  8. body {
  9. font-size: 33.75px;
  10. }
  11. }
  12. @media only screen and (max-width: 960px),
  13. only screen and (max-device-width:960px) {
  14. html,
  15. body {
  16. font-size: 30px;
  17. }
  18. }
  19. @media only screen and (max-width: 800px),
  20. only screen and (max-device-width:800px) {
  21. html,
  22. body {
  23. font-size: 25px;
  24. }
  25. }
  26. @media only screen and (max-width: 720px),
  27. only screen and (max-device-width:720px) {
  28. html,
  29. body {
  30. font-size: 22.5px;
  31. }
  32. }
  33. @media only screen and (max-width: 640px),
  34. only screen and (max-device-width:640px) {
  35. html,
  36. body {
  37. font-size: 20px;
  38. }
  39. }
  40. @media only screen and (max-width: 600px),
  41. only screen and (max-device-width:600px) {
  42. html,
  43. body {
  44. font-size: 18.75px;
  45. }
  46. }
  47. @media only screen and (max-width: 540px),
  48. only screen and (max-device-width:540px) {
  49. html,
  50. body {
  51. font-size: 16.875px;
  52. }
  53. }
  54. @media only screen and (max-width: 480px),
  55. only screen and (max-device-width:480px) {
  56. html,
  57. body {
  58. font-size: 15px;
  59. }
  60. }
  61. @media only screen and (max-width: 414px),
  62. only screen and (max-device-width:414px) {
  63. html,
  64. body {
  65. font-size: 12.9375px;
  66. }
  67. }
  68. @media only screen and (max-width: 400px),
  69. only screen and (max-device-width:400px) {
  70. html,
  71. body {
  72. font-size: 12.5px;
  73. }
  74. }
  75. @media only screen and (max-width: 375px),
  76. only screen and (max-device-width:375px) {
  77. html,
  78. body {
  79. font-size: 11.71875px;
  80. }
  81. }
  82. @media only screen and (max-width: 360px),
  83. only screen and (max-device-width:360px) {
  84. html,
  85. body {
  86. font-size: 11.25px;
  87. }
  88. }
  89. @media only screen and (max-width: 320px),
  90. only screen and (max-device-width:320px) {
  91. html,
  92. body {
  93. font-size: 10px;
  94. }
  95. }
  96. @media only screen and (max-width: 240px),
  97. only screen and (max-device-width:240px) {
  98. html,
  99. body {
  100. font-size: 7.5px;
  101. }
  102. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注