zoukankan      html  css  js  c++  java
  • 实现HTML自动排版的法则

    实现HTML自动排版的法则
    (2001-05-22· 周伟编译· yesky)
      简介:

      我们将网页或HTML应用程序国际化时,需要将它们翻译成多种语言版本。如何做到文本在转化后,自动调整页面中各个单元位置,间距和尺寸呢?这听起来似乎很难,但是如果按照本文讲述的几条法则去建立HTML页面,你就会相信这是事实,这几条法则能够省去本地化工作人员的很多麻烦。
       注:本文中的对话框是指包含基本交互控件的WEB页面,由于其风格与WIN32的对话框非常相似所以也称之为对话框。

      引言:

      不久前大多数在Windows平台上的用户界面使用的还是WIN32的或其他可视化编程工具做出的弹出式窗口,但是目前很多开发人员利用HTML强大的功能来创建应用程序的用户界面。这是一种新的思路和方法,它易学易懂,编写方便,利于开发。但由于页面中的文本在转化为其它语言版本时会出现许多调整大小和位置的问题,这就给本地化工作带来很大的困难。对于整体采用层叠式表单(CSS)的普通Web页面,这种转化也绝对是一场噩梦。但如果所有的HTML用户界面元素都使用正确的编码标准构建,那么留给本地化工作人员可做的事情就微乎其微了。HAL(即HTML自动排版)的编码标准给我们提供了HTML国际化应用时避免调整的一种方法。本文就此列举了一系列法则和法则的主要依据。法则后附有编码样例。

       备注:HAL兼容大部分HTML对话框,特别是对于可以调整大小的对话框或窗口。

      HAL几大优点:

     1、本地化工作人员只需翻译文本部分。用户界面会自动调整所有控件来匹配它的大小。
     2、准备工作在最初的版本中做一次(通常为英语)即可,不需要为多种语言版本重复做多次。
     3、完全省略了本地化过程中设定对话框尺寸的步骤,也省略了其它易出错的步骤,如试图从产品的前一版本或其它语言中重复使用对话框尺寸。
     4、不会产生显示方面的错误,从而使本地化的对话框质量与原英文版本无异。
     5、本地化工作人员不必修改由于对话框尺寸重新调整而引起的错误。如果在转换用户界面时出现任何问题,应交给开发人员修改这些错误,修改完的结果就会应用到所有其它语言上。这就避免了在其它语言上重新出现这些错误,即使在最坏的情况下,本地化工作人员也仅仅需要重新翻译一遍。
     6、因为字符串改变时本地化工作人员要调整对话框,所以做的调整工作可能比直接设置大小花的的时间还要多。 如果处理不当,也易添加新的错误。HAL完全解决了这个问题。
     7、由于无需调整其它控件就可以给对话框快速加入新的控件,因此对于开发人员来说,对话框变得更易于管理。HAL法则特别适用于创建可重新调整大小的对话框。如果对话框规格需要改变,只需在一个地方改动(一个全局样式表单),而不需在每个对话框上都做改动。对话框尺寸的全局控制保证了产品用户界面的整齐和一致性。

      HAL的不足之处:

      当然,没有什么是十全十美的,采用HAL法则也会带来一些其它问题。

     1、页面/对话框的构建变得有些复杂,因此原始对话框很有可能比以前有更多的初始化错误。
     2、在页面的加载处理过程中需要一些额外的代码(调整按钮的大小),这会使加载速度降低,但用户对此并不会太敏感。
     3、控件的对齐不一定会很一致,并且当对话框大小改变时它们的大小也会随之改变。

      HAL法则:

     法则一:不使用绝对位置

      不要在CSS属性中设置为绝对位置。最不当之处的是设置成绝对位置的同时也把左上角设置为固定值。
      对页面中元素使用绝对位置将使其不能够自动定位和确定尺寸。绝对位置只适用于层叠式表单(CSS)。position,left和top是层叠式表单中控制位置的关键属性。

      以下代码是绝对不允许的:


    <DIV id = idFindWhatLabel style = "position: absolute; left: 0.98em; top: 1.2168em; 4.8em; height: 1.2168em;">
    Fi<U>n</U>d what:
    </DIV>
      绝对位置的使用特例:

      所有HAL法则都有特例。如果用表达式表示的绝对位置就可以使用,可以参考法则二。

     法则二:对话框应当匹配最大可用宽度和高度

      使用最大可用宽度和高度设计对话框。这有两种方法:

     1、用width=100%的表格来构建对话框。

      代码样例如下:


    <body>
    <table width=100%>
    <… can contain other tables …>
    </table>
    </body>
     2、使用基于表达式的位置和基于对话框大小的尺寸(即body.clientHeight)。

      代码样例如下:


    <div style='position:absolute; height:  
     expression(document.body.clientHeight / 2);  
     expression(document.body.clientWidth / 2); '>
    </div>
      当表里嵌有多个表格时,最好的解决方法是正确设置元素的大小再放入表中,并且维持它们的相对位置。
    在操作过程中需要考虑:
    • 哪些控件有相同的尺寸。它们必须位于相同的表格单元中,可以不在一行。
    • 哪些控件有相同的对齐方式。
    • 哪些控件会将其它控件挤到右边。
    • 哪些控件有固定的尺寸。
      下面这张显示出表格边框的图能够帮助你理解上面的描述。

      

      多数情况下本地化人员只允许给对话框设置初始化的宽度和高度。只有非常必要时才使用固定的对话框宽度(例如对话框必须匹配其它对话框的制表符)


      法则三:每个控件都应位于分离的表格单元中

      尽量使每个控件位于分离的表格单元中。这样做文本可以单独换行,并且在中东语言环境下也可以进行翻转和定位调整的工作。
    有些情况下可以忽略这条法则:

    • 多行按钮有相同尺寸。
    • 上下紧邻的标签。
      法则四:允许文本换行

      在包含文本的表格单元中不要用"nowrap"属性(如<td nowrap>),否则文本变长时就不能换行。当想让文本占用一行并保证为翻译成其它语言留有足够的空间时,才能使用这一属性。
      有时为了保持对话框整体比例平衡,需要用到"nowrap"属性。

      错误的换行方法:


    <td nowrap>
    Fi<U>n</U>d what:
    </td>

      最好的办法是给表格设置一个初始化尺寸,如下:


    <td width=20%>
    Fi<U>n</U>d what:
    </td>

      另一种方法是在词间使用不中断的空格符( )。


    <td>
    Fi<U>n</U>d what:
    </td>


      法则五:把复选框、单选按钮与它们的标签分离

      将单元中的复选框、单选按钮的标签与控件分离,这能够保证当文本变长时正确换行。但仍需要设计对话框,设法使翻译后的文本有可能置于一行中。如果不这样做,换行后的文本看上去就会是这样:

      
      而不是这样:
      

     代码样例(设计正确的复选框代码)如下:


    <table cellspacing=0 cellpadding=0>
    <tr>
    <td valign=middle width=24px>
     <input id=x type=checkbox accesskey=C>
    </td>
    <td valign=middle>
     <label for=x><u>C</u>hoose me </label>
    </td>
    </tr>
    </table>

      法则六:为今后的扩展预留足够的空间,避免固定宽度的项目

      除非能够保证单元或控件中的文本翻译成其它语言时有足够的空间,否则不要使用固定宽度。如果需要指定尺寸,也应该是百分比形式的尺寸。基本原则是留出300%的扩展空间给较短的条目(少于10个字符),200%的扩展空间给中等长度的条目(10至20个字符),100%的扩展空间给长条目(多于20个字符)。
      但是一定还要避免使用过多的百分比形式的尺寸。尽量利用HTML自动排版功能规划版面。这样无论控件里有什么样的文本,对话框也会很漂亮。切记除了表格宽度,其它百分比形式的尺寸要在样式表单中详细说明。

      代码样例如下:


    <style>
    .myStyle {font-size: 10pt; font-family: Arial; 80%;}
    </style>


      法则七:按钮,列表框和组群框大小的确定方法

     1、如何确定按钮大小

      方法一:在样式表单中指定按钮的固定宽度,所有需要相同尺寸的按钮都属于这一类别。其中需要注意的是尺寸单位应该是em,而不能是pixel。

      代码样例如下:


    <style>
    .mainButton { 10em;}
    </style>

      方法二:不指定按钮宽度,利用HTML的排版功能设置每个按钮的大小。这会造成所有按钮都同样大小,你可以再用HAL提供的简单代码调整同一类按钮的宽度。

      代码样例如下:


    <script langauge=jscript src=HALsize.js></script>
    <style>
    button {font: 9pt tahoma; padding-top: 0px; padding-bottom: 0px; padding-right: 6px; padding-left: 6px}
    .ButtonA{;}
    .ButtonOKCancel {;}
    </style>
    <body onload='HALsizeButtons(document, "ButtonA", false);
    HALsizeButtons(document, "ButtonOKCancel", true);'>
    <button id=butOne class=ButtonA>One Button</button><br>
    <button id=butTwo class=ButtonA>Other Same Size Button</button>
    </body>

     2、如何确定列表框大小

    首先,给短条目留出200%扩展空间,长条目留出100%扩展空间。然后把所有相关的列表框放在同样尺寸的表格单元中,以表格单元为基准,设置每个列表框为百分比形式(一般为100%)。

      代码样例如下:


    <tr>
    <td width = 30%>
    <select style = "100%">
    <option>Bulgaria
    <option>Greece
    </select>
    </td>
    </tr>
    <tr>
    <td> <!—同列不同行 -->
    <select style = "100%">
    <option>Bulgarian
    <option>Greek
    </select>
    </td>
    </tr>

     3、如何确定组群框的大小

      对于组群框,最好是给文本留出扩展空间,并使其实际大小随表格变化而变化。包含组群框的表格单元要设为"nowrap"。组群框中的所有控件要同组群框放置在一个表中。

      代码样例如下:


    <td width = 30% nowrap>
    <fieldset style = "100%; height: 100%">
    <legend>Group Box Label</legend>
    … 组群框中的所有控件应该在一个<table>中 …
    </fieldset>
    </td>

       注:不一定设置高度为100%,除非你只需要组群框与其它控件左右对齐。

      法则八:高度的设置

      尽量不给含有文本的表格单元设置固定高度,否则当表格中文本换行或字体改变后,表格会变得非常难看。起分隔作用的空行除外。
    你可以在字体大小范围内给包含单行控件的表格单元设置高度。
      应该给样式表单中的每个元素设置行高。否则,当用户在IE中改变字体大小时网页的外观就会改变。表格单元也要如此设置。


    <style>
    body, td {font-family: tahoma; font-size: 8pt; line-height: 10pt;}
    ... 设置其他所有元素 ...
    </style>

      法则九:不使用左对齐和右对齐

      对任何表格(或相应的CSS样式)都不要使用"align=left" 或 "align=right"。否则在中东语言环境下就不能正确调整。正确的方法是通过在单元格一侧附加单元使其左移或右移。还要确保左边界和右边界值相等。

      法则十:避免将本地化工作人员需要改变的CSS值内联在网页中

      将所有本地化工作人员可能需要改变的CSS值保存在层叠式表单文件中。这样本地化工作者只需改变一个样式表单文件,就可以将改动应用于所有共享该文件的网页中。

      因为某种字体的名称在其他语言版本中常常不存在或者需要改动,所以避免在页面中使用<font>标识中的字体名属性
  • 相关阅读:
    数据类型装换
    变量及数据类型
    27 网络通信协议 udp tcp
    26 socket简单操作
    26 socket简单操作
    14 内置函数 递归 二分法查找
    15 装饰器 开闭原则 代参装饰器 多个装饰器同一函数应用
    12 生成器和生成器函数以及各种推导式
    13 内置函数 匿名函数 eval,exec,compile
    10 函数进阶 动态传参 作用域和名称空间 函数的嵌套 全局变量
  • 原文地址:https://www.cnblogs.com/huqingyu/p/25812.html
Copyright © 2011-2022 走看看