javaScript与css、html常见的兼容
最近几天总是遇到兼容问题,就整理了一下javaScript和html、css出现的常见兼容。有不全面或不对的欢迎大家指正。也希望这条博客可以帮到一些刚学习的前端的朋友。
一、javaScript出现的兼容问题
1、DOM样式操作
获取行内/非行内样式(不能用来设置,只能获取)
正常浏览器写法:
getComputedStyle(element, false).attr 获取外部样式,false表示不是伪类。(IE9可以,IE8以下不支持)
IE浏览器写法:
element.currentStyle.attr
// function getStyle(ele,attr){ //ele元素,attr属性
if (ele.currentStyle) {
return ele.currentStyle[attr];
} else {
return getComputedStyle(ele, false)[attr];
}
2、事件对象的获取
正常浏览器:事件处理函数的第一个参数 ( eve)
IE浏览器:通过window找event属性 (window.event)
兼容写法:
element.onclick = function (eve) {
var e = eve || window.event;
console.log(e);
}
3、键盘事件对象
正常浏览器:e.keyCode
IE: e.which
兼容写法:
document.onkeydown = function (eve) {
var e = eve || window.event;
var code = e.keyCode || e.which;
}
4、阻止事件冒泡
当内层元素的事件被触发时,会依次向上触发所有父级的相同事件
正常浏览器:e.stopPropagaction
IE浏览器:e.cancelBubble=true
兼容写法:封装一个名为stopBbble的函数
function stopBubble(e){
if(e.stopPropagation){
e.stopPropagation();
}else{
e.cancelBubble = true;
}
}
5、阻止默认事件
系统提供了都属于默认
正常浏览器:e.preventDefault()
IE浏览器:e.returnValue=false
兼容写法:
function stopDefault(e){
if(e.preventDefault){
e.preventDefault()
}else{
e.returnValue = false;
}
}
6、事件委托target的兼容
// 将多个子元素的相同事件,加给共同的现有的父元素,实现节省事件的目的
正常浏览器:e.target
IE浏览器:e.srcElement
兼容写法:
var target=e.target||e.srcElement
7、绑定事件与删除事件
正常浏览器写法:
监听式绑定事件(可以重复绑定事件区别于赋值式)
obox.addElementListener=("click",function(){
console.log("hello");
},false)
删除监听式绑定事件
obox.addElementListener=("click",fn1,flase)
function fn1(){
console.log(2);
}
obox.removeElementListener=("click",fn1,false);
IE浏览器写法
绑定事件:
obox.attachEvent("onclick", function(){
console.log(1);
})
删除事件
obox.detachEvent("onclick",fn1)
绑定事件的兼容写法:
function addEvent(ele,type,cb){ //ele参数 type事件类型 cb回调函数
if(ele.attachEvent){
ele.attachEvent("on"+type,cb)
}else{
ele.addEventListener(type,cb,false)
}
}
删除事件的兼容写法
function removeEvent(ele, type, cb) {
if (ele.detachEvent) {
ele.detachEvent("on" + type, cb)
} else {
ele.removeEventListener(type, cb, false)
}
}
二、下面是css和html的一些常见的兼容
1、双倍浮动BUG:
描述:块状元素设置了float属性后,又设置了横向的margin值,在IE6下显示的margin值要比设置的值大;
解决方案:给float的元素添加 display:inline;将其转换为内联元素;
2、表单元素行高不一致:
解决方案:
a、给表单元素添加vertical-align:middle;
b、给表单元素添加float:left;
3、IE6(默认16px为最小)不识别较小高度的标签(一般为10px):
解决方案:
a、给标签添加overflow:hidden;
b、给标签添加font-size:0;
4、图片添加超链接时,在IE浏览器中会有蓝色的边框:
解决方案:
给图片添加border:0或者border:none;
5、最小高度min-height不兼容IE6;
解决方案:
a、min-height:100px;_height:100px;
b、min-height:100px;height:auto!important;height:100px;
6、图片默认有间隙:
解决方案:
a、给img添加float属性;
b、给img添加display:block;
7、按钮默认大小不一:
解决方案:
a、如果按钮是一张图片,直接用背景图作为按钮图片;
b、用a标记模拟按钮,使用JS实现其他功能;
8、百分比BUG:
描述:父元素设置100%,子元素各50%,在IE6下,50%+50%大于100%;
解决方案:
给右边的浮动元素添加clear:right;
9、鼠标指针BUG:
cursor:hand 只有IE浏览器识别;
cursor:pointer;IE及以上浏览器和其他浏览器都识别(手型);
10、透明度设置,IE不识别opacity属性:
解决方案:
标准写法:opacity:value;(取值范围0-1);
兼容IE浏览器 filter:alpha(opacity=value);(取值范围1-100);
11、上下margin重叠问题:
描述:给上面的元素设置margin-bottom,给下面的元素设置margin-top,只能识别其中较大的那个值;
解决方案:
a、margin-top和margin-bottom 只设置其中一个值;
b、给其中一个元素再包裹一个盒子,并设置over-flow:hidden;
12、给子元素设置margin-top.应用在了父元素上:
解决方案:
a、把给子元素设置的margin-top改为给父元素设置padding-top;
b、给父元素设置1px的border,即border-top:1px solid transparent;
c、给父元素设置over-flow:hidden;
d、给父元素设置float:left;
javaScript与css、html常见的兼容的更多相关文章
- JavaScript中几种常见的兼容问题及解决方案
在js中好用的东西一般都存在兼容问题,以下,我整理了一些常用的兼容处理方法,自己用的时候可以把他们放在一个JS文件中,需要用到时候直接引入,会比较方便. 一.获取非行内样式 function getS ...
- div+css中常见的浏览器兼容性处理-兼容不同浏览器
在网站设计的时候,应该注意css样式兼容不同浏览器问题,特别是对完全使用DIV CSS设计的网,就应该更注意IE6 IE7 FF对CSS样式的兼容,不然,你的网乱可能出去不想出现的效果! div+cs ...
- 重温JavaScript获取CSS样式的方法(兼容各浏览器)
众所周知,CSS样式有三种类型:行内样式.内部样式和外部样式,JavaScript获取CSS样式时分为两种情况:行内样式获取法 和 非行内样式获取法 . 一.行内样式获取相对简单,通过element. ...
- 前端html、Javascript、CSS技术小结
简单地总结了一下前端用过的html.javascript.css技术,算是清点一下,做个大略的小结,为进一步的学习给个纲领. 一.HTML 由于HTML5的兴起,简单地判断一个网页是否是html5网页 ...
- 5种JavaScript和CSS交互的方法
分享 分享 分享 分享 分享 随着浏览器不断的升级改进,CSS和JavaScript之间的界限越来越模糊.本来它们是负责着完全不同的功能,但最终,它们都属于网页前端技术,它们需 ...
- 5种你未必知道的JavaScript和CSS交互的方法
随着浏览器不断的升级改进,CSS和JavaScript之间的界限越来越模糊.本来它们是负责着完全不同的功能,但最终,它们都属于网页前端技术,它们需要相互密切的合作.我们的网页中都有.js文件和.css ...
- HTML文档中使用JavaScript和css
HTML文档中使用JavaScript和css 引入css 内嵌式引入:将css代码写在HTML中的style标签里面 <!DOCTYPE html> <html> <h ...
- IE常见的兼容处理
IE常见的兼容处理 1. 禁用IE兼容模式 为了保证IE能够使用最新渲染模式而不是兼容模式,在html文档头部应加入以下代码: <head> <meta charset=" ...
- 使用javascript和css模拟帧动画的几种方法浅析
我们平时在开发前端页面的时候,经常会播放一段帧序列.这段帧序列就像gif图片那样,反复循环播放.那大家可能会说,直接用gif图片就好了,干嘛还去模拟呢?那是因为要做得更加灵活,我们要做到以下几点: 1 ...
随机推荐
- [转帖]PG的时间函数使用整理如下
PG的时间函数使用整理如下 https://blog.csdn.net/dahuzix/article/details/48576945 1.获取系统时间函数 -- :: -- :: -- :: 2. ...
- 【BZOJ5104】Fib数列(BSGS,二次剩余)
[BZOJ5104]Fib数列(BSGS,二次剩余) 题面 BZOJ 题解 首先求出斐波那契数列的通项: 令\(A=\frac{1+\sqrt 5}{2},B=\frac{1-\sqrt 5}{2}\ ...
- secure-file-priv特性
转载自:https://segmentfault.com/a/1190000009333563 当出现:1290 - The MySQL server is running with the --se ...
- java如何消除太多的if else判断?
1.简介 if判断语句是很多编程语言的重要组成部分.但是,若我们最终编写了大量嵌套的if语句,这将使得我们的代码更加复杂和难以维护. 让我们看看能否使用别的方式来做呢. 设计模式是为了更好的代码重用性 ...
- java8 Lambda 表达式和函数式接口快速理解
前言 接上篇文章 java8 新特性 由于上篇过于庞大,使得重点不够清晰,本篇单独拿出 java8 的 Lambda 表达式和函数式接口说明. Lambda 表达式 lambda 表达式其实就是使用了 ...
- C# Newtonsoft.Json.JsonReaderException:“Could not convert string to decimal:
使用Newtonsoft.Json,报以上错误,问题的原因是有"",把“”替换成null: 以前的json: [{"WengvNj":"df5c38c ...
- eclipse使用SVN来检索项目
file——import——搜索框输入SVN——点击SVN检索项目 ——输入想要检索的地址
- Regex 提取字符串中重复数据且格式化显示
方法:用 $下标 提取满足项的值 /** * 餐食信息格式转换 * @早餐,1@晚餐,2 => 早餐(1份):晚餐(2份) */ convertMealInfo = (mealInfo ...
- ThinkPHP各个目录是什么含义ThinkPHP怎么安装和使用
最近kdchxue看完了smarty之后,想学习下框架,于是乎就选择了ThinkPHP,听说这个框架简单易用,另外还是国产的!所以kdchxue毫不犹豫的就选择了ThinkPHP 了!下面看看Thin ...
- 移动端调试神器vconsole,手机端网页的调试工具Eruda
移动端调试神器vconsole,手机端网页的调试工具Eruda 移动端中使用 vConsole调试 移动端调试工具vconsole安装Git地址:https://github.com/WechatFE ...