【问题标题】:Having trouble putting label on 1 line and input and a select together on the next line无法将标签放在 1 行并在下一行输入和选择一起
【发布时间】:2017-10-31 23:30:00
【问题描述】:

有点卡在这个问题上。如果需要,我可以轻松地将标签和输入放在同一行上,或者在需要时放在不同的行上......但是,到目前为止,试图在 1 行上完成标签,而输入和选择一起是一项徒劳的任务。

所以,我尝试了什么...我尝试将标签设为块元素,并将输入和选择两个内联块。你可以看到我的 2 条注释掉了我正在尝试的 CSS 规则。我尝试将标签设置为宽度 100% 和其他内容。

它要么在 1 行上全部 3 个,要么全部 3 个块。我有一种感觉,这是因为标签包裹在它们周围,但这无关紧要,因为我可以轻松操作标签和输入,但是当涉及到标签时,输入,选择它不想工作......

我想到的一种丑陋的丑陋方法是绝对定位选择,但我希望有一种更合适的方法来做到这一点。 (不确定这是否可行)。我更喜欢尽可能干净的解决方案,绝对定位这似乎是尝试修复它的糟糕方法。我可能忽略了一些容易的事情......这就是我在这里的原因。 :)

有什么想法吗? (我也不关心旧浏览器)

我正在寻找的是......(根据小提琴)

... 城市(这是一个标签,坐在这里)
(标签下输入)

电话号码(此处的标签)
(在这里输入)(在这里选择) ...

.form-outer-container,
.primary-button {
  font-size: 1.025em;
}

.form-outer-container {
  padding: 8px 12px;
  background-color: #FCFCFC;
  border-radius: 3px;
  width: 100%;
  overflow: auto;
  display: inline-block;
}

ul {
  margin: 0;
  padding: 0;
}

ul > li {
  list-style: none;
  margin: 3px 0 0 0;
  padding: 2px 2px;
}

li > label {
  display: block;
  text-align: left;
}

li > label > input,
li > label > textarea {
  display: block;
}

li > label > input[type="checkbox"] {
  display: inline;
}

input[type="text"],
input[type="password"],
textarea {
  color: #0a290a;
  border: 1px solid darkgrey;
}

.label-input-select-combo > input,
.label-input-select-combo > select {
  /* display: inline-block; */
}

.label-input-select-combo {
  /* display: block !important; */
}
<ul>
  <li>
    <label>Address
      <textarea rows="3"></textarea>
    </label>
  </li>
  <li>
    <label>City
      <input type="text" data-bind="city" placeholder="Oshawa" tabindex="3">
    </label>
  </li>
  <li>
    <label>Country
      <input type="text" data-bind="country" placeholder="Canada" tabindex="5">
    </label>
  </li>
</ul>
<ul>
  <li class="editor sub-editor" data-rest-path="/api/actphone" data-parent-id="cid">
    <label class="label-input-select-combo">Phone number
      <input type="text" data-bind="phone" placeholder="905-999-3590" tabindex="6">
      <select data-bind="type">
        <option value="M">Mobile</option>
        <option value="W" selected>Work</option>
        <option value="H">Home</option>
        <option value="O">Other</option>
      </select>
    </label>
  </li>
  <li>
    <button type="button" class="primary-button editor-save">Create</button>
  </li>
</ul>

