2016-08-08 28 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

相關問題