【问题标题】:How to style HtmlService form elements with labels above input?如何在输入上方使用标签设置 HtmlService 表单元素的样式?
【发布时间】:2015-07-09 08:09:30
【问题描述】:

我正在尝试将使用已弃用的 UiApp 编写的表单重新创建为 HtmlService 版本。我继承了大部分代码,所以我正在努力学习/改进/整理。

旧的表单是这样的,每个输入框上方都有一个标签:

我可以让新表单看起来像这样,标签与输入一致:

我目前的代码是:

<!--this line was missing-->
<?!=HtmlService.createHtmlOutputFromFile('Stylesheet').getContent();?>
<!--and including it fixes part two of my questions-->

<html>
      <body>
        <h3>ProReactive Hazard Logging v3.0.0</h3>
        <form action="<?= action ?>" method="post">
         Date:<input type="date" name="date" style="width: 100px;">
             Depot/Site:<input list="depot" name="depot" style="width: 100px;">
            <datalist id="depot">
            <option value="COMPANY (H&S Projects Team">
            <option value="CS - C** Street Depot">

            </datalist>
                Reporter:<input type="text" name="reporter" style="width: 100px;"/>
                    Contact No:<input type="text" name="details" style="width: 100px;"/>
                        Source Code:<input list="source" name="source" style="width: 100px;">
                        <datalist id="source">
                        <option value="01 - Accident/Incident investigations & reports">
                        <option value="02 - Company or location H&S Committee / Forum actions">
                        <option value="03 - Emergency Preparedness reviews/activities">
                        </datalist>
                              Hazard Code:<input list="hazard" name="hazard" style="width: 100px;">
                              <datalist id="hazard">
                              <option value="01 - Access equipment fault">
                              <option value="02 - Assault - verbal/physical">
                              <option value="03 - Blocked/held open fire route/exit">
                              <option value="04 - Contractor / visitor non-compliance or poor/unsafe practice">
                              </datalist>
    Brief Details:<input type="text" name="details" />
              Full Description:<input type="text" name="description" />
                          Priority Code:<input list="priority" name="priority">
                          <datalist id="priority">
                          <option value="02 - WITHIN 24-48 HOURS">
                          <option value="03 - WITHIN 1 WEEK">
                          <option value="04 - WITHIN 1 MONTH">
                          <option value="05 - WITHIN 3 MONTHS">
                          <option value="06 - FOR MANAGEMENT DISCUSSION">
                          </datalist>

    </form>
          <input type="submit" value="SUBMIT" />
        </form>
      </body>
    </html>

所以我的问题是:

  1. 如何让输入框标题成为像旧表单一样的标题?这样我就可以添加“添加/删除行”按钮,并且所有这些按钮都排成一行,因为表单用于在每次使用时输入多个项目。

  2. 如何将 'style="width: ***px;"' 移动到 CSS 表单以改进代码?文本输入框需要不同的大小(例如,“联系人号码”条目是电话分机,所以只需很小,其他相同,详细信息/描述框双行高)

根据 mogsdad 的要求,这里是样式表的内容:

<form>
<style>

h3 {font-size: 20px;}

h4 {font-size: 14px;
    font-weight: bold;}

.mydatepick {
    width: 150px;}

.mylistbox {
    width: 200px;}

.result-display {
  margin-left: 5px;
  font-size: 100%;}

.mytextbox{
  width: 150px;}

.myparagraphbox{
  width: 150px;
  height: 70px;}

