Appearance
浏览器兼容问题
CSS兼容问题
1. 内外边距 不同浏览器标签默认的外边距和内边距不同, 经常开发的人肯定会看见这句话, 也是解决这个问题的基本操作。
css
* {
margin: 0px;
padding: 0px;
}
2. 隐藏滚动条的方式不同
css
/* chrome */
::-webkit-scrollbar {
/*隐藏滚轮*/
display: none;
}
/* firefox */
scrollbar-width: none;
3. css权重取值不同
chrome和firefox不同,穿透样式修改时,firefox不生效。
4. 字体大小
chrome的默认最小字号大小为12px, 用户可以自行通过浏览器设置最小的字号。
而safari/firefox的最小字号可以到0px, 这就导致小于12px的字体不能在chrome更好的显示。
解决的办法:
- transform 将文字按比例缩小, 但是会带来问题, 缩小不会改变实际的dom元素大小, 只能有视觉上的缩小。
- image 将所要展示的内容区域转换成图片来显示。
5. CSS3的阴影效果
css
.box {
-webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5);
box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5);
}
6. input输入框高度问题
输入框写了高度,一定要给line-height,不然safari会出现文字位置不对的问题。
移动端
1. vedio标签在安卓端不能自动播放
ios设备可以较好的对vedio标签的api进行调用, 而安卓设备存在的问题较多。
2. 移动端使用100vh问题
原因: 页面内容区域用的单位是vh, 而在第一次进入加载时, 还没有对应的路由栈信息, 所以底部不会出现后退前进的操作拦, 但是当进行了路由操作后, 操作栏就出现了, 但是高度还是计算了这一部分, 导致页面无法拖动到最底部。
JS兼容问题
1. scrollTop取值
js
scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
2. 获取元素的文本内容
js
var element = document.getElementById('myElement');
var text = element.textContent || element.innerText;
3. 添加事件处理程序 不同浏览器对事件处理程序的支持方式也存在差异。例如,旧版本的Internet Explorer使用attachEvent()
而不是addEventListener()
。
js
var button = document.getElementById('myButton');
if (button.addEventListener) {
button.addEventListener('click', myFunction);
} else if (button.attachEvent) {
button.attachEvent('onclick', myFunction);
}
4. AJAX
不同浏览器对Ajax请求的处理方式也有所不同。例如,某些浏览器可能不支持原生的XMLHttpRequest对象,而需要使用ActiveX对象。
js
// 创建XMLHttpRequest对象
function createXHR() {
if (typeof XMLHttpRequest != 'undefined') {
return new XMLHttpRequest();
} else if (typeof ActiveXObject != 'undefined') {
if (typeof arguments.callee.activeXString != 'string') {
var versions = ['MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp'];
for (var i = 0; i < versions.length; i++) {
try {
new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
break;
} catch (ex) {
// 忽略错误
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
} else {
throw new Error('No XHR object available.');
}
}
5. IE 取消冒泡/取消默认事件的方式不同