How can I make ‘E-mail’ span stay on the top pink
.contactt{
position: relative;
padding: 50px 100px;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.container{
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.contactFormm{
width: 40%;
padding: 40px;
background: #fff;
}
.contactFormm .inputBox {
position: relative;
width: 100%;
margin-top: 10px;
}
.contactFormm .inputBox input,
.contactFormm .inputBox textarea{
width: 100%;
padding: 5px 0;
font-size: 16px;
margin: 10px 0px;
border: none;
border-bottom: 2px solid #333;
outline: none;
resize: none;
}
.contactFormm .inputBox span{
left: 0;
position: absolute;
padding: 5px 0;
font-size: 16px;
margin: 10px 0px;
pointer-events: none;
transition: 0.5s;
color: #666;
}
.contactFormm .inputBox input:focus ~ span,
.contactFormm .inputBox input:valid ~ span,
.contactFormm .inputBox textarea:focus ~ span,
.contactFormm .inputBox textarea:valid ~ span{
color: #e91e63;
font-size: 12px;
transform: translateY(-20px);
}
<main class='contactt container'>
<div class='contactFormm'>
<form>
<h1>Contact form</h1>
<div class='inputBox'>
<input type="email" name='' required='required'>
<span>E-mail</span>
</div>
<div class='inputBox'>
<input type="text" name='' required='required'>
<span>Name</span>
</div>
<div class='inputBox'>
<input type="text" name='' required='required'>
<span>Subject</span>
</div>
<div class='inputBox'>
<textarea required='required'></textarea>
<span>Type your Message</span>
</div>
<div class='inputBox'>
<input type='submit' name='' value='Send'>
</div>
</form>
</div>
</main>
? Is there anything else I can use instead of ‘valid’? I know that ‘E-mail” span drops down because it is not valid e-mail but even if someone writes invalid e-mail I want it to be still pink on the top but in the same time, when I press ‘send’ button I want the chrome say that it is not valid. Please see my code so maybe you could
When I write ‘dhdhd’ <- invalid e-mail and go to the next box, the pink ‘E-mail’ span drops down and becomes grey. It will only work if I write valid e-mail e.g ‘dfghj@gmail.com’ but I still want this ‘e-mail’ span to stay on the top even if it is invalid
Advertisement
Answer
You could just use the :invalid
pseudo-class which would work, although I think it would display it as pink all the time. I don’t think you can achieve your desired outcome without using JavaScript unless you target input[value=""]
(i.e. empty input).
Just a quick note that you should use a proper <label>
element and associate it to the field for accessibility.