First line
second line
third line
name
===== Babel =====
**影响范围**:Android4.0 - Android 4.2(or 4.3?)
目前移动端代码都用''ECMAScript 2015''编写,再使用[[http://babeljs.io/|Babel]]编译为''es5'',然而常用的[[https://babeljs.io/docs/plugins/preset-es2015/|es2015 preset]]在创建模块时默认添加了''%%__%%esModule''属性
Object.defineProperty(exports, '__esModule', {value: true});
所以会导致报错:
Cannot assign to read only property ‘__esModule’
**解决方法**:
使用''loose''模式,安装''es2015-loose''包
npm i babel-preset-es2015 babel-preset-es2015-loose
sed -i 's|es2015|es2015-loose|g' ./.babelrc
input {
-webkit-appearance: none;
appearance: none;
}
想要隐藏掉 ''textarea'' 右下角的角标,可用 ''resize'' 禁用掉调整大小的功能:
textarea.textarea {
resize: none;
}
===== Safari border-radius =====
**影响范围:** safari (当前版本为iOS 10)
如想设单边 ''border-radius'',在 ''safari'' 上可能会出现四个角都有 ''border-radius'' 的情况,所以最好声明另外一边的 ''border-radius'' 为0:
.right {
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
border-top-left-radius: 0; /* required */
border-bottom-left-radius: 0; /* required */
}
.left {
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
border-top-left-radius: 0; /* required */
border-bottom-left-radius: 0; /* required */
}
===== :empty selector =====
**影响范围:** Android 4.0-4.2
用 ''p:empty'' 选择器来隐藏掉部分空元素时把有内容的元素都隐藏了
示例代码:
First line
second line
third line
===== Debug on UC Browser =====
Install UC developer version: http://plus.uc.cn/document/webapp/doc5.html
First, enable Android adb debug mode. Then open ''chrome:\/\/inspect'' and allow permission on mobile, finally inspect the browser.
===== iPhone X 适配 =====
在 iPhone X 系列全面屏手机会出现下图底部操作栏覆盖掉 Tabbar 的情况
{{ :frontend:iphone-x-failed.png?400 }}
适配步骤为:
1. 在 ''viewport'' 添加 ''viewport-fit=cover''
2. 给 Tabbar 添加 ''padding-bottom''
.tabbar {
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
}
3. 检查所有页面的元素,通过 ''@supports'' 特性检测给所有 fixed bottom 布局的元素添加额外的 ''padding-bottom'' / ''margin-bottom''
@supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) {
div {
margin-bottom: constant(safe-area-inset-bottom);
margin-bottom: env(safe-area-inset-bottom);
}
}
===== 微信点击漂移 =====
**影响范围**:**iOS 微信端**
复现条件:点击 input 输入东西后,弹出弹窗确认(fixed 布局),弹窗的按钮不好点或者出现点击漂移。
讨论链接:[[http://html51.com/info-59028-1/|微信打开网页键盘弹起后页面上滑,导致弹框里的按钮响应区域错位]]
**解决方案:**
这是因为微信弹出输入法时顶开了整个页面,可以在最后一个 input blur 的时候强制页面滚动到页面顶部或者底部。
input.addEventListener('blur', function () {
window.scrollTo(0, 0);
});
===== Reference =====
* [[https://www.zhihu.com/question/34556725|在做 iOS 和 Android 的 HTML5 开发时,你都掉到过哪些坑里?]]