【问题讨论】:

    标签: html css alignment


    【解决方案1】:

    这里有两种可能的选择:

    1. 将电话号码输入和选择下拉列表中的&lt;span&gt; 并给&lt;span&gt; 一个display: flex;

    2. 在标签文本后添加&lt;br/&gt;标签,然后给input一个display: inline-block;

    像这样:

    .form-outer-container,
    .primary-button {
      font-size: 1.025em;
    }
    
    .form-outer-container {
      padding: 8px 12px;
      background-color: #FCFCFC;
      border-radius: 3px;
      width: 100%;
      overflow: auto;
      display: inline-block;
    }
    
    ul {
      margin: 0;
      padding: 0;
    }
    
    ul > li {
      list-style: none;
      margin: 3px 0 0 0;
      padding: 2px 2px;
    }
    
    li > label {
      display: block;
      text-align: left;
    }
    
    li > label > input,
    li > label > textarea {
      display: block;
    }
    
    li > label > input[type="checkbox"] {
      display: inline;
    }
    
    input[type="text"],
    input[type="password"],
    textarea {
      color: #0a290a;
      border: 1px solid darkgrey;
    }
    
    .input-block {
      display: flex;
    }
    
    .input--left {
      display: inline-block;
    }
    <ul>
      <li>
        <label>Address
          <textarea rows="3"></textarea>
        </label>
      </li>
      <li>
        <label>City
          <input type="text" data-bind="city" placeholder="Oshawa" tabindex="3">
        </label>
      </li>
      <li>
        <label>Country
          <input type="text" data-bind="country" placeholder="Canada" tabindex="5">
        </label>
      </li>
    </ul>
    <ul>
      <li class="editor sub-editor" data-rest-path="/api/actphone" data-parent-id="cid">
        <label>Phone number
          <span class="input-block">
          <input type="text" data-bind="phone" placeholder="905-999-3590" tabindex="6">
          <select data-bind="type">
            <option value="M">Mobile</option>
            <option value="W" selected>Work</option>
            <option value="H">Home</option>
            <option value="O">Other</option>
          </select>
          </span>
        </label>
      </li>
      <li class="editor sub-editor" data-rest-path="/api/actphone" data-parent-id="cid">
        <label class="label-input-select-combo">Phone number<br/>
          <input type="text" class="input--left" data-bind="phone" placeholder="905-999-3590" tabindex="6">
          <select data-bind="type">
            <option value="M">Mobile</option>
            <option value="W" selected>Work</option>
            <option value="H">Home</option>
            <option value="O">Other</option>
          </select>
        </label>
      </li>
      <li>
        <button type="button" class="primary-button editor-save">Create</button>
      </li>
    </ul>

    【讨论】:

    • 我会试一试...(另外,感谢您格式化代码...我认为我做对了...当我按下 CTRL+ 时我一定做错了什么K 缩进代码)。
    • 您正确添加了格式化代码。另一种选择是添加代码 sn -p - stackoverflow.blog/2014/09/16/…
    • 啊,谢谢!下次我会寻找那个选项!你的方式看起来更好! :) 此外,您的解决方案比其他解决方案效果更好。虽然它们都有效,但最好将标签包裹在两者上。我也喜欢 Flex 排列它们的方式。感谢您的时间!非常感谢!
    • 我确实觉得很有趣,我可以很容易地将标签和输入放在不同的行上,但是在标签内添加选择(连同输入)似乎会导致它的行为不同。如果没有那里的选择......很容易操纵标签和输入。我希望这三个都可以被操纵。我对 Flex 非常满意,因为我正在使用网格的非常复杂的表单......所以,flex 不会打扰我。支持范围相当广泛。此外,MDN 文档中的 UL/LI 中似乎不允许使用 div,这是有道理的,因此其他人发布的 div 选项无效,除非
    • 我移动标签。
    【解决方案2】:

    输入是全宽的。您需要将其设置为内联块。这将把它放在同一行,它之前和之后是什么。将&lt;br /&gt; 放在“电话号码”之后或在“电话号码”周围放置一个 div,使其不在输入的同一行。

    【讨论】:

      【解决方案3】:

      您将所有内容都包装在标签标签中。标签标签仅用于描述。您需要通过以下方式进行更改:

      <label class="label-input-select-combo">Phone number</label>
      <input type="text" data-bind="phone" placeholder="905-999-3590" tabindex="6">
      <select data-bind="type">
        <option value="M">Mobile</option>
        <option value="W" selected>Work</option>
        <option value="H">Home</option>
        <option value="O">Other</option>
      </select>
      

      JsFiddle

      【讨论】:

      • 谢谢。这确实有效。我没有尝试这样做,因为我能够将标签和输入放在它们自己的行上,即使标签都包裹在两者上。我猜想在 2 个元素周围包装标签会导致它的行为不同。有趣....你知道为什么它不能同时围绕输入和选择工作吗?当它只围绕输入工作时? MDN 规范说标签内允许选择(也是输入)。然而,它并没有同时提到两者......
      • 当您将标签包裹在输入周围时,它允许更大范围的单击以启动输入。您的答案确实有效,但发布的 Flex 选项更接近我正在寻找的内容,并允许我将标签保持在输入和选择周围。感谢您抽出宝贵时间回复。非常感谢。
      猜你喜欢
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 2013-06-16
      相关资源
      最近更新 更多