2016-03-11 2 views
15

मैं चाहता हूं कि प्लेसहोल्डर शीर्ष पर आगे बढ़े, जब टेक्स्टबॉक्स फोकस पर हो और उपयोगकर्ता टाइप कर रहे हों।प्लेसहोल्डर को फोकस पर और टाइप करते समय शीर्ष पर कैसे स्थानांतरित करें?

मुझे यकीन नहीं है कि यह सिर्फ HTML/css या कोई जावास्क्रिप्ट है या नहीं।

मेरे वर्तमान सीएसएस इस तरह दिखता है, और मैं अभी तक कोई js कोड है:

input:focus::-webkit-input-placeholder { 
    font-size: .75em; 
    position: relative; 
    top: -15px; 
    transition: 0.2s ease-out; 
} 

input::-webkit-input-placeholder { 
    transition: 0.2s ease-in; 
} 

input[type="text"]:focus, input[type="password"]:focus { 
    height: 50px; 
    padding-bottom: 0px; 
    transition: 0.2s ease-in; 
} 

input[type="text"], input[type="password"] { 
    height: 50px; 
    transition: 0.2s ease-in; 
} 

यह लगभग काम करता है (कड़ी के रूप में के रूप में सही नहीं है), लेकिन प्लेसहोल्डर गायब हो जाता है जब मैं टाइप करना आरंभ करें । मैं ट्विटर-बूटस्ट्रैप का उपयोग कर रहा हूं, अगर इससे कुछ आसान हो जाता है!

धन्यवाद।

+0

यदि आप बस उस पृष्ठ का निरीक्षण करते हैं तो आप देखेंगे कि यह प्लेसहोल्डर नहीं है कि वे एक डीआईवी में हेरफेर कर रहे हैं जो INPUT के शीर्ष पर तैर रहा है। आप उस साइट पर कोड को देखकर बस क्या हो रहा है उसे दोहराने में सक्षम होना चाहिए। –

+0

कोई प्लेसहोल्डर कोड नहीं देख सका, और मुझे इतना तय किया गया कि मुझे नहीं पता था कि वे एक और div का उपयोग कर रहे थे। तो टाइप करते समय प्लेसहोल्डर रहने का कोई तरीका नहीं है? –

+0

Google की सामग्री डिजाइन लाइट एक समान व्यवहार का उपयोग करता है। [यहां] (http://codepen.io/joshadamous/pen/yyyqJZ) एचटीएमएल/सीएसएस/jQuery के साथ ऐसी सुविधा को कार्यान्वित करने का एक उदाहरण है। मुझे लगता है कि इसे किसी भी तरह से सामान्य रूप से जेएस की आवश्यकता होगी ताकि इसे ठीक से काम कर सकें। –

उत्तर

35

आप इसे इस

HTML की तरह कर सकता है:

<div> 
    <input type="text" class="inputText" /> 
    <span class="floating-label">Your email address</span> 
</div> 

सीएसएस:

input:focus ~ .floating-label, 
input:not(:focus):valid ~ .floating-label{ 
    top: 8px; 
    bottom: 10px; 
    left: 20px; 
    font-size: 11px; 
    opacity: 1; 
} 

.inputText { 
    font-size: 14px; 
    width: 200px; 
    height: 35px; 
} 

.floating-label { 
    position: absolute; 
    pointer-events: none; 
    left: 20px; 
    top: 18px; 
    transition: 0.2s ease all; 
} 

कार्य JSFiddle यहाँ https://jsfiddle.net/273ntk5s/2/

+0

किसी कारण से मेरा फ़्लोटिंग लेबल टेक्स्ट बॉक्स के नीचे दिखाई दे रहा है। शायद बूटस्ट्रैप मेरे कोड के साथ गड़बड़ कर रहा है। –

+0

आप अपने डोम सेटअप के अनुसार '.floating-label' में 'शीर्ष: 18px' बदल सकते हैं। ताकि फ़्लोटिंग-लेबल इनपुट के भीतर बैठे। –

+0

मैंने चारों ओर एक रास्ता तय किया, फ्लोटिंग लेबल के लिए पूर्ण स्थिति दी, और 1 का जेड-इंडेक्स दिया क्योंकि यह टेक्स्ट बॉक्स के पीछे छिपा रहा था! यह काम कर रहा है, धन्यवाद @ दिवाकरदास –

2

वह साइट प्लेसहोल्डर को नहीं ले जा रही है, लेकिन इनपुट पर एक div (.floating-label) रखती है, इसलिए जब इनपुट केंद्रित होता है तो div सिर्फ इनपुट पर होने के लिए एनिमेट करता है। यहां का मुख्य भाग फ़्लोटिंग div में pointer-events: none; का उपयोग कर रहा है, इसलिए जब आप इसे क्लिक करते हैं तो ईवेंट इसके पीछे इनपुट बॉक्स में जाता है।

1

span{ 
 
    display:block; 
 
    } 
 
input:focus::-webkit-input-placeholder { color:transparent; } 
 
input:focus:-moz-placeholder { color:transparent; } /* FF 4-18 */ 
 
input:focus::-moz-placeholder { color:transparent; } /* FF 19+ */ 
 
input:focus:-ms-input-placeholder { color:transparent; } /* IE 10+ */
<script src="http://code.jquery.com/jquery-3.1.1.min.js"></script> 
 
<script> 
 
$(document).ready(function() { 
 
    $('input').focus(function(){ 
 
    placeholder = $(this).attr('placeholder'); 
 
    if(placeholder != undefined){ 
 
     $(this).parent().prepend('<span class="input-placeholder">'+placeholder+'</span>'); 
 
    } 
 
    }); 
 
    $('input').blur(function(){ 
 
    $(this).parent().find('.input-placeholder').remove(); 
 
    }); 
 
}); 
 
</script> 
 
<div> 
 
    <input type="text" class="inputText" placeholder="Email adress" required/> 
 
</div>

0

.user-input-wrp { 
 
\t position: relative; 
 
\t width: 50%; 
 
} 
 
.user-input-wrp .inputText{ 
 
\t width: 100%; 
 
\t outline: none; 
 
\t border:none; 
 
\t border-bottom: 1px solid #777; 
 
} 
 
.user-input-wrp .inputText:invalid { 
 
\t box-shadow: none !important; 
 
} 
 
.user-input-wrp .inputText:focus{ 
 
\t border-color: blue; 
 
\t border-width: medium medium 2px; 
 
} 
 
.user-input-wrp .floating-label { 
 
\t position: absolute; 
 
\t pointer-events: none; 
 
\t top: 18px; 
 
\t left: 10px; 
 
\t transition: 0.2s ease all; 
 
} 
 
.user-input-wrp input:focus ~ .floating-label, 
 
.user-input-wrp input:not(:focus):valid ~ .floating-label{ 
 
\t top: 0px; 
 
\t left: 10px; 
 
\t font-size: 13px; 
 
\t opacity: 1; 
 
}
<h1>The floating label</h1> 
 
<div class="user-input-wrp"> 
 
    <br/> 
 
    <input type="text" class="inputText" required/> 
 
    <span class="floating-label">Your email address</span> 
 
</div>

@ से कोड संशोधित एक छोटे से user1846747।

संबंधित मुद्दे

 संबंधित मुद्दे