html - 定位表格和多个图像

标签 html css vertical-alignment centering

我在将表单垂直和水平居中时遇到问题,我设法将表单水平居中,但无法在不导致表单和图像重叠的情况下将其垂直居中。在页面底部水平居中多个图像也有问题。

.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>

此解决方案是完全响应式的。我给了所有三个 child flex 1使它们在 height 中相等(100%/3(在 flex 值中)= 33.33%,即 flex: 1 = 33.33%)。 如果你愿意,你可以给每个 child 一个不同的值,例如#container > .banner {flex: 1;} #container > #loginForm {flex: 2;} #container > .images {flex: 3;}或任何其他数字(也可以使用小数),看看他们如何回应。

您可以调整flex 根据您的需要获得所需的结果,但请注意 .banner 的不同值和 .images结果 #loginForm没有在屏幕上垂直居中。另请注意,如果原始 height flex-item 中的内容 ( img s) 在某些时候比 heightitem 本身,那么这将影响 flex-items height .

关于html - 定位表格和多个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46560382/

相关文章:

html - 当屏幕尺寸缩小时,网站上的链接不起作用

css - 将 -webkit-tap-highlight-color 更改为透明

html - 通过 iframe、vimeo 或自托管实现视频?

CSS如何将一个元素定位在另一个元素的中间(半高/垂直50%)

html - 如何让我的 DIV 垂直对齐到顶部?

javascript - 在 Firefox 中禁用主窗口滚动 onmouseenter iframe

html - 如何制作没有文本但里面有图像的html.actionlink

javascript - 我需要一种方法来制作多文本输出 onclick 按钮

javascript改变.text字体颜色

html - 如何将大字体文本居中并让小字体文本底部对齐