剛吃了一份宮保雞丁刀削麪,幸福感滿滿,寫篇博客消耗一下熱量。css
今天工做遇到的一個問題是在input輸入框中加入圖標,當輸入內容後,圖標和提示語一塊兒隱藏,相似於placeholder的功能。如淘寶頁面,效果以下:前端
剛開始我覺得是使用了placeholder,想了半天也不知道怎麼把圖標引入placeholder裏面去,索興打開淘寶頁面,按下鍵盤上F12,跟隨我一塊兒來探索淘寶前端工程師鮮爲人知的祕密吧,吼吼。前端工程師
固然,咱們不須要作的那麼複雜,只要實現最基礎的功能便可。我發現placeholder只是個假象,大神們用的label標籤顯示提示語,交互效果應該是用js實現的,步驟以下:框架
1. HTML代碼:ide
<div class="box"> <label for="q" id="q_label">請輸入關鍵字</label> <input id="q" type="text"> <i class="am-icon-search search" id="q_i"></i>
</div>
其實結構很是簡單,最外層放一個div盒子,裏面放三個元素:一個label,一個input,一個i標籤。使用for屬性將label與input綁定,label用來顯示字符串,i標籤引入圖標,input幹好本職工做就好了——提供輸入框。我這裏是用的amazeUI框架的圖標,因此用i標籤引入,若是你直接使用圖片,用img固然也沒有問題。字體
好了,結構搭好了,下面就是css大顯身手的時候了。spa
2. CSS代碼 :code
/** *放置input的div盒子 *1.此處應個人項目須要,加了些特別的設置,如字體、背景色等,按需添加; *2.內層input不加邊框,看起來效果會天然一點,因此外層div設置了邊框和圓角
*/ .box{ background-color: #ffffff; border: 1px solid #eeeeee; border-radius: 6px; font-size: 14px; text-align: center; } /** *label標籤樣式 放在.box下,不至於影響其餘的label *採起絕對定位,位置根據需求肯定 */ .box label{ z-index: 2; position: absolute; left: 50%; margin-left: -8%; color: #B2B2B2; top: 4.8rem; font-weight: normal; } /** *input標籤樣式 *寬度適應外層div *隱藏邊框 *這裏有個小技巧,height與line-height值相等,可保證文字垂直居中;但我發現文字比圖標略偏下,進行了微調; */ .box input{ text-indent: 10px; height: 1.8rem; line-height: 1.9rem; width: 100%; border: none; outline: none; } /** *圖標樣式 *絕對定位,自定義顏色 */ .box i{ position: absolute; top: 4.8rem; left: 50%; margin-left: -15%; color: #B2B2B2; }
作好這些,效果就已經能粗來了,看圖說話orm
至此,功能實現。既然已經寫到這裏了,順便把js語句一併呈上吧。blog
3. JS代碼:
/** * Created by lixj on 2015/8/14. * js判斷input輸入框中是否有值,以此來判斷是否隱藏默認提示信息
* 使用keyup事件 */ $(function() { $('#q').on('keyup',function() { var len = document.getElementById('q').value; if(len == ''){ $('#q_label').show(); $('#q_i').show(); }else{ $('#q_label').hide(); $('#q_i').hide(); } }); })
歐啦!週末愉快!!下班回家!!!