【问题标题】:Aligning items to the bottom using flex使用 flex 将项目与底部对齐
【发布时间】:2016-05-28 04:26:41
【问题描述】:

我正在尝试使用 flex 将父项内部的项目与父项的底部对齐,但由于某种原因它无法正常工作。我做错了什么?

#login {
border: 1px solid red;
height: 50px;
display: flex;
}
.login {
border-radius: 5px;
padding: 5px;
align-self: flex-end;
}
#loginButton {
border-radius: 5px;
padding: 7.5px;
background-color: black;
color: white;
cursor: pointer;
}
<div id = 'login'>
<form method = 'POST' action = 'login.php'>
<input class = 'login' type = 'text' name = 'username' maxlength = '20' placeholder = 'Username' size = '10'>
<input class = 'login' type = 'password' name = 'password' maxlength = '20' placeholder = 'Password' size = '10'>
<input class = 'login' id = 'loginButton' type = 'submit' value = 'Login'>
</form>
</div>

【问题讨论】:

    标签: html css flexbox vertical-alignment


    【解决方案1】:

    在您的表单上:

    form {
        display: flex;
        align-items: flex-end;
        margin: 0;
        height: 100%;
    }
    

    由于只有 flex 容器的 子元素 成为 flex 项,所以将要对齐的元素的父元素设置为 flex 容器。

    在您的代码中,#login 是弹性容器,使 form 成为唯一的弹性项目。您需要 flex 属性才能更深一层地应用,因此也将 form 设为 flex 容器。

    【讨论】:

      【解决方案2】:

      您需要对齐父项中的项目。

      * {
        box-sizing: border-box;
      }
      #login {
        border: 1px solid red;
        height: 50px;
        display: flex;
        align-items: flex-end;
      }
      .login {
        border-radius: 5px;
        padding: 5px;
      }
      #loginButton {
        border-radius: 5px;
        padding: 7px;
        background-color: black;
        color: white;
        cursor: pointer;
      }
      <div id='login'>
        <form method='POST' action='login.php'>
          <input class='login' type='text' name='username' maxlength='20' placeholder='Username' size='10'>
          <input class='login' type='password' name='password' maxlength='20' placeholder='Password' size='10'>
          <input class='login' id='loginButton' type='submit' value='Login'>
        </form>
      </div>

      【讨论】:

      • 虽然登录按钮在底部一直对齐,但用户名和密码对齐略高...离底部大约 3 个像素。这是为什么呢?
      • 另外,我在我的网站上试过这个,但由于某种原因它不起作用。 iscattered.com/testx.php
      • 嗯,这些项目是不同的大小......你有不同的填充按钮。
      • 在您的网站上,表单底部有按钮,但表单本身不在包装 div 的底部。
      【解决方案3】:

      form 应该是 flex 容器,margin 可用于完成定位并避免拉伸。

      form {
        border: 1px solid red;
        height: 50px;
        display: flex;
      }
      .login {
        border-radius: 5px;
        padding: 5px;
        margin: auto 1em;
      }
      #loginButton {
        border-radius: 5px;
        padding: 7.5px;
        background-color: black;
        color: white;
        cursor: pointer;
        margin-left: auto;
      }
      /* added for demo purpose to see the form in middle */
      
      html {
        height: 100%;
        display: flex;
      }
      body {
        width: 80%;
        margin: auto;
      }
      <div id='login'>
        <form method='POST' action='login.php'>
          <input class='login' type='text' name='username' maxlength='20' placeholder='Username' size='10'>
          <input class='login' type='password' name='password' maxlength='20' placeholder='Password' size='10'>
          <input class='login' id='loginButton' type='submit' value='Login'>
        </form>
      </div>

      【讨论】:

      • 问题是什么?
      • @jessica 试图使用 flex 来对齐表单元素,但是没有一个表单元素是 flex 框的子元素......然后 align-self 似乎表明你想要最右边的东西...... . 实际使用的边距向您展示您可以跳过一些 flex 属性而只使用边距
      猜你喜欢
      • 2018-05-26
      • 2018-02-17
      • 2022-01-15
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      相关资源
      最近更新 更多