我在垂直和水平居中对齐表单时遇到问题,我设法在水平方向居中对齐表单,但无法在不导致表单和图像重叠的情况下也设法垂直居中对齐表单。在页面底部将多张图像水平居中也遇到问题。
.banner {
position: relative;
width: 100%;
top: 0;
left: 0;
padding: 0;
margin: 0;
background-color: #595959;
color: #fff;
text-align: center;
font-family: 'Lato', sans-serif;
font-size: 25px;
padding-top: 50px;
}
#imagesMain {
position: relative;
max-width: 75rem;
left: 0;
right: 0;
margin: auto;
bottom: 0;
padding: 0;
margin: 20px auto;
text-align: center;
}
#imagesMain a {
width: 30%;
float: left;
position: relative;
margin: 1.5%;
}
img {
max-width: 100%;
height: auto;
margin-right: 25px;
position: relative;
}
body,
html {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
body {
vertical-align: middle;
}
#form {
display: table;
margin: 0 auto;
}
<!DOCTYPE html>
<body>
<div class="banner">
<h1>A-Level Revision Website</h1>
</div>
<div id="form">
<form id="loginForm">
<input type="email" class="login-username" autofocus="true" required="true" placeholder="Email" /><br>
<input type="password" class="login-password" required="true" placeholder="Password" /><br>
<input type="submit" name="Login" value="Login" class="login-submit" /><br>
<a href="#" class="login-forgot-pass">forgot password?</a>
</form>
</div>
<div id="imagesMain">
<a href="Maths.html">
<img src="https://i.pinimg.com/originals/06/9a/c8/069ac81cbe0e3a6f8fb43a0df42125a0.jpg" alt="Maths"">
</a>
<a href="ComputerScience.html">
<img src="https://i.pinimg.com/originals/06/9a/c8/069ac81cbe0e3a6f8fb43a0df42125a0.jpg" alt="ComputerScience">
</a>
<a href="Physics.html">
<img src="https://i.pinimg.com/originals/06/9a/c8/069ac81cbe0e3a6f8fb43a0df42125a0.jpg" alt="Physics"">
</a>
</div>
</html>
最佳答案
您可以使用Flexbox执行以下操作:
* {margin: 0; padding: 0; box-sizing: border-box}
body, html {height: 100%}
#container {
display: flex; /* displays flex-items (children) inline */
flex-direction: column; /* stacks them vertically */
height: 100%;
}
.banner,
#loginForm,
.images {
flex: 1;
}
/* Another example:
.banner {flex: 1}
#loginForm {flex: 2} Means that it takes twice as much space as .banner and .images (100% / 4 (in flex values) = 25%, i.e. flex: 1 = 25%).
.images {flex: 1}
*/
.banner {
display: flex;
justify-content: center; /* centers them horizontally */
align-items: center; /* centers them vertically */
text-align: center;
background: #595959;
color: #fff;
font-family: 'Lato', sans-serif;
font-size: 25px;
}
#loginForm {
display: flex; /* also given flex properties */
flex-direction: column; /* stacks the login form elements vertically */
justify-content: center; /* aligns the form horizontally */
align-items: center; /* aligns the form vertically */
margin: 10px 0;
}
#loginForm > input {
margin-bottom: 5px;
padding: 5px;
}
.images {
display: flex; /* also given flex properties */
justify-content: center; /* aligns images horizontally */
align-items: flex-end; /* aligns images at the bottom */
padding: 10px 5px; /* for better presentation */
background: #595959; /* for better presentation */
}
.images > a {
margin: 0 5px;
}
.images > a > img {
display: block;
max-width: 100%;
}
<div id="container">
<div class="banner">
<h1>A-Level Revision Website</h1>
</div>
<form id="loginForm">
<input type="email" class="login-username" placeholder="E-mail" autofocus="true" required>
<input type="password" class="login-password" placeholder="Password" required>
<input type="submit" class="login-submit" name="Login" value="Login">
<a href="#" class="login-forgot-pass">Forgot password?</a>
</form>
<div class="images">
<a href="Maths.html"><img src="https://i.pinimg.com/originals/06/9a/c8/069ac81cbe0e3a6f8fb43a0df42125a0.jpg" alt="Maths"></a>
<a href="ComputerScience.html"><img src="https://i.pinimg.com/originals/06/9a/c8/069ac81cbe0e3a6f8fb43a0df42125a0.jpg" alt="ComputerScience"></a>
<a href="Physics.html"><img src="https://i.pinimg.com/originals/06/9a/c8/069ac81cbe0e3a6f8fb43a0df42125a0.jpg" alt="Physics"></a>
</div>
</div>
该解决方案是完全响应的。我为所有三个孩子赋予了
flex
的1
值,以使它们在height
中相等(100%/ 3(在flex
值中)= 33.33%,即flex: 1
= 33.33%)。如果您愿意,可以给每个孩子一个不同的值,例如
#container > .banner {flex: 1;}
#container > #loginForm {flex: 2;}
#container > .images {flex: 3;}
或任何其他数字(也可以使用小数),并查看它们的响应方式。您可以根据需要调整
flex
值以获得所需的结果,但是请注意.banner
和.images
的不同值会导致#loginForm
不在屏幕上垂直居中。还要注意,如果在某个时候,弹性项目中内容(height
s)的原始img
大于项目本身的height
,那么这将影响弹性项目。关于html - 定位表格和多张图片,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46560382/