【问题标题】:Is it acceptable to use tables for forms? Or is it still more correct to use divs?表格可以使用表格吗?还是使用 div 更正确?
【发布时间】:2010-11-26 14:25:29
【问题描述】:

我想知道是否可以将tables 用于表单。

严格来说,名称/值对是表格数据,不是吗?表单只是用户可自定义的一组名称/值对。那么在这种情况下使用tables 是否正确?还是应该使用带有 CSS 样式的 divs?

【问题讨论】:

标签: css forms html html-table


【解决方案1】:

如果你正在寻找“css 纯度”,你应该使用这样的东西:

<form action="http://localhost/Zoleris/" method="post" accept-charset="utf-8">
    <ul class="form">
      <li>
        <label for="username">Username</label>
        <input type="text" id="username" name="username">
      </li>

      <li>
        <label for="password">Password</label>
        <input type="password" id="password" name="password">
      </li>

      <li>
        <input type="checkbox" id="remember_me" name="remember_me" >
        <label class="checkbox" for="remember_me">Remember my username</label>
      </li>

      <li>
        <a href="forgot.php">Forgot your password?</a>
      </li>

      <li>
        <button type="submit" id="btnLogin" name="btnLogin" class="button positive" style="float:right"><img src="tick.png">Login</button>
        <button type="submit" id="btnRegister" name="btnRegister" style="float: left"><img src="cross.png">I need an account!</button>
      </li>
    </ul>
</form>

【讨论】:

  • 您缺少&lt;fieldset&gt; :)
【解决方案2】:

是的

是的,您可以使用表格。 Div 应该替换页面级布局的表格,但不能替换表格。只要它们解决了您的问题,就在页面中使用它们。

【讨论】:

  • 可以接受吗?当然,因为它起作用。但是,这不是表应该用于的。表单不是表格。
  • 我的大多数表单都有一个标签列,后跟一列输入字段。
  • 我们可能在这里达成一致。我的意思是,我认为大多数表格不应该是表格,只有具有表格外观的表格。
  • 如果表单不是表格的,它们是什么?只需查看 1040 税表。这是一张桌子。
【解决方案3】:

两者都是正确

我更喜欢使用一些div/li,因为这可以让我做出一些不同的布局,但tables 用于forms 并不令人不悦。

实际上,默认情况下,Django 会为您提供表格格式的表单。

【讨论】:

  • 有很多语义纯粹主义者不同意这一点。如何在语义上标记表单的问题仍然非常悬而未决,但 afaik 表单并未严格视为表格数据。确实没有正确的答案,但与列表相反,表格肯定不是最受推崇的选择。有些人认为段落更好——这真的很难说。 “Django 做了什么”对这个论点的影响微乎其微。人们会使用表单进行布局,因为它更容易,并且当他们知道它确实不是时,他们认为它是语义的。
  • 哇,我不知道这有多大了!我从最近的一篇文章中被甩到这里,以为这是最新的。
  • 在表单中使用表格是一个很大的禁忌。完全没有必要在表格中放置表格。
  • 两者都不正确。它们在 2009 年不正确,现在也不正确。仅仅因为流行的框架默认使用它们并不意味着它们是一件好事。我喜欢 Django,但很少有人可以使用表格来布置表单。
  • 盲人使用面向文本的浏览器。当他们得到一个表格元素时,浏览器会像表格数据一样引导他们通过。因此,如果不是很难为盲人阅读您的网页。
【解决方案4】:

你可以使用任何你想要的, 只是它是制作html表单布局的新标准,有点像不使用表格标签进行设计的规则,但使用表格显示数据表格(网格)仍然可以

