【问题标题】:How to position a label using css relative to an absolute positioned input box如何使用css相对于绝对定位的输入框定位标签
【发布时间】:2014-07-10 13:30:34
【问题描述】:

我正在尝试仅使用 html/css 相对于绝对定位输入框来定位标签。

html是由代码生成的,它会输出一个这样的输入框:

<input type="text" style="position: absolute; top: 200px; left: 200px;"></input>

然后标签有一个具有 4 个可能值的类,左、上、右和下。

<input type="text" style="position: absolute; top: 200px; left: 200px;">
    <label class="top">Client Forename</label>
</input>

如果标签定位在右边,那么标签需要到输入框的右边等等等等。

我对 CSS 的了解是,父级通常具有相对位置,子级是绝对位置,允许子级相对于父级定位在任何位置。

但是由于输入已经被设置为绝对,我不知道如何实现这一点。

谁能帮忙?

【问题讨论】:

  • 你真的不应该有一个label inside一个input
  • 是的,我同意,正如你所看到的那样,我正在竭尽全力解决这个问题。
  • @MichaelBellamy parent 不需要是position:relative,它只需要是一个定位元素。即你可以绝对定位一个元素,其父元素的位置为relativeabsolutefixed 等,而不是static
  • &lt;input&gt; 元素的结束标签是禁止的。他们是空的。您在输入中没有标签。输入后有一个标签,然后是一个无效的结束标签。
  • @MichaelBellamy 看看下面詹姆斯的回答。在输入中包含标签是无效的,浏览器会将它们呈现为兄弟而不是位于输入中的标签,因此您需要按照 James 的建议将它们包装在一个共同的父级中!

标签: html css


【解决方案1】:

input 不能包含其他元素,因此不能有其他元素相对于它定位。但是,您可以将这两个元素包装在一个共同的父级中并绝对定位它。然后label 可以相对于父元素进行绝对定位。

http://jsfiddle.net/KeW3R/1/

新的 HTML 结构:

<div style="position: absolute; left: 0; top: 0;">
    <input type="text"/>
    <label class="right">label</label>
</div>
<div style="position: absolute; left: 100px; top: 50px;">
    <input type="text"/>
    <label class="left">label</label>
</div>
<div style="position: absolute; left: 0; top: 100px;">
    <input type="text"/>
    <label class="top">label</label>
</div>
<div style="position: absolute; left: 0; top: 150px;">
    <input type="text"/>
    <label class="bottom">label</label>
</div>

CSS:

label{
    position: absolute;
}
.right{
    top: 0;
    left: 100%;
}
.left{
    top: 0;
    right: 100%;
}
.top{
    bottom: 100%;
    left: 0;
}
.bottom{
    top: 100%;
    left: 0;
}

【讨论】:

  • 非常感谢詹姆斯 - 这让我走上了正确的道路。我也忘了包括输入框的宽度和高度,所以我稍微修改了你的版本以适应这个。它需要一些调整,但我快到了。 jsfiddle.net/57GAr
猜你喜欢
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多