जवाबों:
यदि केवल क्षेत्र required
आप के साथ जा सकता हैinput:valid
#foo-thing:valid + .msg { visibility: visible!important; }
<input type="text" id="foo-thing" required="required">
<span class="msg" style="visibility: hidden;">Yay not empty</span>
लाइव देखें jsFiddle पर
या #foo-thing:invalid
निगेट का उपयोग कर (@SamGoody को क्रेडिट)
आधुनिक ब्राउज़रों में आप :placeholder-shown
खाली इनपुट को लक्षित करने के लिए उपयोग कर सकते हैं (भ्रमित होने की नहीं ::placeholder
)।
input:placeholder-shown {
border: 1px solid red; /* Red border only if the input is empty */
}
अधिक जानकारी और ब्राउज़र समर्थन: https://css-tricks.com/almanac/selectors/p/placeholder-shown/
CSS में कोई selector नहीं है जो ऐसा करता है। गुण चयनकर्ता गुण मानों से मेल खाते हैं, परिकलित मानों से नहीं।
आपको जावास्क्रिप्ट का उपयोग करना होगा।
:empty
चयनकर्ता केवल खाली तत्वों पर काम करता है, जिसका अर्थ केवल उन तत्वों पर है जिनके बीच खुलने और बंद होने वाले टैग हैं, और एकल टैग तत्व जो हमेशा खाली माना जाता है, उदाहरण के लिए , इसलिए इसे इनपुट तत्वों पर उपयोग नहीं किया जा सकता हैtextarea
किसी फ़ील्ड के मूल्य को अपडेट करना DOM में उसके मूल्य विशेषता को अपडेट नहीं करता है, इसीलिए आपका चयनकर्ता हमेशा फ़ील्ड से मेल खाता है, भले ही वह वास्तव में खाली न हो।
इसके बजाय invalid
छद्म वर्ग का उपयोग करें जो आप चाहते हैं, जैसे कि:
input:required {
border: 1px solid green;
}
input:required:invalid {
border: 1px solid red;
}
<input required type="text" value="">
<input required type="text" value="Value">
input[value=""], input:not([value])
के साथ काम करता है:
<input type="text" />
<input type="text" value="" />
लेकिन जैसे ही कोई टाइप करना शुरू करेगा आपको स्टाइल नहीं बदलेगी (आपको उसके लिए JS की आवश्यकता है)।
input[value=""], input:not([value])
।
यदि विरासत ब्राउज़र का समर्थन करने की आवश्यकता नहीं है, तो आप , और required
, के संयोजन का उपयोग कर सकते हैं ।valid
invalid
इस प्रयोग के बारे में अच्छी बात है valid
और invalid
छद्म तत्वों इनपुट फ़ील्ड प्रकार विशेषताओं के साथ अच्छी तरह से काम करते हैं। उदाहरण के लिए:
input:invalid, textarea:invalid {
box-shadow: 0 0 5px #d45252;
border-color: #b03535
}
input:valid, textarea:valid {
box-shadow: 0 0 5px #5cd053;
border-color: #28921f;
}
<input type="email" name="email" placeholder="john_doe@example.com" required />
<input type="url" name="website" placeholder="http://johndoe.com"/>
<input type="text" name="name" placeholder="John Doe" required/>
संदर्भ के लिए, JSFiddle यहां: http://jsfiddle.net/0sf6m46j/
$('input#edit-keys-1').blur(function(){
tmpval = $(this).val();
if(tmpval == '') {
$(this).addClass('empty');
$(this).removeClass('not-empty');
} else {
$(this).addClass('not-empty');
$(this).removeClass('empty');
}
});
jQuery में। मैंने एक वर्ग जोड़ा और सीएसएस के साथ स्टाइल किया।
.empty { background:none; }
यह मेरे लिए काम किया:
HTML के required
लिए, इनपुट तत्व में विशेषता जोड़ें
<input class="my-input-element" type="text" placeholder="" required />
CSS के लिए, :invalid
खाली इनपुट को लक्षित करने के लिए चयनकर्ता का उपयोग करें
input.my-input-element:invalid {
}
टिप्पणियाँ:
required
से w3Schools.com : "। वर्तमान में, यह निर्दिष्ट करता है जब कि एक इनपुट फ़ील्ड प्रपत्र प्रस्तुत करने से पहले भरा जाना चाहिए"यह प्रश्न कुछ समय पहले पूछा जा सकता है, लेकिन जैसा कि मैंने हाल ही में इस विषय पर उतरा कि क्लाइंट-साइड फॉर्म सत्यापन की तलाश है, और जैसा कि :placeholder-shown
समर्थन बेहतर हो रहा है, मैंने सोचा कि निम्नलिखित दूसरों की मदद कर सकते हैं।
इस CSS4 के छद्म वर्ग का उपयोग करने के बेरेन्ड विचार का उपयोग करते हुए, मैं केवल उपयोगकर्ता द्वारा इसे भरने के बाद ट्रिगर किया गया एक फॉर्म सत्यापन बनाने में सक्षम था।
यहाँ कोडपे पर ademo और स्पष्टीकरण दिया गया है: https://codepen.io/johanmouchet/pen/PKxxnQ
यदि आप IE या प्री-क्रोमियम एज का समर्थन नहीं करते हुए खुश हैं (जो कि यदि आप इसे प्रगतिशील वृद्धि के लिए उपयोग कर रहे हैं तो ठीक हो सकता है), आप :placeholder-shown
बेरेंड के अनुसार उपयोग कर सकते हैं । ध्यान दें कि क्रोम और सफारी के लिए आपको वास्तव में काम करने के लिए एक गैर-खाली प्लेसहोल्डर की आवश्यकता होती है, हालांकि एक अंतरिक्ष काम करता है।
*,
::after,
::before {
box-sizing: border-box;
}
label.floating-label {
display: block;
position: relative;
height: 2.2em;
margin-bottom: 1em;
}
label.floating-label input {
font-size: 1em;
height: 2.2em;
padding-top: 0.7em;
line-height: 1.5;
color: #495057;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ced4da;
border-radius: 0.25rem;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
label.floating-label input:focus {
color: #495057;
background-color: #fff;
border-color: #80bdff;
outline: 0;
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
}
label.floating-label input+span {
position: absolute;
top: 0em;
left: 0;
display: block;
width: 100%;
font-size: 0.66em;
line-height: 1.5;
color: #495057;
border: 1px solid transparent;
border-radius: 0.25rem;
transition: font-size 0.1s ease-in-out, top 0.1s ease-in-out;
}
label.floating-label input:placeholder-shown {
padding-top: 0;
font-size: 1em;
}
label.floating-label input:placeholder-shown+span {
top: 0.3em;
font-size: 1em;
}
<fieldset>
<legend>
Floating labels example (no-JS)
</legend>
<label class="floating-label">
<input type="text" placeholder=" ">
<span>Username</span>
</label>
<label class="floating-label">
<input type="Password" placeholder=" ">
<span>Password</span>
</label>
</fieldset>
<p>
Inspired by Bootstrap's <a href="https://getbootstrap.com/docs/4.0/examples/floating-labels/">floating labels</a>.
</p>
मुझे आश्चर्य है कि हमारे पास खाली इनपुट बॉक्स प्राप्त करने के लिए स्पष्ट गुण हैं, इस कोड पर एक नज़र डालें
/*empty input*/
input:empty{
border-color: red;
}
/*input with value*/
input:not(:empty){
border-color: black;
}
अपडेट करें
input, select, textarea {
border-color: @green;
&:empty {
border-color: @red;
}
}
मान्यता में एक महान देखो होने के लिए और अधिक
input, select, textarea {
&[aria-invalid="true"] {
border-color: amber !important;
}
&[aria-invalid="false"], &.valid {
border-color: green !important;
}
}
:empty
केवल उन तत्वों पर लागू होता है जिनकी कोई संतान नहीं है। इनपुट में बच्चे के नोड्स नहीं हो सकते हैं, इसलिए आपका इनपुट हमेशा लाल बॉर्डर के साथ रहेगा। यह भी देखें इस टिप्पणी
value
से बच्चे की संख्या में परिवर्तन नहीं होता है।
<parent><child></child></parent>
)। आपके पास बस है <input></input>
और जैसा कि आप लिखते हैं कि जो बदल रहा है वह एक <value>
नोड के अंदर नहीं है, <input>
लेकिन एक मूल्य विशेषता है :<input value='stuff you type'></input>
मुझे लगता है कि यह एक बहुत पुराना धागा है, लेकिन तब से चीजें थोड़ी बदल गई हैं और इससे मुझे अपनी समस्या को ठीक करने के लिए आवश्यक चीजों का सही संयोजन खोजने में मदद मिली। इसलिए मैंने सोचा कि मैंने जो किया है उसे साझा करूँगा।
समस्या यह थी कि मुझे एक ही सीएसएस के लिए वैकल्पिक इनपुट के लिए आवेदन किया गया था यदि वह भरा हुआ था, जैसा कि मेरे पास आवश्यक था। Css ने psuedo वर्ग का उपयोग किया: मान्य जो css को वैकल्पिक इनपुट पर लागू करता है, जब भरा नहीं होता है।
यह मैंने इसे कैसे तय किया;
एचटीएमएल
<input type="text" required="required">
<input type="text" placeholder="">
सीएसएस
input:required:valid {
....
}
input:optional::not(:placeholder-shown){
....
}