I've created a simple login component and I'd like to vertically center, but I'm not sure how to achieve this using the Angular Flex Layout library.
app.component.html
<router-outlet></router-outlet>
login.component.html
<div fxLayout fxLayoutAlign="center center">
<mat-card fxFlex="30%">
<mat-card-title>Login</mat-card-title>
<mat-card-content fxLayout="column">
<mat-form-field>
<input matInput placeholder="Username">
</mat-form-field>
<mat-form-field>
<input matInput placeholder="Password">
</mat-form-field>
</mat-card-content>
<button mat-raised-button color="accent">Login</button>
</mat-card>
</div>
styles.scss
body{
margin: 0;
background-color: #eff2f5;
}
screenshot:
Centering Vertically By default flex items will fill vertical space of their parent element. To vertically center our div we can add a single CSS property. By using align-items: center we can vertically center all flex items to the parent container along the cross axis of the flex container.
With Flexbox, you can stop worrying. You can align anything (vertically or horizontally) quite painlessly with the align-items , align-self , and justify-content properties.
For vertical alignment, set the parent element's width / height to 100% and add display: table . Then for the child element, change the display to table-cell and add vertical-align: middle . For horizontal centering, you could either add text-align: center to center the text and any other inline children elements.
How to Center an Image with CSS Grid. CSS Grid works like Flexbox, with the added advantage that Grid is multidimensional, as opposed to Flexbox which is 2-dimensional. To center an image with CSS Grid, wrap the image in a container div element and give it a display of grid . Then set the place-items property to center ...
Vertically centering elements with flexbox has no effect if the container element is the same height as its contents. Making the top level <div>
in your example take up all the available vertical space with height: 100%
(or some other Angular Flex Layout specific solution if available - maybe fxFlexFill
) should center its contents right where you want them.
If the parent element has a known height, all you need is fxLayoutAlign="center center"
:
<section class="intro-section">
<div
fxLayout="row"
fxLayout.xs="column"
fxFlexFill
fxLayoutAlign="center center"
>
<div fxFlex="50">
<h1>MAYABI PORTFOLIO MULTIPURPOSE THEME</h1>
<p>lorem ipsum dolor sit amt, consectet adop adipisicing elit, sed do eiusmod
teporara incididunt ugt labore.</p>
</div>
<div fxLayout="50">
hello
</div>
</div>
</section>
.intro-section {
height: 500px;
}
You have to specify the height of the fxLayout (Edited)
<div fxLayout="row" fxLayoutAlign="center center" class="row-height">
<mat-card fxFlex="30%">
<mat-card-title>Login</mat-card-title>
<mat-card-content fxLayout="column">
<mat-form-field>
<input matInput placeholder="Username">
</mat-form-field>
<mat-form-field>
<input matInput placeholder="Password">
</mat-form-field>
</mat-card-content>
<button mat-raised-button color="accent">Login</button>
</mat-card>
</div>
CSS
.row-height {
height: 100%
}
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