.error {
  color: #FF0000;}

.hidden {
  display: none;}

.button-success {
  color: white;
  border-radius: 4px;
  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
  background: rgb(28, 184, 65); /* this is a green */}

.button-error {
  color: white;
  border-radius: 4px;
  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
  background: rgb(202, 60, 60); /* this is a maroon */}

</style>
</form>

【问题讨论】:

  • 您的样式表中有什么? (你应该在问题中包含它,因为问题 1 都是关于 css 的。)
  • 干杯 Mogsdad,请参阅编辑。
  • 样式表不应包含&lt;form&gt; 标签。

标签: html forms google-apps-script format row


【解决方案1】:

如果您包含默认的 Stylesheet.html 文件,它还会引入 Google 的 css 文件 https://ssl.gstatic.com/docs/script/css/add-ons.css。 (你的样式表没有这样做——你应该这样做,为什么要重新发明轮子?)

该 css 文件提供您正在寻找的样式,前提是您将适当的类应用于表单元素。这一切都记录在CSS Package for Add-ons 中,如果您不使用附加组件,很容易错过!

输入字段标签的控制在该页面的Text fields 下进行了描述。从这里开始,这里是所需更改的概述。完整的代码在下面的一个可运行的 sn-p 中,因此您可以在那里获取一份副本,并查看它的运行情况。

  • 使用&lt;label&gt; 元素代替纯文本字段标签。

    他们的示例展示了使用for="field-id" 将标签与元素相关联,但在HTML5 下,我们现在使用form="field-id"

  • &lt;label&gt;&lt;input&gt; 元素组合在一个&lt;div&gt; 中,并将样式类inlineform-group 应用到该div。

    输入元素需要id 属性才能工作。除非您通过POST 提交表单,否则他们不需要name。 (这不是这个问题的主题 - 'nuff 说。)

    <div class="inline form-group">
      <label form="city">City</label>
      <input type="text" id="city" style="width: 150px;">
    </div>
    

    请注意,在文档中的这个示例中,字段宽度仍然有一个样式属性,这是您在问题 #2 中想要避免的。这样做的原因是我们使用通用的 css 类来设置相关元素的通用属性 - 这使我们的外观保持一致。通过在元素本身内保留不影响整体外观的元素特定样式,我们避免了 css 文件中的混乱。这与分离设计和开发关注点的原则是一致的,尽管看到style 属性可能会让您产生不同的想法。

  • 将输入字段视为一个块,将提交按钮(+任何其他按钮)视为另一个块,并将它们放在单独的 div 中,class="block"。这将提供它们之间的垂直间距。

    <div class="block">
      ... input fields ...
    </div>
    
    <div class="block">
      ... button(s) ...
    </div>
    
  • 当使用&lt;datalist&gt; 元素提供自动完成时,请注意名称。例如,您有一个名为 depot 的输入元素和一个具有相同 ID 的数据列表。通过对datalist使用复数形式,在提高代码可读性的同时避免了id冲突。

    另外 - 当您设置 value 时,&lt;option&gt; 应该是自动关闭的。浏览器通常会弄清楚,但最好把它弄对,记住/&gt;

    <div class="inline form-group">
      <label form="depot">Depot/Site</label>
      <input id="depot" list="depots" name="depot" style="width: 100px;">
      <datalist id="depots">
        <option value="COMPANY (H&S Projects Team" />
        <option value="CS - C** Street Depot" />
      </datalist>
    </div>
    

<link href="https://ssl.gstatic.com/docs/script/css/add-ons.css" rel="stylesheet" />
<!-- The above css link has been relocated from Stylesheet.html for
     compatibility with the Stack Snippet tool.
-->

<html>

<body>
  <h3>ProReactive Hazard Logging v3.0.0</h3>
  <form action="<?= action ?>" method="post">
    <div class="block">
      <div class="inline form-group">
        <label form="date">Date</label>
        <input type="date" id="date" name="date" style="width: 100px;" />
      </div>
      <div class="inline form-group">
        <label form="depot">Depot/Site</label>
        <input id="depot" list="depots" name="depot" style="width: 100px;">
        <datalist id="depots">
          <option value="COMPANY (H&S Projects Team" />
          <option value="CS - C** Street Depot" />
        </datalist>
      </div>
      <div class="inline form-group">
        <label form="reporter">Reporter</label>
        <input type="text" name="reporter" style="width: 100px;" />
      </div>
      <div class="inline form-group">
        <label form="details">Contact No</label>
        <input type="text" name="details" id="details" style="width: 100px;" />
      </div>
      <div class="inline form-group">
        <label form="source">Source Code</label>
        <input list="sources" name="source" id="source" style="width: 100px;">
        <datalist id="sources">
          <option value="01 - Accident/Incident investigations & reports" />
          <option value="02 - Company or location H&S Committee / Forum actions" />
          <option value="03 - Emergency Preparedness reviews/activities" />
        </datalist>
      </div>
      <div class="inline form-group">
        <label form="hazard">Hazard Code</label>
        <input list="hazards" name="hazard" style="width: 100px;">
        <datalist id="hazards">
          <option value="01 - Access equipment fault" />
          <option value="02 - Assault - verbal/physical" />
          <option value="03 - Blocked/held open fire route/exit" />
          <option value="04 - Contractor / visitor non-compliance or poor/unsafe practice" />
        </datalist>
      </div>
      <div class="inline form-group">
        <label form="details">Brief Details</label>
        <input type="text" name="details" id="details" />
      </div>
      <div class="inline form-group">
        <label form="description">Full Description</label>
        <input type="text" name="description" id="description" />
      </div>
      <div class="inline form-group">
        <label form="priority">Priority Code</label>
        <input list="priorities" name="priority" id="priority">
        <datalist id="priorities">
          <option value="02 - WITHIN 24-48 HOURS" />
          <option value="03 - WITHIN 1 WEEK" />
          <option value="04 - WITHIN 1 MONTH" />
          <option value="05 - WITHIN 3 MONTHS" />
          <option value="06 - FOR MANAGEMENT DISCUSSION" />
        </datalist>
      </div>
    </div>

    <div class="block">
      <input type="submit" value="SUBMIT" />
    </div>
  </form>
</body>

</html>

附录 - 检查add-ons.css

您可以访问the css file 查看 Google 推荐课程的样式。 CSS 通过form-group 定义标签和输入元素之间的空间关系。

.inline {
  display: inline-block;
}

.inline + .inline {
  margin-left: 12px;
}

...

.form-group label + input,
.form-group label + select,
.form-group label + textarea {
  display: block;
}

【讨论】:

  • 莫格兹达很棒。我会仔细研究建议列表,然后返回后续或更新的代码。
  • 如果您必须提出澄清问题,当然,请添加评论。如果您继续下一个问题,请提出一个新问题。但是没有必要回来更新代码 - 事实上,修复代码在您的问题中是一个坏主意,因为它使未来的读者很难找到与他们自己相关的问题问题。虽然帮助个人是这里的一个目标,但建立一个更普遍有用的答案的遗产是一个更大的目标。
【解决方案2】:

第 2 部分回答:

我错过了这条线:

<?!=HtmlService.createHtmlOutputFromFile('Stylesheet').getContent();?>

在我的代码开头,现在可以正常工作了!非常感谢第 1 部分的任何答案!

【讨论】:

    猜你喜欢
    • 2016-12-27
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 2013-10-22
    • 2023-01-09
    • 2017-06-08
    相关资源
    最近更新 更多