【讨论】:

    【解决方案5】:

    您可以使用表格。就这么简单。

    【讨论】:

      【解决方案6】:

      Eric,我同意你的观点,表单数据是表格数据,并且在语义上可以存在于表格中。

      这是我用于简单数据输入屏幕的方法。

      我通常不会使用 div,但可能是有序列表

      <ol>...</ol>
      

      因为表单也是一个有序的项目列表。 但是,我发现这种方法很难设置样式。

      你可能会得到 50/50 的答案......

      【讨论】:

      • 为什么是有序列表?
          不是更有意义吗?
      • 是的,我想
          会很有意义,我选择了有序的,因为我猜输入表单有一些特定的顺序(或可能有)。我不确定它是否更有意义,但也许同样有意义。基本上是非此即彼的情况。
      【解决方案7】:

      尝试字段集

      我更喜欢将字段分解为逻辑&lt;fieldset&gt;s,每个&lt;legend&gt;,因为:

      • 代码不那么杂乱了
      • 默认格式是用户友好的(我特别喜欢图例的显示方式)
      • 使用 CSS 轻松设置样式

      这是一个代码示例。请注意,标签的 for 属性允许您单击该标签以将焦点移动到指定的输入(它与 id 属性匹配)。

      <form>
        <fieldset>
          <legend>Wombat Statistics</legend>
          <ol>
            <li>
              <label for="punchstrength">Punch Strength</label>
              <input id="punchstrength" name="punchstrength" />
            </li>
            <li>
              <label for="beverage">Favorite Beverage</label>
              <input id="beverage" name="beverage" />
            </li>
          </ol>
        </fieldset>
        <fieldset>
          <legend>Questions That Are Too Personal</legend>
          <ol>
            <li>
              <label for="creditcard">What is your credit card number?</label>
              <input id="creditcard" name="creditcard" />
            </li>
            <li>
              <label for="gullibility">Did you actually fill that in?</label>
              <input id="gullibility" name="gullibility" />
            </li>
          </ol>
        </fieldset>
      </form>
      

      对于基本布局,您可以使用以下内容:

      label, input, textarea, select { 
        display: inline-block; vertical-align: top; width: 30%; 
      }
      

      有关更深入的教程,请参阅 this article

      【讨论】:

      • 非常同意。字段集看起来更像纸质表格 - 至少尽可能 - 带有图例等,其标记比表格所需的标记更少。
      • + 1 表示字段集 + 标签。语义 HTML 非常简单,如果使用 for= 标签,即使是最糟糕的浏览器也能增加可用性。
      • 如果我希望表单中的所有标签都自动采用最长标签的宽度,有没有一种简单的方法可以在没有表格的情况下做到这一点?
      • @AgentRev 在 CSS 中使用 display: table-cell,虽然它不是那么简单。
      【解决方案8】:

      有些人会说是,有些人不会。

      这是一种供您决定的方法:如果它确实包含表格数据,那么至少根据 WCAG,它应该有一个汇总属性。摘要属性应描述表格的目的和结构,以使屏幕阅读器用户受益。你能写出这样的属性吗?如果是这样,那么您应该这样做,并将其包括在您的桌子上。如果你不能,那么它可能不是一个真正的表格,你应该寻找另一种布置表格的方式。

      【讨论】:

        【解决方案9】:

        为屏幕阅读器使用带有“for”属性的标签很重要(为了可用性)。

        这就是我使用字段集的原因

        【讨论】:

        • 1. for 属性还为图形客户端提供了可用性改进。 2. label[for]不需要字段集。 3. 使用表不排除使用字段集。
        【解决方案10】:

        表单不是表格数据。

        使用 CSS 布局表单元素非常容易,我认为没有任何值得用表格混淆标记的价值。就个人而言,我发现在这一点上,使用 CSS 布置表单比使用表格更容易。例如:

        HTML:

        <fieldset>
          <label for="FirstName">First Name</label>
          <input type="text" id="FirstName" />
        
          <label for="LastName">Last Name</label>
          <input type="text" id="LastName" />
        
          <label for="Age">Age:</label>
          <select id="Age">
            <option>18-24</option>
            <option>25-50</option>
            <option>51-old</option>
          </select>
        </fieldset>
        

        CSS:

        fieldset {
          overflow: hidden;
          width: 400px;
        }
        
        label {
          clear: both;
          float: right;
          padding-right: 10px;
          width: 100px;
        }
        
        input, select {
          float: left;
        }
        

        使用该主题的简单变体,您可以制作外观精美、易于使用的表单,这些表单实际上比表格更易于使用。我已经使用了这种基本方法,并将其升级为一些相当复杂的多列数据输入表单,不费吹灰之力。

        【讨论】:

        • 表格表格。而表单域代表可变数据。
        • @eyelidlessness: A form is tabular - 这完全取决于表单中的数据。你不能把所有表格都扔到一个桶里然后说表格 === 表格
        • @Madmartigan,我正在努力想出一个表格不是表格的用例。你能推荐一下吗?
        • 问题是所有数据都可以被认为是“表格”,即它可以“进入电子表格”。但这并不意味着当有更好的选项可用时,我们必须在网络上将其标记为这样。怎么发邮件?您真的会认为该表格是表格数据吗?
        • 陪审团仍在寻找语义标记表单的最佳方式,但假设所有表单数据都必须呈现在表格中,这肯定是错过了标记。带有单个输入的“搜索”表单怎么样:有人会争辩说它必须在表格中标记,因为所有表单都是表格的?我不是说表格是错误的,我是说它们并不总是正确的。我认为说 A form is not tabular data. 也很离谱,这取决于所提供的数据。
        【解决方案11】:

        我一直不明白,当定义列表在语义上看起来更合适时,为什么要对表单使用有序列表或无序列表:

        <fieldset>
          <dl>
            <dt><label for="definition">Definition:</label></dt>
            <dd><input type="text" name="definition" /></dd>
          </dl>
        </fieldset>
        

        它们在格式方面可能有点棘手,但对我来说,它总是比绝大多数表单的列表或表格更有意义。

        话虽如此,表格对我来说似乎并不适合可编辑的表格数据。

        【讨论】:

          【解决方案12】:

          在成为最大的反表人之后,你可以想象我已经开始意识到最终这并不重要。使用最快的。当然,如果您要嵌套表格,那么您会遇到问题,但通常我想不出更简单的布局表格的方法。在一天结束的时候,客户或访客是否会对您使用的是表格还是列表进行两次抨击?

          【讨论】:

          • 嗯...是的;如果表单无法正确显示,或者屏幕阅读一直在谈论与表单无关的表格单元格和行,他们很可能会发出“两个声音”......
          • 如果您不使用表格并尝试使用更复杂的 css 规则(例如使用浮点数)来获得相同的结果,则表单更有可能无法正确显示。
          • 首先,浮点数并不复杂。如果 Web 开发人员不了解文档流 (cssnewbie.com/css-float-property),则需要认真花一些时间了解。其次,浮动设计为在浏览器大小的限制内工作,因此表单将正确地显示给用户。如果这不符合“设计”,您还需要与您的创意部门讨论。
          【解决方案13】:

          表格可以是或感觉是表格的,但表格意味着“表示”以及语义。在表格中标记表格往往会将设计锁定为 2 跨字段/输入布局(假设您不想花时间覆盖表格的 CSS)。此外,如果您尝试考虑手机等小屏幕,您可能必须覆盖样式。

          此外,屏幕阅读器会用 “第 1 行,第 1 列,标签,'名称',第 2 列,输入,'名称'...”来过度宣布此表单,而不是简单地说,“输入,‘名字’……”

          我的建议是使用 DIV、FIELDSET 或 UL/LI。这将演示文稿留在了 CSS 的手中,正是它所属的地方。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-12
            • 2019-05-31
            • 1970-01-01
            • 2012-04-08
            相关资源
            最近更新 更多