2016-08-08 29 views
2

以代码在这里:做一个<input>看起来像普通的文本段落中的

<p>Lorem ipsum <input type="text" value="algo" /> dolor sit ...</p> 

样品:http://codepen.io/dbugger/pen/KrAmPx

我怎样才能使输入看起来完全正常的文字,段落里面?我将它设置为display: inline,但宽度似乎仍然固定。

+5

我不相信这是可能的,一个至少不能没有诉诸JavaScript进行上浆。什么是用例?你想达到什么目的?可能还有其他选择,例如使用contenteditable =“true”而不是输入的span元素。 – HaukurHaf

+0

有更多的方法来做我想要的。我只是想知道这是否可行。 –

+0

这使用Javascript,可能不会完全回答你的问题,但 - 你有看看吗? https://stackoverflow.com/questions/3392493/adjust-width-of-input-field-to-its-input#3392617 – TuringTux

回答

4

元素从浏览器继承某些默认值。你需要“重置”所有的人都在为了使输入元素表现为周围的文字:

p input { 
    border: none; 
    display: inline; 
    font-family: inherit; 
    font-size: inherit; 
    padding: none; 
    width: auto; 
} 

这是接近你可以用CSS独自一人的。如果你想要一个可变宽度,你将不得不求助于JS而不是CSS,因为调整一个元素到它的值超出了CSS的范围。基于用户输入或由于即时效应所做的更改,在事实之后修改元素是JS/jQuery的用途。

请注意,根据您使用的浏览器(以及由于未来浏览器可能做的事情与现今的做法截然不同),此列表不一定是详尽无遗的。


的唯一方法可以在“假”以清洁的方式而不JS这种效果是使用一个元件与contenteditable属性,该属性(不同于输入元件)将用户输入存储在所述元素的含量而不是它的价值。有关此技术的示例,请参阅this answer

尽管您不需要JS来获取该效果,但您需要它来检索该元素的内容。过去我可以想象的唯一用途是如果您提供的是可打印文档,无需编程处理输入或存储它。

+1

这没有奏效。你试过了吗? –

+0

是的,尽管我马上编辑了它并做了进一步的解释,但由于原始答案不一定符合您的要求。这个回答关于*外观*(这是CSS可以处理的部分),而不是*功能* – TheThirdMan

+0

好吧,但我问**使它看起来像普通文本一样。这本身就是**外观** –

1

是的,可以通过模仿CSS的样式和使用javascript自动调整文本的长度来做到这一点。

您可以最好地模仿@TheThirdMan建议的样式。


将输入调整为其内容大小。

$(function(){ 
 
    $('#hide').text($('#txt').val()).hide(); 
 
    $('#txt').width($('span').width()); 
 
}).on('input', function() { 
 
    $('#hide').text($('#txt').val()); 
 
    $('#txt').width($('span').width()); 
 
});
#txt, 
 
#hide{ 
 
    font:inherit; 
 
    margin:0; 
 
    padding:0; 
 
} 
 
#txt{ 
 
    border:none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<p>Lorem ipsum 
 
    <span id="hide"></span><input id="txt" type="text" value="type here ..."> 
 
    egestas arcu. 
 
</p>

+0

downvoter可能与我有这个答案相同的问题:它比需要更唠叨,只是表面上试图解决外观问题(你甚至将Arial设置为字体,完全不知道文本的其余部分使用什么字体 - 请参阅我如何解决这一问题的答案),而只关注将输入扩展到所需宽度的功能。然而,你做了一个很好的解决方案来做到这一点,并且如果你把它发布在评论中的链接中(这些尝试大致相同,但在我看来不是那么好),我会赞扬那些。 – TheThirdMan

+0

@ TheThirdMan我感谢您花时间发表评论。你的观点已经注意到了,谢谢。字体必须设置为强制输入和正文相同。 – Obsidian

+2

根本不是 - 通过使用'font-family:inherit;',元素将继承下一个最低值,这将是'p'元素使用的字体系列。考虑到你的'p'和'body'字体系列可能不同,这就是你想要的行为。 – TheThirdMan

相关问题