重构之美-走在Web标准化设计的路上[复杂表单]3 9 Update

最近突然遭遇许多复杂表单,于是干上了。

一直有种说法:table用于数据表,对于复杂表单,table也是最好的选择,由于一直没有遇见过也就没有认真去研究,到底复杂表单是否应该使用table。

好了,机会来了,我拿着复杂表单的图样,看来看去都觉得不应该用table呀,除非是有行标和列标的数据表表单。反而类似于登陆这种简单表单,我倒是一直使用table,理由是能够在纯文档的时候对齐文本与输入框,但是对于复杂表单就不一样了,复杂表单涉及到页面布局了。

为什么要研究?因为我希望程序员不要涉及到界面的任何部分,对于页面,他只需要关注结构,而复杂表单如果采用table,很容易就将程序员带进对布局的操作中去。

好,经过一阵艰苦奋斗,还算好,xhtml部分自己觉得还算摸清了一些规律,页面的分析信手捻来,div结构下的复杂表单真是漂亮,但是但是……css部分……我靠,真是难搞,干了几个复杂表单的css都没摸清规律,太JB麻烦了,尤其是文本长度不一致,表单控件又各种各样交错,还有错误提示隐藏的文本,时不时中间又加个按钮……迷茫了……算了,继续干css,希望最后能得出结论,对于复杂表单到底用table还是div?

先给一个对于登陆界面这样简单的表单,我最常用的xhtml代码,使用table,理由见上:

< div >
    
< h3 >< span > 用户登陆 </ span ></ h3 >
    
< table >
        
< tr >
            
< td >< label  for ="name" > 用户名 </ label ></ td >
            
< td >< input  id ="name"   />
        
</ tr >
        
< tr >
            
< td >< label  for ="pw" > 密码 </ label ></ td >
            
< td >< input  id ="pw"   /></td>
        
</ tr >
    
</ table >
    
< p >< button  /></ p >
</ div >

另外不使用table的如下:

< div >
    
< h3 >< span > 用户登陆 </ span ></ h3 >
    
< div >
       
< label  for ="name" > 用户名 </ label >
       
< input  id ="name"   />
    
</ div >
    
< div >
        
< label  for ="pw" > 密码 </ label >
        
< input  id ="pw"   />
    
</ div >
    
< p >< button  /></ p >
</ div >

怎么说呢?第一种我视这样的简单表单为2行2列数据,用了table。第二种则是div模块化操作。一般我都使用第一种,除非文本长度一样(比如姓名,密码)才用第二种。当然我觉得第二种是正确的,所以我会优先在文案上先做文章使之长度一致。为什么?因为只有模块化,才能固定xhtml而通过css随意布局,比如形式上为一行四列之时,第一种就做不到(其实FF可以正确解释对tr的浮动操作,例如2列tr,但是ie不支持,一个tr怎么都得占table的一行。)。

好了,复杂表单的图样和xhtml部分在公司,明天上班发上,现在睡觉问梦去。

这份表单够份量不?

r_20060223_01.gif

这里是xhtml部分,做了些必要的删除,没破坏结构就好了。留意我补充的部分,比如h2、h3。

< h1 > 大便蛔虫的表单标题 </ h1 >
< div >
    
< h2 > 导航 </ h2 >
    
< div >
        
< button > 新增 </ button >
        
< button > 刷新 </ button >
    
</ div >
    
< div >
        
< h3 > 当前批次采用的标准为 </ h3 >
        
< div >
            
< label > 本人补贴 </ label >
            
< asp:label  id =""  Runat ="server" ></ asp:label >
        
</ div >
        
< div >
            
< label > 本人工龄补贴 </ label >
            
< asp:label  id =""  Runat ="server" ></ asp:label >
        
</ div >
        
< div >
            
< label > 配偶补贴 </ label >
            
< asp:label  id =""  Runat ="server" ></ asp:label >
        
</ div >
        
< div >
            
< label > 配偶工龄补贴 </ label >
            
< asp:label  id =""  Runat ="server" ></ asp:label >
        
</ div >
        
< div >
            
< label > 特殊补贴 </ label >
            
< asp:label  id =""  Runat ="server" ></ asp:label >
        
</ div >
    
</ div >
    
< iewc:treeview  id =""  ExpandLevel ="1"  runat ="server"  AutoPostBack ="True" ></ iewc:treeview >
</ div >
< div >
    
< h2 > 表单内容 </ h2 >
    
< div >
        
< h3 > 申请人信息 </ h3 >
        
< div >
            
< label > 本人姓名 </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 身份证号码 </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 本人工龄(年) </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
            
< asp:regularexpressionvalidator  id ="REVY"  runat ="server"  Display ="Dynamic"  ValidationExpression ="\d{0,2}"  ErrorMessage ="必须输入整数"
        ControlToValidate
="txt_WorkAge" ></ asp:regularexpressionvalidator >
        
</ div >
        
< div >
            
< label > 工作单位 </ label >
            
< asp:label  id =""  Runat ="server" ></ asp:label >
        
</ div >
        
< div >
            
< label > 职务或职称 </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
    
</ div >
    
< div  class ="personinfo" >
        
< h3 > 现住房信息 </ h3 >
        
< div >
            
