[关闭]
@15013890200 2018-08-23T15:48:19.000000Z 字数 3077 阅读 696

移动端开发自适应+样式清除

移动端 rem css


本人移动端开发经验尚浅,对于自适应方面还没有完全弄明白,之前开发用过rem,但是并没有完全弄明白怎么一回事,趁现在有空就整理学习一波。
代码搬运自 http://caibaojian.com/simple-flexible.html
感谢:-)

首先,是清理标签自带样式,一般在其项目的时候都会引入。

  1. body,dl,dd,ul,ol,h1,h2,h3,h4,h5,h6,pre,form,input,textarea,p,hr,thead,tbody,tfoot,th,td{margin:0;padding:0;}
  2. ul,ol{list-style:none;}
  3. a{text-decoration:none;}
  4. html{-ms-text-size-adjust:none;-webkit-text-size-adjust:none;text-size-adjust:none;}
  5. body{line-height:1.5; font-size:14px;}
  6. body,button,input,select,textarea{font-family:'helvetica neue',tahoma,'hiragino sans gb',stheiti,'wenquanyi micro hei',\5FAE\8F6F\96C5\9ED1,\5B8B\4F53,sans-serif;}
  7. b,strong{font-weight:bold;}
  8. i,em{font-style:normal;}
  9. table{border-collapse:collapse;border-spacing:0;}
  10. table th,table td{border:1px solid #ddd;padding:5px;}
  11. table th{font-weight:inherit;border-bottom-width:2px;border-bottom-color:#ccc;}
  12. img{border:0 none;width:auto\9;max-width:100%;vertical-align:top; height:auto;}
  13. button,input,select,textarea{font-family:inherit;font-size:100%;margin:0;vertical-align:baseline;}
  14. button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;}
  15. button[disabled],input[disabled]{cursor:default;}
  16. input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;}
  17. input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}
  18. input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}
  19. input:focus{outline:none;}
  20. select[size],select[multiple],select[size][multiple]{border:1px solid #AAA;padding:0;}
  21. article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block;}
  22. audio,canvas,video,progress{display:inline-block;}
  23. body{background:#fff;}
  24. input::-webkit-input-speech-button {display: none}
  25. button,input,textarea{
  26. -webkit-tap-highlight-color: rgba(0,0,0,0);
  27. }

其次是自适应的一些处理

  1. //designWidth:设计稿的实际宽度值,需要根据实际设置
  2. //maxWidth:制作稿的最大宽度值,需要根据实际设置
  3. //这段js的最后面有两个参数记得要设置,一个为设计稿实际宽度,一个为制作稿最大宽度,例如设计稿为750,最大宽度为750,则为(750,750)
  4. ;(function(designWidth, maxWidth) {
  5. var doc = document,
  6. win = window,
  7. docEl = doc.documentElement,
  8. remStyle = document.createElement("style"),
  9. tid;
  10. function refreshRem() {
  11. var width = docEl.getBoundingClientRect().width;
  12. maxWidth = maxWidth || 540;
  13. width>maxWidth && (width=maxWidth);
  14. var rem = width * 100 / designWidth;
  15. remStyle.innerHTML = 'html{font-size:' + rem + 'px;}';
  16. }
  17. if (docEl.firstElementChild) {
  18. docEl.firstElementChild.appendChild(remStyle);
  19. } else {
  20. var wrap = doc.createElement("div");
  21. wrap.appendChild(remStyle);
  22. doc.write(wrap.innerHTML);
  23. wrap = null;
  24. }
  25. //要等 wiewport 设置好后才能执行 refreshRem,不然 refreshRem 会执行2次;
  26. refreshRem();
  27. win.addEventListener("resize", function() {
  28. clearTimeout(tid); //防止执行两次
  29. tid = setTimeout(refreshRem, 300);
  30. }, false);
  31. win.addEventListener("pageshow", function(e) {
  32. if (e.persisted) { // 浏览器后退的时候重新计算
  33. clearTimeout(tid);
  34. tid = setTimeout(refreshRem, 300);
  35. }
  36. }, false);
  37. if (doc.readyState === "complete") {
  38. doc.body.style.fontSize = "16px";
  39. } else {
  40. doc.addEventListener("DOMContentLoaded", function(e) {
  41. doc.body.style.fontSize = "16px";
  42. }, false);
  43. }
  44. })(750, 750);
  • 使用方法
    1、引入以上代码到根文件
    2、根据设计稿大小,调整里面的最后两个参数值
    3、使用1rem=100px转换你的设计稿的像素,例如设计稿上某个块是100px*300px,换算成rem则为1rem*3rem
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注