1.Xhtml 스크롤 막대 색상 문제
원본 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 페이지의 "본문"을 "html"로 변경하여 테스트하고 효과가 여전히 달성될 수 있는지 확인하겠습니다. 그렇다면 왜?
아래 그림을 보시죠.
HTML의 가장 기본적인 DOM 트리 구조입니다.
html과 xhtml의 정의를 살펴보겠습니다.
HTML(Hyper Text Markup Language, Hyper Document Markup Language), 하이퍼 문서 마크업 언어는 인터넷에서 널리 사용됩니다. 벤치마크가 렌더링되고 하이퍼링크가 다른 페이지에 연결되는 방식.
XHTML(Extensible Hypertext Markup Language, Extensible Hypertext Markup Language)은 HTML과 표현 방식은 비슷하지만 구문이 더 엄격한 마크업 언어입니다. 상속 관계 측면에서 볼 때 HTML은 SGML 기반의 응용 프로그램으로 매우 유연하며, XHTML은 SGML의 하위 집합인 XML을 기반으로 합니다. XHTML 1.0은 2000년 1월 26일에 W3C 권장 사항이 되었습니다.
말 그대로 xhtml은 html보다 x가 하나 더 많은데, 이 x는 실제로 xml입니다. 왜 xml을 추가해야 할까요? 사실 가장 근본적인 이유는 html을 좀 더 구조화하고 표준화하기 위한 것입니다(html은 정말 형편없기 때문이죠).
다시 돌아가서 위의 구조 트리를 살펴보겠습니다. html에서 정의한 것은 본문입니다. html은 표준이 아니기 때문에 이것이 적용될 수 있지만 xhtml에서는 작동하지 않습니다. 분명히, body 태그 자체는 루트 요소가 아니며, html만이 루트 요소이고, 페이지의 스크롤 막대도 루트 요소에 속하므로 이것이 body에 대한 정의가 아무런 효과가 없는 이유입니다. 우리가 정의하는 것은 하위 요소일 뿐입니다. 좋아요, 우리는 원리를 알고 있습니다. "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)
2、xhtml下frame页面横向滚动条的问题
在用ie6浏览有框架的xhtml页面的时候,默认会水平和垂直滚动条会一起出现,这是ie6的一个bug,在firefox上是正常的,出现的原因是其对XHTML 1.0 transitional doctype的解释缺陷。
对于这个bug一般有3种解决方案,
方法1:
代码:
html { overflow-y: scroll; }
原理:强制显示ie的垂直滚动条,而忽略水平滚动条。
优点:完全解决了这个问题, 允许你保持完整的XHTML doctype 。
缺点:即使页面不需要垂直滚动条的时候也会出现垂直滚动条。
方法2:
代码:
html { overflow-x: hidden; overflow-y: auto; }
原理:隐藏横向滚动,垂直滚动根据内容自适应。
优点:在视觉上解决了这个问题。在不必要的时候,未强制垂直滚动条出现。
缺点:只是隐藏了水平滚动条,如果页面真正需要水平滚动条的时候,屏幕以外的内容会因为用户无法水平滚动,而看不到。
方法3:
代码:
body { margin-right: -15px; margin-bottom: -15px; }
原理:这会在margin的水平和垂直方向上添加一个负值,IE添加了该精确数值后,便会去除对滚动条的需求假象。
优点:在视觉上解决了这个问题,垂直滚动根据内容自适应。
缺点:由于“人为创建”了15px的外边距(margin),所以无法使用该填充过的屏幕区域。
SCROLLBAR-FACE-COLOR: 颜色代码; SCROLLBAR-HIGHLIGHT-COLOR:颜色代码; SCROLLBAR-SHADOW-COLOR: 颜色代码; SCROLLBAR-3DLIGHT-COLOR: 颜色代码; SCROLLBAR-ARROW-COLOR: 颜色代码; SCROLLBAR-TRACK-COLOR: 颜色代码; SCROLLBAR-DARKSHADOW-COLOR: 颜色代码;
大家是不是看到这么多属性有点点头大了?哈哈,放心,看一下我刚才提及的被我放大了一倍的图解你们就会感觉好多了:
这里的图片上还有一个scrollbar-base-color的属性,其实这个属性是个上面7个属性的总合,怎么说呢?就是当你设定了这个属性的颜色后,
前面的7个属性都可以不用设置了,滚动条会自动帮你设定的,只是这个设定都会基于你设定的scrollbar-base-color的颜色而自动设定
这个属性的优点就是不用大家费尽心思的去研究各个地方的颜色,但是缺点就是不能够融和五颜六色于一体。。
注:设定了scrollbar-base-color就不要设定其他七个属性了,设定了其他七个属性就不要设定scrollbar-base-color,不然之间可能会有冲突,会有一些效果不起作用的
最后,还是考虑到大家可能会喜欢我的美化代码[真臭美~],我把我的美化代码贴出来:
SCROLLBAR-FACE-COLOR: #CCFFFF; SCROLLBAR-HIGHLIGHT-COLOR: white; SCROLLBAR-SHADOW-COLOR: #813533; SCROLLBAR-3DLIGHT-COLOR: #813533; SCROLLBAR-ARROW-COLOR: #813533; SCROLLBAR-TRACK-COLOR: white; SCROLLBAR-DARKSHADOW-COLOR: #813533;
以上代码本人是加在body{}中的
更多HTML中的滚动条和去掉滚动条问题分析相关文章请关注PHP中文网!