Chinaunix首页 | 论坛 | 博客
  • 博客访问: 80601
  • 博文数量: 10
  • 博客积分: 1330
  • 博客等级: 中尉
  • 技术积分: 315
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-25 17:07
文章分类
文章存档

2008年(10)

我的朋友
最近访客

分类:

2008-04-12 12:08:11

关于XHTML中自定义滚动条颜色失效问题

想把滚动条自定义成黑色,于是就在定义了BODY {SCROLLBAR-ARROW-COLOR:#FFFFFF;
SCROLLBAR-FACE-COLOR:#000000;
SCROLLBAR-DARKSHADOW-COLOR:#000000;
SCROLLBAR-HIGHLIGHT-COLOR:#999999;
SCROLLBAR-3DLIGHT-COLOR:#000000;
SCROLLBAR-SHADOW-COLOR:#999999;
SCROLLBAR-TRACK-COLOR:#000000;}

但是之后发现根本就没起作用,仔细研究才发现原来是doctype的原因,因为本站的doctype是XHTML 1.0 transitional doctype的。

在原来的html的时候,我们可以这样定义整个页面的滚动条:

body{
 scrollbar-3dlight-color:#D4D0C8; /*- 最外左 -*/
  scrollbar-highlight-color:#fff; /*- 左二 -*/
  scrollbar-face-color:#E4E4E4; /*- 面子 -*/
  scrollbar-arrow-color:#666; /*- 箭头 -*/
  scrollbar-shadow-color:#808080; /*- 右二 -*/
  scrollbar-darkshadow-color:#D7DCE0; /*- 右一 -*/
  scrollbar-base-color:#D7DCE0; /*- 基色 -*/
  scrollbar-track-color:#;/*- 滑道 -*/
}

但是同样的代码,我们应用在 xhtml下就不起作用了,我相信好多好朋友也遇到过同样的问题。

那么怎么才能在xhtml下应用滚动条样式呢?看下列代码:

html{
 scrollbar-3dlight-color:#D4D0C8; /*- 最外左 -*/
  scrollbar-highlight-color:#fff; /*- 左二 -*/
  scrollbar-face-color:#E4E4E4; /*- 面子 -*/
  scrollbar-arrow-color:#666; /*- 箭头 -*/
  scrollbar-shadow-color:#808080; /*- 右二 -*/
  scrollbar-darkshadow-color:#D7DCE0; /*- 右一 -*/
  scrollbar-base-color:#D7DCE0; /*- 基色 -*/
  scrollbar-track-color:#;/*- 滑道 -*/
}

这段代码和上一段唯一的不同就是在css定义的元素上,一个是body一个是html。我们再测试一下,把html页面的“body”修改成“html”测试一下,发现依然可以实现效果。那到底是为什么呢?

我们来看一下下面的图:

这就是html最基本的dom树结构。

我们再看看html和xhtml的定义:
 
HTML (Hyper Text Markup Language,超文件标记语言),超文件标记语言广泛应用于国际互联网上.HTML描述了文本基准如何进行呈现,以及超级连接如何连接到另外的页面。

XHTML (Extensible Hypertext Markup Language,可扩展的超文件标记语言),是一种标记语言,表现方式与 HTML类似, 不过语法上更加严格。从继承关系上讲,HTML是一种基于SGML的应用,非常灵活,而XHTML则基于XML,XML是SGML的一个子集。XHTML 1.0 在2000年1月26日成为 W3C 的推荐标准。

从字面上来看,xhtml比html多一个x,那么这个x其实也就是xml,为什么要加一个xml在里面?其实最根本的原因就是要让html更加结构化标准化(因为html实在是太烂)。

OK,我们回来看上面的结构树,我们在html里面定义的是body,因为html不是很标准所以这样可以生效,而在xhtml里面这样就不行了,我看看那个图很明显,body标签本身不是根元素,只有html才是根元素,而页面的滚动条也是属于根元素的,所以这就是我们为什么定义body没有效果的原因,因为我们定义的只是一个子原素。OK,我们知道了原理,来做一个试验如果把定义“body”或“xhtml”换成“*”:

*{
 scrollbar-3dlight-color:#D4D0C8; /*- 最外左 -*/
  scrollbar-highlight-color:#fff; /*- 左二 -*/
  scrollbar-face-color:#E4E4E4; /*- 面子 -*/
  scrollbar-arrow-color:#666; /*- 箭头 -*/
  scrollbar-shadow-color:#808080; /*- 右二 -*/
  scrollbar-darkshadow-color:#D7DCE0; /*- 右一 -*/
  scrollbar-base-color:#D7DCE0; /*- 基色 -*/
  scrollbar-track-color:#;/*- 滑道 -*/
}

在html和xhtml都通过,因为*就是定义页面上的任何标签当然也包括了“html”这个标签。

(ps:其实与其说是html与xhtml的区别到不如说是有无XHTML 1.0 transitional doctype的区别,但是如果你把页面的XHTML 1.0 transitional doctype去掉的话,那么这个页面就没有doctype,默认的显示方式就是html4.01,不过你要把XHTML 1.0 transitional doctype修改成HTML 4.01 doctype同样页面定义body也不会有效果的,虽然这个页面的标准是html 4.01)

阅读(1124) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~