关键字‘浏览器’的相关文章

探讨文本阴影和盒阴影

定义文本阴影格式为text-shadow:length1 lenth2 length3 color,其中length1、length2分别为在水平方向和垂直方向的偏移量,length3是模糊半径,color为颜色值,如果 length1为正值,说明向右偏移,负值则向左偏移;同理,length2为正值,说明向下偏移,负值则向上偏移。具体效果见下图:

探讨文本阴影和盒阴影

可喜的是除了以Trident为渲染引擎的浏览器外(IE内核),其他主流浏览器的较新版本都可以完美支持此属性,通过上图也可以看到此属性的神奇效果也是立竿见影。

相对于文本阴影,盒阴影的定义要复杂那么一点点,由于盒模型还在进一步的发展中,所有要想体验它的魔幻特性,要通过浏览器的私有属性来声明。

  1. Firefox3.5通过私有属性-moz-box-shadow来声明,包括多阴影、inset关键字和传播半径。
  2. Safari/Chrome跟Firefox实现方式类似,通过私有属性-webkit-box-shadow来支持阴影,多阴影从4.0版本开始支持,但是还不支持inset关键字和传播半径。
  3. Opera和微软IE浏览器还没有实现盒子阴影属性,但是在IE浏览器,您可以试着使用他们私有的DropShadow过滤器。

具体格式如下:

  • -moz-box-shadow:length1 length2 length3 length4 color;
  • -webkit-box-shadow:length1 length2 length3 length4 color;

其中length1,length2的特性和text-shadow中的一样,分别表示水平和垂直偏移量,length3表示模糊半径,length4表示传播半径,可以是正值也可以是负值,使用正值表示影子拉长,使用负值表示影子缩短,而这个长度是相对于父元素的大小而言的,在一般情况下,可以不用这个参数。

例如:

  1. #box{
  2.   margin:50px;
  3.   padding:10px;
  4.   border:1px solid #999;
  5.   -moz-box-shadow:2px 2px 6px 0 #999;
  6.   -webkit-box-shadow:2px 2px 6px #999;
  7. }
  8. <div id="box">Safari,Chrome,Mozilla Firefox3.5+下可以看到效果</div>

效果图见上,需要指出的是,盒阴影不占据普通流空间,对于这一点,有兴趣的同学可以测试一下!

认识浏览器的渲染引擎

浏览器的渲染引擎负责取得网页的内容(html、xml、图像等)、整理讯息(加入css,javascript等),以及计算网页的显示方式,然后会输出至显示器或打印机。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要渲染引擎。

了解浏览器的渲染类型有助于我们理解浏览器的私有属性,从而增强web设计的感,例如:

  1. -o-:以Presto为渲染引擎的浏览Opera的私有属性、
  2. -moz-:以Gecko为渲染引擎的浏览器Mozilla Firefox的私有属性
  3. -webkit-:以Webkit为渲染引擎的浏览器Safari、Google Chrome的私有属性

下表列举了几种主流浏览器的渲染引擎类型,希望对浏览器私有属性还不甚了解的朋友有所帮助!

渲染引擎 浏览器
Trident Internet Explorer
Gecko Mozilla Firefox
WebKit Safari、google Chrome
Presto Opera

利用haslayout征服IE6、7

haslayoutWindows Internet Explorer渲染引擎的一个内部组成部分。在IE中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组织内容。为了调节这两个不同的概念,渲染引擎采用了hasLayout的属性,属性值可以为truefalse

html元素中,负责组织自身内容的元素将默认有一个布局,主要包含以下元素: body, html, table, tr, th, td, img, hr, input, button, file, select, textarea, fieldset, marquee, frameset, frame, iframe, objects, applets, embed。而div, ul, li, h1~h6之流,在默认情况下,是没能获得layout的,按照微软给出的解释,这是出于对“性能和简洁”和间接的考虑,如果所有元素都默认有布局,会对性能和内存使用上产生有害的影响。

乍一看这段话,似乎不知所云,但是如果说在IE中稀奇古怪的bug和这个所谓的haslayout有关,或许可以吸引你的些许注意力,相信每个有过前端开发经历的人,都会对IE系列浏览器中形形色色的诸多bug搞的焦头烂额。针对这些bug,我们知道一种或者几种不同的解决办法(方法当然是有巧拙之分的),但是对于问题的根源,我们却经常不去深究,也不知道如何去更深一层的认识它!

当网页在IE中有异常表现时,可以尝试激发haslayout来看看是不是问题所在,最常用的方法是给某元素css设定zoom:1或者width/height属性,其次再考虑其他属性,因为使用这两种方法能在不改变现有环境的条件下激发元素的haslayout

事实上大部分的IE显示错误,都可以通过激发元素的haslayout属性来修正,能激发元素haslayout的属性值除zoom和width/height之外还包括:

display: inline-block
float: (left 或 right)
position: absolute
writing-mode: tb-rl

另外本文中提到的IE,只包括IE6和IE7,至于新版本的IE8,不在范围之内,貌似IE8已经解决了haslayout带来的诸多麻烦,具体情况不详!