I'm trying to make a simple Webshop and I need help with centering the input elements in the top div.
HTML/CSS
body {
margin: 0;
background: lightcyan;
}
.top {
position: fixed;
background: lightblue;
width: 100%;
}
.top img {
width: 80px;
float: left;
}
.top h1 {
float: left;
}
.top form {
float: right;
height: 100%;
}
.top form input {
display: block;
float: right;
}
<html>
<head>
<title>Webshop</title>
</head>
<body>
<div >
<img src="ImageUsed.png">
<h1>Webshop Title</h1>
<form>
<input type="submit" value="register">
<input type="submit" value="login">
</form>
</div>
</body>
</html>
The div
, aswell as the img
and h1
elements look good, but I want the two input
elements inside the form
element to be centered vertically inside the div
element. Any Idea how I can do that?
CodePudding user response:
Remove all floats as they are not needed when using flex. Set flex
to both top
and your <form>
then use align-items: center;
.
I also added another div
to nest your img
and h1
in and flexed that so space-between
on top
pairs them next to each other.
body {
margin: 0;
background: lightcyan;
}
.top {
position: fixed;
background: lightblue;
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.top img {
width: 80px;
}
form,
.top > div:nth-child(1) {
display: flex;
align-items: center;
}
.top form {
height: 100%;
}
.top form input {
display: block;
}
<html>
<head>
<title>Webshop</title>
</head>
<body>
<div >
<div>
<img src="ImageUsed.png">
<h1>Webshop Title</h1>
</div>
<form>
<input type="submit" value="register">
<input type="submit" value="login">
</form>
</div>
</body>
</html>
CodePudding user response:
Do not use floats. Use flexbox instead which is what you want to arrange elements in one axis.
<style>
body{
margin: 0;
background: lightcyan;
}
.top{
position: fixed;
background: lightblue;
width: 100%;
display: flex;
align-items: center;
}
.top h1{
margin-right: auto;
}
.top form input{
display: block;
float: right;
}
</style>
<html>
<head>
<title>Webshop</title>
</head>
<body>
<div >
<img src="ImageUsed.png">
<h1>Webshop Title</h1>
<form>
<input type="submit" value="register">
<input type="submit" value="login">
</form>
</div>
</body>
</html>
CodePudding user response:
By using flexbox, it becomes more easy
.top {
position: fixed;
background: lightblue;
width: 100%;
display: flex;
justify-content: space-around;
align-items: center;
}
CodePudding user response:
If you apply a fixed height
and position: relative
to your fixed-position header (which I would recommend anyway), you can use the following method for the parent element of those input elements, which uses position: absolute;
, top: 50%
and translateY(-50%)
to center that element vertically in its parent, and right: 0
instead of float: right
to align it right:
body{
margin: 0;
background: lightcyan;
}
.top{
position: fixed;
background: lightblue;
width: 100%;
height: 80px;
position: relative;
}
.top img{
width: 80px;
float: left;
}
.top h1{
float: left;
}
.top form{
display: block;
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
}
.top form input{
display: block;
float: right;
}
<html>
<head>
<title>Webshop</title>
</head>
<body>
<div >
<img src="ImageUsed.png">
<h1>Webshop Title</h1>
<form>
<input type="submit" value="register">
<input type="submit" value="login">
</form>
</div>
</body>
</html>