CSS Floated div 出现在父 div 下面

标签 css css-float

我正在尝试根据 this codepen 设置联系表单的样式并且 float 表单在其父 div 下面而不是在其中时遇到问题。我试过添加一个 clearfix,但没有成功。我也没有运气就把溢出弄得一团糟。 CSS 不是我的强项,我在 rails 中做这件事会使事情变得复杂,所以我很确定这只是我所缺少的一些愚蠢的东西。生成的 HTML 和我的 CSS 在下面和 here is a fiddle在那里你可以看到它在做什么。我希望整个表格都在白色部分,而不是在它下面。感谢您提供的任何帮助!

HTML

<div id="contact">
    <div id="contact-header">Contact Me</div>
    <div id="form-main">
        <div id="form-div">
            <form accept-charset="UTF-8" action="/contacts" class="new_contact" id="new_contact" method="post">
                <div style="display:none">
                    <input name="utf8" type="hidden" value="&#x2713;" />
                    <input name="authenticity_token" type="hidden" value="EoDahqxZMOLK9RYj8VfIO3lNh4EuGIcUZFv2+aWPj4Q=" />
                </div>
                <p class="name">
                    <input class="validate[required,custom[onlyLetter],length[0,100]] feedback-input" id="contact_name" name="contact[name]" placeholder="Name" type="text" />
                </p>
                <p class="email">
                    <input class="validate[required,custom[email]] feedback-input" id="contact_email" name="contact[email]" placeholder="Email" type="text" />
                </p>
                <p class="text">
                    <textarea class="validate[required,length[6,300]] feedback-input" id="contact_message" name="contact[message]" placeholder="Message"></textarea>
                </p>
                <div class="submit">
                    <input id="button-blue" name="commit" type="submit" value="SEND" />
                </div>
            </form>
        </div>
    </div>
</div>
<!--contact-->

CSS

#contact {
  background-color: white;
}

#contact-header{
  text-align:center;
  font-size: 40px;
  color: #FAF8F2;
  padding-top: 30px;
}

#form-main{
  width:100%;
  float:left;
  padding-top:0px;
}

#form-div {
  background-color:#F0B49E;
  padding: 35px 35px 50px 35px;
  width: 450px;
  float: left;
  left: 50%;
  position: absolute;
  margin-top:30px;
  margin-left: -260px;
  -moz-border-radius: 7px;
  -webkit-border-radius: 7px;
}

.feedback-input {
  color:#3c3c3c;
  font-family: "PT Sans", Helvetica, Arial, sans-serif;
  font-weight:500;
  font-size: 18px;
  border-radius: 0;
  line-height: 22px;
  background-color: #FAF8F2;
  padding: 13px 13px 13px 13px;
  margin-bottom: 10px;
  width:100%;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  -ms-box-sizing: border-box;
  box-sizing: border-box;
  border: 3px solid rgba(0,0,0,0);
}

.feedback-input:focus{
  background: #fff;
  box-shadow: 0;
  border: 3px solid #A79C8E;
  color: #A79C8E;
  outline: none;
  padding: 13px 13px 13px 54px;
}

.focused{
  color:#30aed6;
  border:#30aed6 solid 3px;
}

textarea {
    width: 100%;
    height: 150px;
    line-height: 150%;
    resize:vertical;
}

input:hover, textarea:hover,
input:focus, textarea:focus {
  background-color:white;
}

#button-blue{
  font-family: 'PT Sans', Arial, Helvetica, sans-serif;
  float:left;
  width: 100%;
  border: #A79C8E solid 4px;
  cursor:pointer;
  background-color: #A79C8E;
  color:white;
  font-size:24px;
  padding-top:22px;
  padding-bottom:22px;
  -webkit-transition: all 0.3s;
  -moz-transition: all 0.3s;
  transition: all 0.3s;
  margin-top:-4px;
  font-weight:700;
}

#button-blue:hover{
  background-color: #F0B49E;

}

.submit:hover {
  color: #3498db;
}

.ease {
  width: 0px;
  height: 74px;
  background-color: #FAF8F2;
  -webkit-transition: .3s ease;
  -moz-transition: .3s ease;
  -o-transition: .3s ease;
  -ms-transition: .3s ease;
  transition: .3s ease;
}

.submit:hover .ease{
  width:100%;
  background-color:#A79C8E;
}

最佳答案

啊...不幸的是, float 只是部分地影响了您的体验。在 #form-div 上使用 position: absolute 实际上会带来更大的问题(在我看来)。

这是我要删除的 CSS 属性。 float 和 position 属性的使用非常自由,但我认为不需要这么多属性来获得您要查找的内容:

#form-main {
    float:left;
}
#form-div {
    float: left;
    left: 50%;
    position: absolute;
    margin-top:30px;
    margin-left: -260px;
}
#button-blue {
    float:left;
}

只有一个我会添加 - 这让您可以轻松地将 #form-div 居中,而无需应用负边距或绝对定位:

#form-div {
    margin:30px auto 0;
}

这是一个 JSFiddle注释掉那些样式,并添加最后一个样式。

由于 float 和绝对定位采用正常文档流之外的元素,因此在不对大量值进行硬编码的情况下尝试实现所需的布局可能会很棘手。在这种情况下,CSS 导致许多元素的高度被忽略,导致 #contact 没有调整大小以适应它们。如果您遇到过类似的问题,请尝试删除大部分/所有这些类型的样式,并从头开始工作 - 这会有很大帮助!

希望对您有所帮助!如果您有任何问题,请告诉我。

关于CSS Floated div 出现在父 div 下面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24234563/

相关文章:

javascript - 导航更改背景在滚动位置的粘滞位置

css - 包含覆盖文本到图像以供移动 View

javascript - Visual Studio 2005 与 Visual Studio Express 2012

html - 自己的 css 文件被忽略

javascript - Select2和 float div问题

css - 使用 CSS 强制 float column-1 中的超宽元素出现在 float column-2 下方

html - 为什么在清除 float 后不应用最高 margin ?

javascript - 有什么方法可以判断 float 元素是否已向下移动?

html - ul 元素出现在导航栏中

css - 样式对组件内容的影响