HTML表单元素覆盖样式元素问题及其补救之道
日期:2004:2:13 ·来源:中国电脑教育报 作者:俞伟明 查看:[大字体 中字体 小字体]
在设计HTML页面的过程中经常会遇到表单元素覆盖样式元素引起的问题,图一就是一个典型的例子。不要小看这个貌似“低级”的问题,即使一些规模较大的网站上类似的问题也绝不鲜见。本文探讨了造成这一问题的根本原因,并提出一种补救办法——之所以说补救办法而不是一劳永逸的解决办法,是因为微软和NetScape这两个巨头也还没有对策。
一、HTML元素的显示优先级
HTML中常用的表单元素包括:文本区域(TEXTAREA),列表框(SELECT),文本输入框(INPUT type=text),密码输入框(INPUT type=password),单选输入框(INPUT type=radio),复选输入框(INPUT type=checkbox),等等。常见的非表单元素包括:链接标记(A),DIV标记,SPAN标记,TABLE标记,等等。表单元素覆盖样式元素的根本原因在于HTML元素默认的显示优先级规则,例如:帧元素总是比其他HTML元素优先,因此也总是显示在最前面;表单元素总是比所有非表单元素优先。
所有这些HTML元素又可以根据其显示要求分成两类,即有窗口的HTML元素(Windowed Element),无窗口的HTML元素(Windowless Element)。有窗口的元素包括:SELECT元素,OBJECT元素,插件,IE 5.01以及更早版本中的IFRAME元素。无窗口的元素包括:大多数的普通HTML元素,如链接和TABLE标记,除了SELECT元素之外的大多数表单元素,NS6+/IE 5.5以及更高版本中的IFRAME元素。本文讨论的问题主要与有窗口的HTML元素有关,问题的症结其实就在于操作系统默认总是把有窗口的元素显示在无窗口的元素前面。
二、浏览器类型与显示优先级
按照浏览器类型比较,HTML元素的显示次序也有所不同,总结如下:
⑴ Netscape/Mozilla
在NS浏览器6.0以前的版本中,表单元素总是比其他HTML元素有更高的优先级。但在NS 6+浏览器中,IFRAME元素和所有表单元素的显示次序或者由CSS的z-index属性值确定,或者由它们在HTML页面中出现的次序确定,但SELECT元素除外。
⑵ Internet Explorer
在最新的IE浏览器(6.0)中,IFRAME元素和所有表单元素根据z-index属性值或它们在HTML页面中出现的次序来确定显示优先次序,但SELECT元素除外。
⑶ Opera
在最新的Opera(7.10*)浏览器中,包括SELECT在内的所有表单元素根据z-index属性或它们在HTML页面中的出现次序来确定显示优先级。但是,最新的Opera浏览器不将IFRAME作为无窗口元素显示,IFRAME被看做有窗口元素,在显示次序上要比所有无窗口元素优先。
三、CSS的z-index属性
我们知道,CSS的z-index属性可以用来控制任意HTML元素显示时的覆盖次序。当多个HTML元素重叠在同一空间中时,z-index值较大的元素将覆盖z-index值较小的元素。
但z-index属性值不是万能的。如前所述,有窗口的元素总是显示在无窗口元素的前面,z-index属性值只有在同一类元素之间才起决定作用。形象地说,有窗口元素和无窗口元素就像画在同一浏览器窗口的两块不同画布上,两类元素分别自成体系,它们的z-index属性也只相对于同一画布上的其他元素起作用。
四、补救之道
就目前的浏览器而言,一种比较有效的补救办法是:当无窗口元素需要覆盖有窗口元素时,运用脚本程序动态地隐藏有窗口元素。下面是一个完整的例子:
<html><head>
<style type="text/css">
.menuBlock{position:relative;top:14px;width:165px;border:2px solid black;}
#subMenus{position:relative;left:15px;top:15px;width:171px;
padding-left:2px;padding-right:2px;border:2px solid black;
z-index:100;visibility:hidden;}
#lb_1{position:absolute;left:10px;top:40px; }
</style>
<script type="text/javascript">
var isActive = false;
function showMenu(){
isActive = true;
//document.getElementById("lb_1").style.visibility="hidden";
document.getElementById("subMenus").style.visibility="visible";
}
function hideMenu(){
isActive = false;
setTimeout('hide()',100);
}
function hide(){
if(!isActive){
document.getElementById("subMenus").style.visibility = "hidden";
document.getElementById("lb_1").style.visibility="visible";
}
}
function setStyle(menuItem){
isActive = true;
menuItem.style.backgroundColor = "Gray";
menuItem.style.color = "#FFFFFF"
}
function setDefault(menuItem){
isActive = false;
menuItem.style.backgroundColor = "";
menuItem.style.color = ""
hideMenu();
}
</script></head><body>
<div id="main" style="position:absolute;width:200px;">
<div id="menuBlock" class="menuBlock" onmouseover="showMenu();"
onmouseout="hideMenu();">CSS菜单</div>
<div id="subMenus" >
<div id="0" onmouseover="setStyle(this)"
onmouseout="setDefault(this)" >菜单项目一</div>
<!--共四个菜单项目 -->
</div><P>
<select id="lb_1" name="lb_1">
<option value="-1"/>选择列表
<!-- 三个选项 -->
</select>
</div>
</body></html>
页面的<STYLE>部分定义了三个样式,分别用于菜单条、菜单项目、选择列表,通过样式定义保证菜单、选择列表的显示区域重叠。<BODY>部分包含菜单和<SELECT>选择列表的定义。当鼠标经过菜单条时,JavaScript函数showMenu执行,显示出菜单,同时隐藏SELECT选择列表。鼠标离开后,hideMnu函数隐藏菜单,同时恢复选择列表。其余几个JavaScript函数主要用于模拟菜单动作,鼠标经过菜单项时以高亮度显示菜单(setStyle函数),鼠标离开菜单项目时则将它恢复默认显示形式(setDefault函数)。页面的运行效果如图二所示。将showMenu函数中的document.getElementById("lb_1").style.visibility="hidden"语句注释掉就可以看到图一的效果。
<descript>
<img src=/cce/img/553/04601t02.jpg>
</descript>
总之,表单元素覆盖样式元素的根源在于HTML元素默认的显示优先级规则。本文介绍的补救办法确实行之有效,不过如果你实在不想用这种办法,那就只好考虑改变页面布局,避免表单元素和样式元素的显示区域重叠。
分享到:
相关推荐
HTML表单元素覆盖样式问题及补救方法详解 在网页设计中,HTML表单元素的样式覆盖问题常常会给开发者带来困扰。这个问题的核心在于HTML元素的显示优先级规则,特别是有窗口元素(Windowed Elements)与无窗口元素...
HTML表单元素覆盖样式问题及补救方法是前端开发中常见的困扰,特别是在处理与CSS布局交互时。在HTML中,表单元素如TEXTAREA、SELECT、INPUT等有时会因为默认的显示优先级规则与非表单元素如A、DIV、SPAN、TABLE等...
1. **基础样式设置**:使用CSS,我们可以改变表单元素的字体、颜色、大小、边框样式等。例如,`border-radius`属性可以创建圆角效果,提升表单的现代感;`padding`和`margin`可以调整元素内部和外部的空间,使布局更...
原理:在需要自定义样式的表单元素外包装一层dom元素,然后控制dom的外观。 便捷:不需要有什么特殊的布局要求直接在您需要修改外观的表单元素上添加置顶类名即可。 兼容:自定义样式无兼容问题。 取值:使用原表单...
"jquery表单Check样式"是指利用jQuery来实现表单元素,如复选框(checkbox)和单选按钮(radio)的样式控制,以提升用户体验和界面美观度。 在HTML表单中,传统的复选框和单选按钮的样式由浏览器默认提供,样式单一...
本资源提供了一种“漂亮的表单验证样式”,完全基于HTML,无需额外的JavaScript库或CSS框架,仅通过HTML5的内置属性和样式就能实现美观且实用的效果。 1. **HTML5表单元素** HTML5引入了许多新的表单元素,如`...
"漂亮的表单样式"这个主题着重于如何使用CSS(层叠样式表)和DIV(定义文档结构的HTML元素)来创建美观且用户体验良好的表单。下面我们将深入探讨这个话题。 首先,CSS是用于控制网页外观和布局的样式语言。通过CSS...
泛微OA开发技巧作业流程表单HTML扩展开发...本文档详细介绍了泛微OA开发技巧作业流程表单HTML扩展开发推荐设计器实现设置表单元素的长度的概念、优点、实现方法、应用场景和常见问题,为开发者提供了一个详细的指南。
本资源提供了6款精美的HTML和CSS样式用户留言表单的源码,这些表单设计独特,既实用又具有视觉吸引力。通过使用这些源码,开发者可以轻松地为自己的网站或应用添加吸引人的用户反馈功能。 首先,我们要理解HTML...
自己总结的一些html5表单元素以及表单验证,希望对大家有用!!
【漂亮的css表单样式3】是一个关于前端设计的资源,主要关注的是如何使用CSS来美化网页中的表单元素,特别是登录和注册页面。这个资源包含了多个CSS样式文件,旨在为开发者提供美观且易于理解的表单设计示例,使得...
写了好多表单样式 ,这个表单样式是我比较满意的Form表单样式
在本主题中,我们将深入探讨“html5和css3表单样式美化插件”的相关知识点,以及如何利用这些技术来提升用户体验。 首先,HTML5在表单元素上引入了新的type属性,使得开发者可以创建更为丰富、功能更强大的表单输入...
html无限添加表单元素的代码,代码很详细一看就明白用于无限添加表单后台循环接受一下
原生JavaScript作为Web开发的基础,提供了丰富的API和方法来处理表单元素,如input和select。本主题将深入探讨如何使用原生JavaScript对form表单进行美化,并对input输入框和select下拉框进行优化。 一、表单基础 1...
- `class`:定义元素类,可以为一类元素设置共同样式。 - `value`:定义元素的初始值,如输入框的默认文本或选项的默认值。 3. **JavaScript操作表单元素**: - `getElementById()`:通过ID获取元素。 - `...
在这个“登录表单界面样式大全”中,包含了多种样式的登录表单设计,旨在满足不同项目需求,提升用户体验。 1. **多样化设计**: - 不同的登录界面样式可以适应不同的品牌风格和用户群体。例如,有的可能采用简洁...
尤其是在处理表单元素时,CSS3 提供了强大的样式控制,使得我们可以定制化表单的外观,提高用户体验。本讲座主要探讨了如何使用 CSS3 来控制 HTML5 表单的样式,包括字体、边框、背景和内边距等方面。 首先,我们来...
在网页设计中,登录表单是用户与网站交互的关键元素之一。它不仅需要提供功能性的输入字段,还需要具有良好的用户体验和吸引人的视觉设计。本文将深入探讨“5款自定义登录表单样式”,并分析它们的设计特点、实现...
CSS(层叠样式表)在美化和控制这些表单元素的布局上起着至关重要的作用。本主题将深入探讨如何使用CSS来定制HTML表单的`button`、`checkbox`和`input`等元素的样式,以创建美观且用户体验良好的交互界面。 一、...