在Firefox中,标签/输入框的位置与Chrome/Safari不同

3
我正在尝试构建一个“Mad Libs”样式的模板,但我遇到了一个问题,相对定位的输入包裹在标签中,在Firefox中显示出现意外情况,在Safari/Chrome中则表现如预期。我已经尝试研究可能导致此问题的原因,但似乎无法找到两个浏览器之间不兼容的差异。

这是一个演示,让您更好地理解我的描述。您有没有任何线索可以纠正这个问题?也许我需要重写HTML?理想情况下,这只是CSS问题,因为这个HTML是动态渲染的,如果可能的话,我宁愿不改变后端。

以下是来自演示的HTML/CSS:

HTML

<div class="feature" id="madlib">
  <h1>Test Test</h1>
  <div class="padded rounded border">
    <p>Dear <label>mom <input name="madlib_mom" type="text" /></label>,</p>  
    <p>Lorem ipsum <label>adjective <input name="madlib_adjective" type="text" /></label>   lorem ipsum lorem ipsum lorem ipsum <label>thank you <input name="madlib_thank_you" type="text" /></label> lorem ipsum lorem ipsum lorem ipsum lorem ipsum.</p>
    <p>Lorem ipsum lorem ipsum <label>noun 1 <input name="madlib_noun_1" type="text"
    </label> and <label>noun 2 <input name="madlib_noun_2" type="text" /></label> lorem ipsum lorem ipsummmm lorem, lorem ipsum lorem ipsum lorem ipsum <label>place <input name="madlib_place" type="text" /></label>, lorem ipsum <label>favorite food <input name="madlib_favorite_food" type="text" /></label> lorem ipsum lorem <label>good advice <input name="madlib_good_advice" type="text" /></label>.</p>
  </div>
</div>

CSS

input[type="text"] {
  display:block;  
  position:relative;  
  top:-30px;  
  border-bottom:1px solid pink;
  border-left:0;
  border-right:0;
  border-top:0;
}

label {
  display: inline-block;  
  position:relative;
  top:30px;
  margin-bottom:8px;
  padding:2px;
  text-align: center; 
  font-size:10px;
}

提前感谢您的任何帮助!

编辑:更明确地说,标签应该充当“疯狂的图书馆”标签,以便它们出现在文本输入框下方。在所有浏览器中,它们大致位于正确的位置,但是在Chrome中它们似乎向下推了几乎两倍的距离,导致它们与随后的文本行重叠。


标签放在哪里?你想把它们放在哪里? - Joe
更新了一些更多的信息。 - Michael Vattuone
在Firefox和Chrome中,它们看起来对我来说是一样的位置,但是您可能需要考虑在Chrome中去掉黄色轮廓线,可以将以下行添加到CSS中:outline: none; - Mi-Creativity
我在我的Chrome版本中没有看到黄色轮廓线,而且我已经更新到最新版本了。有趣的是... - Michael Vattuone
Chrome浏览器版本26.0.1410,截图链接>>http://mi-creativity.com/test/images/outline_test.jpg - Mi-Creativity
奇怪!我会添加那个CSS,但我不明白为什么我无法看到它。 - Michael Vattuone
1个回答

2
这是由于浏览器对于label内联块的基线位置判断存在差异。为避免此问题,可以为标签使用垂直对齐方式,而非默认的baseline。例如,像这个jsfiddle示例中使用vertical-align:tophttp://jsfiddle.net/4GhLA/2/ (很难确定Chrome或Firefox在CSS规范方面是否正确。这取决于input元素的display:block是否在label元素的内联块中建立了一个行框。)

怪了!我之前看过相关资料,但是一直无法复现一个正常工作的解决方案。很高兴发现问题如此简单。谢谢! - Michael Vattuone
IE9显示了与FF类似的问题(当然略有不同)。这也可以解决它。 - Dracs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接