web前端小知识

常用的浏览器内核分别是什么?

  • 1.谷歌浏览器使用的是webkit
  • 2.opera 使用的是Presto,这是目前公认网页浏览速度最快的浏览内核
  • 3.Mozilla Firefox,使用的Geckon内核
  • 4.IE 使用的是Trident;

页面中引入css的方式主要有3种:行内添加style属性值,页面头部内嵌调用和外链,其中外链引用有两种:link和@import。

  • 外部引用css两种方式分别为link和@import的方式:

    XML/HTML代码:
    <link rel="stylesheet"type="text/css" media="all" href="css文件"/>
    XML/html代码:
    <style type="text/css" media="screen">
    @import url('css文件');
    </style>
  • 两者都是外部引用css的方式,但是存在一定的区别:

    • 区别1:link是xhtml标签,除了加载css外,还可以定义其他;@import属于css范畴,只能加载css
    • 区别二:link引用css时,在页面载入时同时加载;@import需要页面完全载入以后加载。
    • 区别三: link是xhtml标签,无兼容问题;@import是在css2提出的,低版本的浏览器不支持。
    • 区别四:link支持使用javascript控制Dom去改变样式;而@import不支持。
    • 补充:@import最优写法

      • @import的写法一般有下列几种:

      • @import ‘style.css’ //Windows IE4/ NS4, Mac OS X IE5, Macintosh IE4/IE5/NS4不识别

      • @import “style.css” //Windows IE4/ NS4, Macintosh IE4/NS4不识别

      • @import url(style.css) //Windows NS4, Macintosh NS4不识别

      • @import url(‘style.css’) //Windows NS4, Mac OS X IE5, Macintosh IE4/IE5/NS4不识别
      • @import url(“style.css”) //Windows NS4, Macintosh NS4不识别
      • 由上分析知道,@import url(style.css) 和@import url(“style.css”)是最优的选择,兼容的浏览器最多。从字节优化的角度来看@import url(style.css)最值得推荐。

针对浏览器的兼容性问题你如何检测

- CrossBrowserTesting不用翻墙就可以测试,允许用户与超过100%分辨率/浏览器/操作系统组合,测试网站。还为移动网络浏览器提供重要的支持。
-  ghostLab:提供同步测试滚动,点击,重新加载等,并形成信息输入到所有的连接设备,可以测试整个用户体验,而不仅仅是一个简单的页面。

标准模式与怪异模式

  • 各个浏览器对页面的渲染不同,甚至在同一浏览器的不同版本对页面的渲染也有所不同。要是想要写出跨浏览器的css代码,必须知道浏览器解析css代码的两种模式:标准模式与怪异模式。
    • 标准模式是指,w3c标准解析执行代码;
    • 怪异模式则是使用浏览器自己的方式解析执行代码,因为不同的浏览器解析执行代码的方式不一样,所以称之为怪异模式。
    • 浏览器解析时到底使用标准模式还是怪异模式,与你网页中的DTD声明有关,DTD声明定义了标准文档的类型(标准模式解析),会使浏览器使用相应的方式来加载网页并显示,忽略DTD声明,将使网页进入怪异模式。
    • 如果你的网页不包含任何声明,那么浏览器就会采用怪异模式来解析,如果你的网页包含DTD声明浏览器就会按照你所声明的标准解析。
    • 标准模式与怪异模式有什么不同的?
    • IE6不认识!important声明,IE7,IE8,Firefox,Chrome等浏览器认识;而在怪异模式中,IE6/7/8都不认识!important声明,这只是区别的一种,还有很多其他的区别,所以,要想写出跨浏览器的css,你最好采用标准模式.
    document.compatMode=="CSS1Compat" //已经声明DTD(标准模式)
    document.compatMode=="BackCompat" //
    未声明DTD(怪异模式)
    ```
### 浏览器的兼容性问题总结
 - 事件对象
     - 标准浏览器:一般通过函数传参的形式传进什么就是什么,一般会是e
     - IE浏览器下:应该window.event
 - 事件目标对象
     - 标准下:e.target
     - IE浏览器:event.srcElement
 - 阻止默认事件
     - 标准下:e.preventDefault();
     - IE浏览器:event.returnValue=false;
 - 阻止冒泡事件
     - 标准下:e.stopPropagation();
     - IE浏览器:e.cancelBubble=true;

-2. 页面的滚动坐标
    - 正常浏览器(除了ie6/7/8:window.pageYoffset
    - 已经声明DTD(标准模式):document.documentElement.scrollTop
    - 未声明DTD(怪异模式):document.body.scrollTop

因此,可以和写为:
var scrollTop=window.pageYOffset ||document.documentElement.scrollTop || document.body.scrollTop ||0;


//封装一个自己写的scroll()函数
function scroll(){
if(window.pageYoffset){
return {
left:window.pageXoffset,
top:window.pageYoffset
}
}else if(document.compatMode ==’CSS1Compat’){
return {
left:document.documentElement.scrollLeft,
top:document.documentElement.scrollTop
}
}else{
return{
left:document.body.scrollLeft,
top:document.body.scrollTop
}
}
}

““

网页的可视区宽高
 网页的可视区宽高非常常用,但是存在很大兼容性问题
1)正常浏览器(包括IE9+):window.innerWidth
2)标准模式:document.documentElment.clientWidth
3)怪异模式:document.body.clientWidth

“`
因此可以和写为
var clientWidth=window.innerWidth ||document.documentElement.clientWidth ||document.body.clientWidth||0;


- 计算后样式的获取
- 工作中经常需要获取一个元素的最终样式
然而通过div.style.left只能获取得到行内样式,而样式来自内嵌或者外链的样式表我们是获取不到的,那么应该如何来计算呢?
- ie6/7/8 : 元素。currentStyle.属性名 或 元素。currentStyle["属性名"]

demo.currentStyle.left
或者 demo.current[“left”];

```
- W3c:window.getComputedStyle(元素,伪元素)["属性名"]
```
window.getComputedStyle('div',null)['left'];
//一般情况下没有伪元素,我们使用null来替代。
```

- 封装getStyle方法,封装一个自己的方法来获取任意对象的计算后样式的属性,并且兼容所有的浏览器
“`
function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}else{
return window.getComputedStyle(obj,null)[attr];
}
}

“`

事件委托

<body>
<button id="btn">按钮</button>
</body>
</html>
<script>
    var btn = document.getElementById("btn");
    // btn.onclick = function () {
    //     alert("btn被点击了");
    // }
    // document.onclick = function () {
    //     alert("document被点击了");
    // }
    //或者利用事件委托,只要形成父子级关系,父亲绑定的事件,他的子孙后代都会触发该事件。
    //addEventListener第一个参数是一个事件类型字符串(不包含on),第二个是一个回调函数,第三个是布尔值,默认是false,如果是true,则代表先从大的范围具体的目标(捕获事件),在从具体目标到大的范围(冒泡事件)
    //所以事件委托的事件流机制就是:捕获+冒泡
    document.addEventListener('click',function(e){
      var target= e.target;
      target.onclick=function(){
        alert('你被点击了');
      }
    },true);
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值