I'm trying to create the 'floating labels' effect for my fields. However, I'm having difficulties because the HTML code is structured in such a way that prevents it from being achieved using only CSS as there is no way to use CSS combinators (>
,+
,~
) and I do not have the ability to change the HTML code.
My code:
label {display: block; position: absolute; margin: 15px 0 0 12px; color: #606060; font-family: "Arial";}
input {display: block; padding: 15px 12px; border: 1px solid #bbb; border-radius: 5px; width: 300px;}
<p class="container">
<label for="input">
Label
</label>
<span class="input-wrapper">
<input type="input-text" class="input" name="input" id="input" placeholder="">
</span>
</p>
But I believe it would be possible if I was able to give the container
a CSS class based on the field's input/state. I would like to give the container
the display-floating-label
class if the value of the input
is greater than 0 ( > 0 ). And maybe when the input
is focused as well. Is that possible with JavaScript?
I've tried:
$(document).ready(function() {
var formFields = $('.container');
formFields.each(function() {
var field = $(this);
var input = field.find('input');
var label = field.find('label');
function checkInput() {
var valueLength = input.val().length;
if (valueLength > 0 ) {
label.addClass('display-floating-label')
} else {
label.removeClass('display-floating-label')
}
}
input.change(function() {
checkInput()
})
});
});
But it didn't work. I'm not very familiar with JavaScript so I would really appreciate if someone could help me out.
Here's what I'm trying to achieve:
*I can not change the structure of the HTML code, I can only work with what I have.