I have attached the stackblitz below
https://stackblitz.com/edit/angular-dgx3pe
What i am trying to achieve is while clicking on the label element it should focus on the input.Hence the input:focus class gets activated.What I belive is that it can be achievable through javascript/jquery.But i prefer the angular way to achieve this.
In Brief,these are the two things i am trying to do,
HTML
<input class="input" type="text">
<label class="label">Name</label>
<div>
<input class="input" type="text">
<label class="label">Name</label>
</div>
CSS
p {
font-family: Lato;
}
.input
{
border:none;
border-bottom:1px solid grey;
outline:none;
margin-top:20%;
}
.input:focus
{
border-bottom:1px solid orange;
}
.label
{
position:relative;
left:-170px;
}
.input:focus + .label
{
bottom:20px;
}
<input #firstNameField class="input" type="text">
<label class="label" (click)="focusOnFirstName()">First Name</label>
@ViewChild("firstNameField") firstNameField;
focusOnFirstName(){
this.firstNameField.nativeElement.focus();
}
You can do this with pure markup. You need to add an id to the input and a for element to the label
<input class="input" type="text" id="firstName">
<label class="label" for="firstName" >First Name</label>
This is just part of the html spec - labels can be associated with inputs - the out of the box functionality here is that on clicking a label it sets focus to its associated input. id and for attributes must match for this to work.
For the second part of your question, and to reuse your css classes - add matching variables to your component. Use ngClass to add the .go-top class when the variable has a value
In component -
firstName: string;
Then in the html -
<input class="input" type="text" id="firstName" [(ngModel)]="firstName">
<label class="label" for="firstName" [ngClass]="{'go-top': firstName}">First Name</label>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With