移动端css、Js优处理

摘要:
CSS篇0.5px细线移动端H5项目越来越多,设计师对于UI的要求也越来越高,比如1px的边框。在高清屏下,移动端的1px会很粗。主要是跟一个东西有关,DPR设备像素比,它是默认缩放为100%的情况下,设备像素和CSS像素的比值。目前主流的屏幕DPR=2,或者3。拿2倍屏来说,设备的物理像素要实现1像素,而DPR=2,所以css像素只能是0.5。

CSS 篇

0.5px细线

移动端 H5 项目越来越多,设计师对于 UI 的要求也越来越高,比如 1px 的边框。在高清屏下,移动端的 1px 会很粗。

那么为什么会产生这个问题呢?主要是跟一个东西有关,DPR(devicePixelRatio) 设备像素比,它是默认缩放为 100%的情况下,设备像素和 CSS 像素的比值。目前主流的屏幕 DPR=2(iPhone 8),或者 3(iPhone 8 Plus)。拿 2 倍屏来说,设备的物理像素要实现 1 像素,而 DPR=2,所以 css 像素只能是 0.5。

下面介绍最常用的方法

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible"content="ie=edge">
  <title>Document</title>
  <style>body{padding:300px;
    }.border{width:300px;border-bottom:1px solid red;
    }
    /*底边框 */.b-border{width:300px;position:relative;
    }.b-border:before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background:red;transform:scaleY(0.5);-webkit-transform:scaleY(0.5);transform-origin:0 0;-webkit-transform-orgin:0 0;
    }
    /*上边框 */.t-border{width:300px;position:relative;
    }.t-border::before{content:'';position:absolute;left:0;top:0;width:100%;height:1px;background:red;transform:scaleY(0.5);-webkit-transform:scaleY(0.5);transform-origin:0 0;-webkit-transform-orgin:0 0;
    }
    /*左边框 */.l-border{height:30px;position:relative;
    }.l-border::before{content:'';position:absolute;left:0;top:0;width:1px;height:100%;background:red;transform:scaleX(0.5);-webkit-transform:scaleX(0.5);transform-origin:0 0;-webkit-transform-origin:0 0 ;
    }
    /*右边框 */.r-border{height:30px;position:relative;
    }.r-border::before{content:'';position:absolute;right:0;top:0;width:1px;height:100%;background:red;transform:scaleX(0.5);-webkit-transform:scaleX(0.5);transform-origin:0 0;-webkit-transform-origin:0 0;
    }
  </style>
</head>
<body>
  <div>1px边框:</div>
  <br/>
  <div class="border"></div>
  <br/>
  <div>0.5px边框:</div>
  <br/>
  <div>底边框:</div>
  <br/>
  <div class="b-border"></div>
  <br/>
  <div>上边框:</div>
  <br/>
  <div class="t-border"></div>
  <br/>
  <div>左边框:</div>
  <br/>
  <div class="l-border"></div>
  <br/>
  <div>右边框:</div>
  <br/>
  <div class="r-border"></div>
  <br/>
</body>
</html>

效果如下:

移动端css、Js优处理第1张

屏蔽用户选择

禁止用户选择页面中的文字或者图片

div {-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;
}

如何禁止保存或拷贝图像

代码如下

img {-webkit-touch-callout:none;
}

输入框默认字体颜色

设置 input 里面 placeholder 字体颜色

input::-webkit-input-placeholder,
textarea::-webkit-input-placeholder {color:#c7c7c7;
}input:-moz-placeholder,
textarea:-moz-placeholder {color:#c7c7c7;
}input:-ms-input-placeholder,
textarea:-ms-input-placeholder {color:#c7c7c7;
}

用户设置字号放大或者缩小导致页面布局错误

设置字体禁止缩放

/*ios */body {-webkit-text-size-adjust:100% !important;text-size-adjust:100% !important;-moz-text-size-adjust:100% !important;
}
/*Android */
<script>
     //android禁止微信浏览器调整字体大小
        if (typeof WeixinJSBridge == "object" && typeof WeixinJSBridge.invoke == "function") {
            handleFontSize();
        } else{
            if(document.addEventListener) {
                document.addEventListener("WeixinJSBridgeReady", handleFontSize, false);
            } else if(document.attachEvent) {
                document.attachEvent("WeixinJSBridgeReady", handleFontSize);
                document.attachEvent("onWeixinJSBridgeReady", handleFontSize);  }
        }
        functionhandleFontSize() {
            //设置网页字体为默认大小
            WeixinJSBridge.invoke('setFontSizeCallback', { 'fontSize' : 0});
            //重写设置网页字体大小的事件
            WeixinJSBridge.on('menu:setfont', function() {
                WeixinJSBridge.invoke('setFontSizeCallback', { 'fontSize' : 0});
            });
        }
