【问题标题】:aligning elements in their containers and the containers on the line对齐容器中的元素和行中的容器
【发布时间】:2016-06-10 21:24:12
【问题描述】:

我尝试将几个元素组合在一起,然后将它们集中在页面上,如下所示:

                                         |
                                         |
              Username:                  |                 
              ________________           |                 IMG 1
              Password:                  |                 
              ________________           |                 IMG 2
                  login                  |
                                         |
                                         |

我不希望用户名和密码居中,我仍然希望它们位于输入框的最左侧。

现在看起来像这样:

                                         |
 Username                              IM|G 2  
                                         |                 
         _______________                 |                 IMG 1
         _______________             Pass|word:                 
                                         |                 
                  login                  |
                                         |
                                         |

我有 IMG 1,登录按钮和垂直线在一个很好的位置,但是表单到处都是。我已经尝试过很多不同的东西来获得登录表单的其余部分和 IMG 2 在正确的位置,但我被卡住了。这是我的 html 文件的基本布局:

<div id="center-wrapper">
    <div id="img1">
        <img src="img1.png" />
    </div>
    <br>
    <div id="img2">
        <img src="img2.png" />
    </div>

    <div id="line"></div>

    <form id="form-wrapper" action="/login/" method="post" style="width:40%;">
    {% csrf_token %}
    {% for field in form %}
    <br>
        {% if field.errors %}
            <div class="form-group has-error">
                <label class="col-sm-2 control-label" for="id_{{ field.name }}">
                {{ field.label }}</label>
                <div class="col-sm-10">
                    {{ field|attr:"class:form-control" }}
                    <span class="help-block">
                        {% for error in  field.errors %}{{ error }}{% endfor %}
                    </span>
                </div>
            </div>
        {% else %}
            <div class="form-group">
                <label class="col-sm-2 control-label" for="id_{{ field.name }}">{{ field.label }}</label>
                <div class="col-sm-10">
                    {{ field|attr:"class:form-control" }}
                    {% if field.help_text %}
                        <p class="help-block"><small>{{ field.help_text }}</small></p>
                    {% endif %}
                </div>
            </div>
        {% endif %}
        <br>
    {% endfor %}
    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <br>
            <button type="submit" class="btn btn-primary" value="Log In">{% trans "Log In" %}</button><br>
            <br>Don't have an account? <a href="/signup/">Sign Up</a>
        </div>
    </div>
    </form>
</div>

我的按钮在我的表单内,所以我不确定为什么那个按钮正确居中而表单的其余部分没有。此外,&lt;br&gt; 没有将 IMG 2 放在 IMG 1 下。我的 CSS 是这样的:

#center-wrapper {
    text-align: center;
    margin: auto;
    width: 60%;
    height: 100%;
}

#form-wrapper {
    width: 50%;
}

#img1 {
    height: 220px;
    width: 274px;
    background: none;
    z-index: 30;
    float: right;
    position: absolute;
    margin-top: 0;
}

#img2 {
    height: 85px;
    width: 274px;
    background: none;
    z-index: 30;
    float: right;
    position: absolute;
    margin-bottom: 0;
}

#line {
    height: 305px;
    width: 2px;
    background-color: #8a8a8a;
    top: 200px;
    left: 50%;
    z-index: 30;
    position: absolute;
}

我不认为我的问题很难,但我一直在努力使这种格式正确,我只是想要一些建议!我正在使用 Django 表单,这些表单的格式化非常棘手(使用小部件调整对其进行格式化),但我认为这对于移动它的位置并不重要。

【问题讨论】:

  • 这可能会给你一些开始的地方:jsfiddle.net/exh3s8vz/1
  • @RachelGallen 我已经为我的表单添加了所有的 html,正如我所说的 Django 表单很难格式化,所以这可能是我的一些问题的根源
  • @ryantdecker 有点帮助,但理想情况下我希望缩小窗口时表格、线条和图像不重叠
  • @AdamBuchananSmith 你的也很有帮助,但我希望图像在放大/缩小窗口大小时保持相同的大小

标签: html css django-forms


【解决方案1】:

请避免在这种布局中使用absolute 位置,这会在某些时候破坏您的视图。

我建议使用其他 CSS 方法。如果您有更多问题可以提出,请查看此 sn-p 示例:

显示 - 表格

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box
}
html,
body {
  height: 100%;
}
#center-wrapper {
  height: 100%;
  width: 100%;
  display: table;
}
#center-wrapper > div {
  width: 50%;
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}
#center-wrapper > div:first-child {
  border-right: 2px solid red;
}
#form-wrapper {
  width: 70%;
  display: inline-block;
}
label,
input {
  width: 100%;
  text-align: left;
  display: block;
}
<div id="center-wrapper">
  <div>
    <form id="form-wrapper">
      <label>User</label>
      <input type="text">
      <label>Pass</label>
      <input type="text">
      <button type="submit" value="Log In">Log In</button>
    </form>
  </div>
  <div>
    <img src="http://placehold.it/200" />
    <img src="http://placehold.it/200" />
  </div>
</div>

内联块

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box
}
html,
body {
  height: 100%;
}
#center-wrapper {
  height: 100%;
  width: 100%;
}
#center-wrapper > div {
  width: 48%;
  display: inline-block;
  vertical-align: middle;
  text-align: center;
}
#center-wrapper > div.line {
  width:2%;
  height:100%;
  background:purple;
}
#form-wrapper {
  width: 70%;
  display: inline-block;
}
label,
input {
  width: 100%;
  text-align: left;
  display: block;
}
<div id="center-wrapper">
  <div>
    <form id="form-wrapper">
      <label>User</label>
      <input type="text">
      <label>Pass</label>
      <input type="text">
      <button type="submit" value="Log In">Log In</button>
    </form>
  </div>
  <div class="line"></div>
  <div>
    <img src="http://placehold.it/200" />
    <img src="http://placehold.it/200" />
  </div>
</div>

注意:其他方法如 flex 也可以,但这里会给你一个想法

【讨论】:

  • 我真的很喜欢这些结果!我将如何缩短红线?
  • 没关系,我明白了:#center-wrapper{ height: 40%; padding-top: 300px; }
  • 我在 padding-top: 25% 制作的 Scratch 现在看起来很完美!
  • @Catherine 很高兴为您提供帮助 ...抱歉回答迟了
【解决方案2】:

不需要使用位置,就这样使用, HTML

<form id="form-wrapper">
    <label for="username">
        Username:
        <input type="text" name="username">
    </label>
    <br>
    <label for="password">
        Password:
        <input type="text" name="password">
    </label>
    <br>
    <button type="submit" value="Log In">Login</button>
</form>

<div id="imgs">
    <img src="img1.png" alt="Img 1" />
    <br>
    <img src="img2.png" alt="Img 2" />
</div>

我只是更改了您的一些代码。 CSS

#center-wrapper {
  margin: auto;
  width: 60%;
  padding-top: 50px;
}
#form-wrapper{
  border-right: 2px dashed gray;
}
#form-wrapper, #imgs {
  width: 49.5%;
  float: left;
  height: 200px;
  padding-top: 50px;
  text-align: center;
}
  #form-wrapper input{
  border: none;
}
#form-wrapper label{
  border-bottom: 1px solid;
}
button {
  border: none;
  background: none;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多