相对于宏观结构,表单结构是最考验人的,设计的随意性会比较大一些。很多时候,在设计页面表单结构时,可以用各种方法设计,只要不破坏页面结构以及内容的语义性基础,都无可厚非。
在实际开发中,不少设计师习惯于通过页面效果来决定所要设计的微观结构,这种习惯是要不得的,也不建议读者采用。当然,可以在适当时顾及页面表现,但是不能够本末倒置。下面围绕表单结构中的几个细节设计进行说明。
第一,所有表单都作为列表结构的一个选项进行设计,所有表单都嵌套在表单区域结构中,这样既方便管理,也适应HTML语义化结构要求。
<form id="addform" name="addform" method="post" action="#" onsubmit="return false;">
<fieldset id="addbox">
<legend></legend>
<label for="price">金额
<input type="text" name="price" id="price" />
</label>
<label for="class">分类
<select name="class" id="class">
</select>
</label>
<label for="remark"><span>备注</span>
<textarea name="remark" id="remark" ></textarea>
</label>
<span id="detail"></span>
<input type="reset" name="reset" id="reset" value="重写" />
<input type="submit" name="save" id="save" value="保存记录" />
</fieldset>
</form>
第二,对于表单域与标签文字的关系,可以通过labe标签进行设计,然后通过for属性把标签文本与对应的表单域绑定在一起,这样单击标签文本也能够自动获取输入焦点。
<label for="price">金额
<input type="text" name="price" id="price" />
</label>
第三,对于固定查询表单中,由于多个查询并列存在,不适合在表单中嵌套form标签,否则就会带来很多麻烦。同时,可以考虑使用dl、dt和dd列表结构进行布局。
<dl>
<dt>按时间段查询:</dt>
<dd>
<label for="table2">数据表
<select name="table2" id="table2">
</select>
</label>
<label for="begin">起始时间
<input type="text" name="begin" id="begin" value="2011-1-1 0:0:0" />
</label>
<label for="end">结束时间
<input type="text" name="end" id="end" value="2011-12-31 0:0:0" />
</label>
<input type="submit" name="save2" id="save2" value="查询" />
</dd>
</dl>
这种结构更适宜扩展和管理,同时也符合语义化结构要求。