</script>

Android 系统中元素被点击时产生边框

部分android系统点击一个链接,会出现一个边框或者半透明灰色遮罩, 不同生产商定义出来额效果不一样。去除代码如下

a,button,input,textarea{-webkit-tap-highlight-color:rgba(0,0,0,0)
  -webkit-user-modify:read-write-plaintext-only; 
}

ios 滑动不流畅

ios 手机上下滑动页面会产生卡顿,手指离开页面,页面立即停止运动。整体表现就是滑动不流畅,没有滑动惯性。 iOS 5.0 以及之后的版本,滑动有定义有两个值 auto 和 touch,默认值为 auto。

解决方案

1、在滚动容器上增加滚动 touch 方法

.wrapper {-webkit-overflow-scrolling:touch;
}

2、设置 overflow 设置外部 overflow 为 hidden,设置内容元素 overflow 为 auto。内部元素超出 body 即产生滚动,超出的部分 body 隐藏。

body {overflow-y:hidden;
}.wrapper {overflow-y:auto;
}

JS 篇

iOS 上拉边界下拉出现空白

手指按住屏幕下拉,屏幕顶部会多出一块白色区域。手指按住屏幕上拉,底部多出一块白色区域。

在 iOS 中,手指按住屏幕上下拖动,会触发 touchmove 事件。这个事件触发的对象是整个 webview 容器,容器自然会被拖动,剩下的部分会成空白。

解决方案

document.body.addEventListener(
  'touchmove',
  function(e) {
    if (e._isScroller) return
    //阻止默认事件
e.preventDefault()
  },
  {
    passive: false}
)

参考文章: 总结移动端H5开发常用技巧

免责声明:文章转载自《移动端css、Js优处理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Error creating bean with name 'sqlSessionFactory' defined in class path resource 报错解决[转载]oracle删除数据后的恢复下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

页面渲染机制(一、DOM和CSSOM树的构建)

1、HTML的加载   HTML是一个网页的基础,下载完成后解析 2、其他静态资源加载   解析HTML时,发现其中有其他外部资源链接比如CSS、JS、图片等,会立即启用别的线程下载。   但当外部资源是JS时,HTML的解析会停下来,等JS下载完执行结束后才继续解析HTML,防止JS修改已经完成的解析结果 3、DOM树构建   在HTML解析的同时,解析...

JS打印指定区域内容

  很多时候,我们在做系统的时候要做打印功能,打印在js中其实很简单,不过这个很简单的代码并不能满足我们的特定需求,比如我们需要打印的表单在很多文字的中间,或者文字中包含一些广告或者图片什么的,这就很难用:window.print();这时,我们就要分区域的打印,将需要打印的内容提取出来让打印机知道,而不是一股脑的全部打印!下面是两种实现的方法:  第一种...

如何在CentOS 7上安装Node.js和npm

Node.js是一个跨平台的JavaScript运行时环境,允许在服务器端执行JavaScript代码。Node.js主要用于后端,但也作为全栈和前端解决方案而流行。 npm,Node软件包管理器的缩写,是Node.js的默认软件包管理器,也是用于发布开源Node.js软件包的世界上最大的软件存储库。 本文引导完成在CentOS 7计算机上安装Node....

js 递归思想 处理后台多维数组的数据 之 完美契合

不多BB! 直接看源码 get(tree = []) {let self = thislet arr = [];if (!!tree && tree.length !== 0) {tree.forEach(item => {let obj = {};obj.title = item.menuName;// obj.id = item....

phpExcel常用方法详解【附有php导出excel加超级链接】

开发包Tests目录有详细使用实例 支持中文,注意文件编码,文件保存为utf-8 写excel //Include class require_once(‘Classes/PHPExcel.php’); require_once(‘Classes/PHPExcel/Writer/Excel2007.php’); $objPHPExcel = new PHP...

学习使用:before和:after伪元素

如果你一直密切关注着各种网页设计的博客,你可能已经注意到了:before和:after伪元素已经在前端开发中获得了相当多的关注。特别是在Nicolas Gallagher的博客中,后期运用了很多伪类元素。 Nicolas Gallagher使用伪元素用静态的HTML标签创建84个GUI图标。 为了补充说明上述内容(和利用当前发展的趋势),我收集一些完全在...