前言
在做移动端电商项目时,碰到了很多的问题。而且这只是自己手机测试出来的问题,顿时感觉压力山大。写篇博客随时记录一下,希望慢慢积累之后,对于移动端项目能够变得得心应手!
1.关于如何改变input placeholder样式的总结
经常在项目中碰到输入框中有默认提示文字,需要实现的功能是:
(1)提示文字颜色为浅灰色,但输入字体颜色为黑色;
(2)获取焦点后提示文字消失。
第一种用input::-webkit-input-placeholder实现,第二种用input:focus::-webkit-input-placeholder实现。
以下为所有总结~
1.input
改变整个input的样式,如宽高间距等。
1 | input{ |
2.input[placeholder]
可以改变光标的颜色,也可以改变其它样式,于input{}的区别就在于可以改变光标的颜色。
1 | input[placeholder]{ |
如图所示:
3.input::-webkit-input-placeholder
只能改变默认placeholder字体的样式。
1 | input[type=text]::-webkit-input-placeholder { |
如图所示:
3.input:focus::-webkit-input-placeholder(获取焦点后改变)
只改变获取焦点之后,placeholder字体的样式。一般都让字体颜色为透明transparent,input获取焦点后placeholder文字消失。
1 | input:focus::-webkit-input-placeholder { |
2.如何解决输入内容时,自动换行并且输入框高度随输入内容增加?
这部分内容参考:http://blog.csdn.net/libin_1/article/details/50755472
*方法一、使用HTML5 新属性contenteditable 实现 *
使用contenteditable 属性实现, 它是HTML5 中的新属性。
取值:
值 | 描述 |
---|---|
true | 规定可以编辑元素内容。 |
false | 规定无法编辑元素内容。 |
安利一个查询css属性兼容性的网站: http://caniuse.com/
兼容性如图所示:
1 |
|
方法二、使用原生JS让文本框textarea根据输入内容自适应高度
1 |
|
3.如何解决input获取焦点后,手机输入框弹出把底部固定定位顶起来的问题?
1 | var flag = false; |
在我的项目中有效,但是存在一个问题:ios不支持onresize事件。
4.如何解决input获取焦点后,手机输入框把input挡住的问题?
使用scrollIntoView实现
取值:
值 | 描述 |
---|---|
true | 元素的顶端将和其所在滚动区的可视区域的顶端对齐 |
false | 元素的底端将和其所在滚动区的可视区域的底端对齐 |
兼容性如图所示:
从图上看出,该属性除了Chrome比较支持以外,其它浏览器都只是部分支持,Opera Mini更是完全不支持。
1 | $("input").on("focus",function () { |
我的项目用这个属性解决了问题,但是我为了让输入框不显示在最顶部,我把target的范围加大了,让输入框显示在屏幕中上部。
最后,经过初步实践,我推测出现这个问题是因为使用了overflow,目前不知道原因~
5.A元素有点击事件,如何让定位在它上面的B元素也能触发点击事件?
这个是我要解决如何让定位在select标签上的元素也触发select事件所提出的问题。由于我并不知道select下拉和收起具体是什么事件,所以我也不知道如何通过js去解决。最后,我在网上找到了一个办法,只要给B元素设置 pointer-events: none; css属性就可以解决这个问题了。
pointer-events
是CSS3中又一冉冉的属性,其支持的值非常多,不过大多都与SVG相关,我们可以不用理会。我们需要重点学习的是pointer-events: none;
pointer-events: none;的作用是让元素实体“虚化”。在以上的情况中,就是让B元素“虚化”,因此点击A元素时,能够直接触发下拉和收起事件。
兼容性如图所示:
6.如何改变表单元素的默认样式?
1 | //1.使用appearance改变webkit浏览器的默认外观 |
虽然以上属性可以改变表单样式,但我在测试中发现当select改变默认样式或者禁用select默认样式时,小三角就会消失不见。因此,还需在select中定位一个小三角。之后,我又发现点击小三角时,不会出发select的下拉和收起事件。这个问题在第5点说明了,给这个小三角设置pointer-events: none;属性就可以了。
7.移动端打电话、发短信、发邮件自动跳转到相应界面的实现
1 | // 1.打电话 |
8.屏幕旋转的事件和样式如何设置?
orientationchange 事件是在用户水平或者垂直翻转设备(即方向发生变化)时触发的事件。
1 | //JS处理 |
9.重力感应事件devicemotion
在网上找了一个摇一摇抽奖的例子:
1 |
|