< label > 现住房地址 </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 建筑面积(平方米) </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 其中个人按市场价自购面积(平方米) </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 现住房性质 </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 补贴住房面积标准(平方米) </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 申请住房补贴理由 </ label >
            
< asp:dropdownlist  id =""  Runat ="server" ></ asp:dropdownlist >
        
</ div >
        
< div >
            
< label > 申请住房补贴标准 </ label >
            
< asp:radiobuttonlist  id =""  runat ="server"  RepeatDirection ="Horizontal" >
                
< asp:ListItem > 无房户一次性补贴 </ asp:ListItem >
                
< asp:ListItem > 一次性补面积差 </ asp:ListItem >
            
</ asp:radiobuttonlist >
        
</ div >
    
</ div >
    
< div >
        
< h3 > 配偶信息 </ h3 >
        
< div >
            
< label > 配偶姓名 </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 配偶身份证号码 </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 配偶工龄 </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
            
< asp:regularexpressionvalidator  id =""  runat ="server"  Display ="Dynamic"  ValidationExpression ="\d{0,2}"  ErrorMessage ="必须输入整数"
            ControlToValidate
="" ></ asp:regularexpressionvalidator >
        
</ div >
        
< div >
            
< label > 配偶工作单位 </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 职务或职称: </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
    
</ div >
    
< div >
        
< h3 > 享受住房分配或货币补贴情况 </ h3 >
        
< div >
            
< label > (1)已享受房改购房面积(平方米) </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > (2)已享受购房补贴(元) </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > (3)已享受住房补贴(元) </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< asp:button  id =""  Text ="计算"  Runat ="server" ></ asp:button >
            
< label > 本次补贴面积(平方米) </ label >
            
< cc1:acceptnumber  id =""  runat ="server" ></ cc1:acceptnumber >
        
</ div >
    
</ div >
    
< div >
        
< h3 > 住房补贴 </ h3 >
        
< div >
            
< label > 本人补贴(元) </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 本人工龄补贴(元) </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 配偶补贴(元) </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 配偶工龄补贴(元) </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 特殊补贴(元) </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 合计(元) </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 实际发放补贴(元) </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
    
</ div >
    
< div >
        
< h3 > 请申请人根据不同情况填写 </ h3 >
        
< div >
            
< label > 现购房地址 </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 售房单位 </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 偿还贷款帐号 </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
        
< div >
            
< label > 贷款银行 </ label >
            
< cc1:xmldropdownlist  id =""  runat ="server"  XmlNodeName =""  XmlPath ="" ></ cc1:xmldropdownlist >
        
</ div >
        
< div >
            
< label > 本人公积金存储号 </ label >
            
< asp:textbox  id =""  Runat ="server" ></ asp:textbox >
        
</ div >
    
</ div >
    
< div >
        
< asp:button  id =""  Text ="保存"  runat ="server"  CssClass ="button" ></ asp:button >
        
< asp:Button  id =""  Text ="退回"  runat ="server"  CssClass ="button" ></ asp:Button >
        
< asp:Button  id =""  Text ="删除"  runat ="server"  CssClass ="button" ></ asp:Button >
        
< button  id =""  onclick ="javascript:window.close();" > 关闭 </ button >
    
</ div >
</ div >

再补充一个,这里有两个部分很明显的表格结构,所以在那里使用了table,而其他部分没有用。

r_20060223_02.gif

table部分xhtml。css部分还没琢磨出来规律,结论没有,继续琢磨,不过感觉没有用table结构很漂亮也很灵活,但是css确实让人头大,权衡得失中,再补充了。

dot.gif..
            
< div  class ="personinfo" >
                
< h2 >< span > 个人信息 </ span ></ h2 >
                
< div >
                    
< h3 >< span > 购房人 </ span ></ h3 >
                    
< table >
                        
< tr >
                            
< td >< span > 选择 </ span ></ td >
                            
< td > 姓名 </ td >
                            
< td > 性别 </ td >
                            
< td > 年龄 </ td >
                            
< td > 关系 </ td >
                            
< td > 户籍所在地 </ td >
                        
</ tr >
                        
< tr >
                            
< td >< input  type ="checkbox"   /></ td >
                            
< td >< select  /></ td >
                            
< td >< input  /></ td >
                            
< td >< input  /></ td >
                            
< td >< select  /></ td >
                            
< td >< input  /></ td >
                        
</ tr >
                    
</ table >
                
</ div >             
                
< div >
                    
< h3 >< span > 家庭成员 </ span ></ h3 >
                    
< table >
                        
< tr >
                            
< td >< span > 选择 </ span ></ td >
                            
< td > 姓名 </ td >
                            
< td > 性别 </ td >
                            
< td > 年龄 </ td >
                            
< td > 关系 </ td >
                            
< td > 户籍所在地 </ td >
                            
< td > 工作单位 </ td >
                            
< td > 编辑 </ td >
                            
< td > 删除 </ td >
                        
</ tr >
                        
< tr >
                            
< td >< input  type ="checkbox"   /></ td >
                            
< td >< select  /></ td >
                            
< td >< input  /></ td >
                            
< td >< input  /></ td >
                            
< td >< input  /></ td >
                            
< td >< input  /></ td >
                            
< td >< input  /></ td

本文转自爆牙齿博客园博客,原文链接:http://yuntian.cnblogs.com/archive/2006/02/23/335863.html ,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值